280 likes | 537 Views
实验一 MATLAB 的基本操作、编程基础. 一、实验目的 1. 初步了解 matlab 6.5 应用环境; 2. 练习利用 matlab 6.5 中的命令或程序描述基本信号; 3. 练习 matlab 6.5 中的绘图方法; 4. 初步练习 M-File 的建立、保存、调用。. 二、实验原理与方法 各种信号、运算形式的数学描述及相应的命令或程序。. 涉及函数. 矩阵生成函数: 1 、 zeros ; 2 、 ones ; 3 、 rand ; 4 、 randn 。
E N D
实验一 MATLAB的基本操作、编程基础 一、实验目的 1.初步了解matlab 6.5应用环境; 2.练习利用matlab 6.5中的命令或程序描述基本信号; 3.练习matlab 6.5中的绘图方法; 4.初步练习M-File的建立、保存、调用。 二、实验原理与方法 各种信号、运算形式的数学描述及相应的命令或程序。
涉及函数 矩阵生成函数:1、zeros;2、ones;3、rand;4、randn。 画图函数:1、figure;2、plot;3、subplot;4、stem;5、xlabel;6、ylabel;7、title;8、text;9、axis。 数学运算函数:1、min;2、max;3、abs;4、 angle;5、 cos;6、exp;7、conv 。 调试函数:error 其他函数:find fliplr
三、实验内容及步骤 1.启动matlab 6.5,了解常用窗口及其作用;
2.MATLAB编程基础 请在命令窗口中输入蓝色部分,结合讲授进行理解 1)常用一维矩阵的生成 N=10 A=zeros(1,N) %生成1行N列的全0矩阵 A=ones(1,N) %生成1行N列的全1矩阵 A=randn(1,N) %生成1行N列的随机矩阵 2)简单一维矩阵的生成 x1=[1 2 3 0 0] x=0.123 y1=[1,2,3,4,5] y=123
请在命令窗口中输入蓝色部分,结合讲授进行理解请在命令窗口中输入蓝色部分,结合讲授进行理解 3)利用冒号生成向量 a1=0:1:9 b1=0:9 t=-0.1:0.01:0.1 %生成有N个元素的行向量X,其值在a与b之间线性分布 a=1; b=100; N=10; X=linspace(a,b,N) %生成有N个元素的行向量Y,其值在10a与10b之间等分分布 a=1; b=5; N=10; Y=logspace(a,b,N) 4)基本语句格式 变量名列表=表达式; %左边是返回值,右边是表达式的定义
请在命令窗口中输入蓝色部分,结合讲授进行理解请在命令窗口中输入蓝色部分,结合讲授进行理解 5)for循环语句基本格式 for 循环变量=起始值:步长:终止值 循环体 end 例: for i=10:-1:1 y(i)=i; end y 执行后y的值为 y= 1 2 3 4 5 6 7 8 9 10
6)while循环语句基本格式 while 表达式 循环体 end 例: sum=0;i=0; while sum<100 i=i+1; sum=sum+i; end sum i 执行后sum的值为 sum= 105 i= 14 请在命令窗口中输入蓝色部分,结合讲授进行理解
7)if语句基本格式 if 逻辑表达式 语句 end 例: for i=1:10 a(i)=i; if i>5 a(i)=10-i; end end a 执行后a的值为 a= 1 2 3 4 5 4 3 2 1 0 请在命令窗口中输入蓝色部分,结合讲授进行理解
8)if-else语句基本格式 例: if x>=1 y=10; elseif x>-1 & x<1 y=0; else y=-10; end 上述程序段的功能为? 请在命令窗口中输入蓝色部分,结合讲授进行理解
9)switch语句基本格式 switch 表达式 case 值1 语句1 case 值2 语句2 … otherwise 语句n end
请在命令窗口中输入蓝色部分,结合讲授进行理解请在命令窗口中输入蓝色部分,结合讲授进行理解 10)MATLAB自定义函数(M-File)基本格式 先定义后保存再调用 定义:在M-File窗口中输入 function c =WAdd(a,b)%函数定义行 c = a+b;%函数体的语句 保存:保存在work文件夹中以便调用 调用:在命令窗口中输入 a=1; b=1; c= WAdd(a,b) ;%得到c=2 相关说明:1.写M-file的地方:在选择File/New/M-file后出现的窗口中;2. function是关键字;3. M-file的保存:一般应保存在Matlab工作目录中的work文件夹下。文件名是函数名字,如WAdd.m,否则无法调用。
请在命令窗口中输入蓝色部分,结合讲授进行理解请在命令窗口中输入蓝色部分,结合讲授进行理解 3. 基本信号的表示、引用、图形描述 表示x(n) ,一般应采用两个矢量,如 x1=[1 -1 3 2 0 4 5 2 1] %产生序列x1(n) nx1=[-3 -2 -1 0 1 2 3 4 5] x2=[1,-1,3,2,0,4,5,2,1] %产生序列x2(n) nx2=-3:5 x3=[1,-1,3,2,0,4,5,2,1] ; %产生序列x3(n) nx3=[-3,-2,-1,0,1,2,3,4,5]; x3 nx3
练习 X(1)=? Matlab与C,C++不同,矩阵(向量)坐标从1开始,而不是从零开始 注:1. matlab命令可在command window中直接输入; 2. 注意命令后有无“;” 的区别。 3. %表示注释
%单位取样序列(1):δ(n) N=8; x=zeros(1,N);% x=0 0 0 0 0 0 0 0 x(1)=1;% x=1 0 0 0 0 0 0 0 %单位取样序列(2):δ(n) N=8; n=0:N-1; x=[n==0]; %移位单位取样序列(3):δ(n-n0) n1=0;n2=10;n0=5; n=n1:n2; x=[(n-n0)==0];% x=0 0 0 0 0 1 0 0 0 0 0
%单位阶跃序列(1):u(n) N=10; x=ones(1,N);% x=1 1 1 1 1 1 1 1 1 1 %产生n1=<n0=<n2上的单位阶跃序列(2):u(n-n0) n1=0;n2=10;n0=5 n=n1:n2; x=[(n-n0>=0)];% x=0 0 0 0 0 1 1 1 1 1 1
% 产生 x(n) = u(n-n0)的M-file或自定义函数; n1≤n,n0 ≤ n2 function [x,n] = stepseq(n0,n1,n2) if ((n0 < n1) | (n0 > n2) | (n1 > n2)) error('参数必须满足 n1 <= n0 <= n2') end n = [n1:n2]; x = [(n-n0) >= 0]; %x = [zeros(1,(n0-n1)), ones(1,(n2-n0+1))]; 保存: 调用:生成u(n-8),区间为0到20 则 [x,n] = stepseq(8,0, 20) 结果? 调用:调用自定义函数产生单位阶跃序列(2):u(n-5)、 u(n-10) n1=0; n2=19; [x1,nx1] = stepseq(5,n1,n2) % u(n-5) [x2,nx2] = stepseq(10,n1,n2) % u(n-10)
%实指数序列:x(n)=anu(n) N=5;a=0.5; n=0:N-1; x=a.^n;% x=1.0000 0.5000 0.2500 0.1250 0.0625 %正(余)弦序列:x(n)=cos(wn+Φ) N=5; w0=pi/4; Q=pi/3; n=0:N-1; x=cos(w0*n+Q);% x=0.5000 -0.2588 -0.8660 -0.9659 -0.5000 %周期序列 y=[x x x x];%4个周期的序列
%复指数序列:x(n)=e(σ+jw)n N=3;sigma=0.5;w0=pi/4; n=0:N-1; x=exp((sigma+j*w0)*n);% x=1.0000 1.1658 + 1.1658i 0.0000 + 2.7183i %这里的i和j为虚部标识。再如: x=1+2j或y=1+2i x1=abs(x);%序列x的幅值 x2=angle(x);%序列x的相位 %随机序列 N=5; rand(1,N);%N点,在[0,1]上均匀分布 randn(1,N);%N点,均值为0方差为1的高斯随机序列 rand('state',0)
%序列操作 %实现信号加的M-file :y(n)=x1(n)+x2(n) function [y,n] = sigadd(x1,n1,x2,n2) % implements y(n) = x1(n)+x2(n) % ----------------------------- % [y,n] = sigadd(x1,n1,x2,n2) % y = sum sequence over n, which includes n1 and n2 % x1 = first sequence over n1 % x2 = second sequence over n2 (n2 can be different from n1) % 信号的长度一样才能相加,起点和止点一样才不会加错 n = min(min(n1),min(n2)):max(max(n1),max(n2));% duration of y(n) y1 = zeros(1,length(n)); y2 = y1;% initialization y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;% x1 with duration of y y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;% x2 with duration of y y = y1+y2;% sequence addition
%实现信号乘的M-file : y(n)=x1(n) x2(n) function [y,n] = sigmult(x1,n1,x2,n2) % implements y(n) = x1(n)*x2(n) % ----------------------------- % [y,n] = sigmult(x1,n1,x2,n2) % y = product sequence over n, which includes n1 and n2 % x1 = first sequence over n1 % x2 = second sequence over n2 (n2 can be different from n1) % 信号的长度一样才能相乘,起点和止点一样才不会乘错 n = min(min(n1),min(n2)):max(max(n1),max(n2)); % duration of y(n) y1 = zeros(1,length(n)); y2 = y1; y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 with duration of y y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 with duration of y y = y1.*y2; % sequence multiplication
%改变比例:y(n)=ax(n) y=a*x; %移位的M-file:y(n)=x(n-n0) function [y,n] = sigshift(x,m,n0) % implements y(n) = x(n-n0) % ------------------------- % [y,n] = sigshift(x,m,n0) % n = m+n0; y = x; %折叠的M-file:y(n)=x(-n) function [y,n] = sigfold(x,n) % implements y(n) = x(-n) % ----------------------- % [y,n] = sigfold(x,n) % y = fliplr(x); n = -fliplr(n); %取样和: y=sum(x(n1:n2)); %取样积 y=prod(x(n1:n2)); %信号能量 Ex=sum(x.*conj(x)); Ex=sum(abs(x).^2); %信号功率 Px=sum(abs(x).^2)/N;
%信号加、乘、移位、折叠例子 Exp1_1 x1=[1 2 3 0 1 2 3];n1=[0 1 2 3 4 5 6]; x2=[1 2 3 4 5];n2=-1:3; [z1,nz1]=sigadd(x1,n1,x2,n2); %调用自定义相加函数 [z2,nz2]=sigmult(x1,n1,x2,n2); %调用自定义相乘函数 [z3,nz3]=sigshift(x1,n1,3); %调用自定义移位函数 [z4,nz4]=sigfold(x1,n1); %调用自定义反褶函数 %画图,红色x轴,蓝色y轴 figure(1); %调用第1个图形窗口 subplot(221);stem(n1,x1);xlabel('n1');ylabel('x1'); subplot(223);stem(n2,x2);xlabel('n2');ylabel('x2'); subplot(222);stem(nz1,z1);xlabel('nz1');ylabel('z1=x1+x2'); subplot(224);stem(nz2,z2);xlabel('nz2');ylabel('z2=x1*x2'); figure(2); %调用第2个图形窗口 subplot(311);stem(n1,x1);xlabel('n1');ylabel('x1'); subplot(312);stem(nz3,z3);xlabel('nz3');ylabel('z3=x1(n-3)'); subplot(313);stem(nz4,z4);xlabel('nz4');ylabel('z4=x(-n)');
%卷积运算的M-file:y(n)=x1(n)*x2(n) function [y,ny] = conv_m(x,nx,h,nh) % Modified convolution routine for signal processing % -------------------------------------------------- % [y,ny] = conv_m(x,nx,h,nh) % y = convolution result % ny = support of y % x = first signal on support nx % nx = support of x % h = second signal on support nh % nh = support of h % nyb = nx(1)+nh(1); %卷积结果起点 nye = nx(length(x)) + nh(length(h)); %卷积结果止点 ny = [nyb:nye]; y = conv(x,h);
%卷积运算例子: 已知:h(n)=(0.9)nu(n),x(n)=u(n)-u(n-10).求y(n)=h(n)*x(n). n = -5:50; u1 = stepseq(0,-5,50); %u(n)=u1(n) u2=stepseq(10,-5,50); %u(n-10)=u2(n) x = u1-u2; % input x(n)= u(n)-u(n-10) h = ((0.9).^n).*u1; % 脉冲响应 h(n) %画图,红色x轴,蓝色y轴 figure(1); subplot(3,1,1); stem(n,x); axis([ -5,50 , 0,2 ]); title('输入序列');ylabel('x(n)');text(52,0,'n'); subplot(3,1,2); stem(n,h); axis([-5,50,0,2]) title('脉冲响应');ylabel('h(n)'); text(52,0,'n'); %调用卷积运算的M-file求输出响应 [y,ny] =conv_m(x,n,h,n); subplot(3,1,3); stem(ny,y); axis([-5,50,0,8]) title('输出序列');ylabel('y(n)');text(52,0,'n');
更多的信号产生函数 1)gauspuls:产生高斯调制的正弦脉冲 yi=gauspuls(t,fc,bw); %fc中心频率,bw带宽 2)gmonopuls:产生高斯单脉冲 y=gmonopuls(t,fc); %fc中心频率 3) pulstran:产生脉冲串 y=pulstran(t,d,’func’); %func=gauspuls或rectpuls或tripuls 4) rectpuls:产生非周期矩形的取样信号 y=rectpuls(t); y=rectpuls(t,w);%指定矩形的宽度
5) sawtooth:产生锯齿波或三角波 y=sawtooth(t); y=sawtooth(t,width);%0<width≤1 6) sinc:产生sinc函数 y=sinc(x); 7) square:产生方波 y=square(t); y=square(t,duty);%duty指定占空比 8) tripuls:产生非周期三角波的取样信号方波 y=tripuls(T); y= tripuls(T,w); %w指宽度 y= tripuls(T,w,s); %s指斜度-1<s<1
3.画出以下各序列在给定区间的图形。 • 1) x(n)=2δ(n+2)-δ(n-4)+δ(n) ,-5≤n≤5 • 2) x(n)=n[u(n)-u(n-10)]+10e-0.3(n-10)[u(n-10)-u(n-20)], • 0≤n≤20 • 3) x(n)=2-cos(0.4πn)- cos(0.8πn), 0≤n≤50 • 4.令x(n)={1,2,3,4,5,6,7,6,5,4,3,2,1},画出下列序列的图形 • 1) x1(n)=2x(n-5)-3x(n-4) • 2) x2(n)=x(3-n)-x(n)x(n-2) • 3) xe(n)和xo(n) ---通过编写求xe(n)、xo(n)的M-file来实现(需要给出测试函数) xe(n) 和xo(n)分别为x(n)的偶部和奇部 五、实验报告要求 1.简述实验目的及实验原理; 2.记录实验内容3、4的命令或程序及图形。