实验二基于MATLAB的信号表示与运算一、实训目的1.掌握用Matlab软件产生基本信号(连续/离散的正弦、方波、锯齿波、Sinc函数)的方法2.应用Matlab软件实现信号的加、减、乘、除运算3.应用Matlab软件实现信号的时移、反折、尺度变换二、实训仪器与设备电脑、MATLAB软件三、实训内容1.产生常见信号的函数如表1所示。表1函数名功能常见调用格式说明sin正弦信号sin(x)返回x的正弦值cos预弦信号cos(x)返回x的余弦值randn随机数randn(n)返回n×n维的随机数square周期方波square(x)在时间x内产生周期为2π的方波sawtooth周期锯齿波sawtooth(x)在时间x内产生周期为2π的锯齿波tripuls等腰三角形tripuls(x)产生以x=0为中点的等腰三角形sincSinc函数sinc(x)返回sin(pi*x)/(pi*x)的值log自然对数函数log(x)返回log(x)的值exp指数函数exp(x)返回ex的值a、产生正弦波t=(0:0.001:50);y=sin(2*pi*50*t);plot(t(1:50),y(1:50))b、产生叠加随机噪声的正弦波t=(0:0.001:50);y=sin(2*pi*50*t);s=y+randn(size(t));plot(t(1:50),s(1:50))2.连续信号的运算(1)相加连续信号的相加,是指两信号的对应时刻值相加,即f(t)=f1(t)+f2(t)。下面用MATLAB的符号运算命令来表示两连续信号的相加,然后用ezplot命令绘制出其结果波形图。其中f1,f2是两个用符号表达式表示的连续信号,s为相加得到的和信号的符号表达式。s=symadd(f1,f2)或s=f1+f2ezplot(s)(2)相乘连续信号的相乘,是指两信号的对应时刻值相乘,即f(t)=f1(t)*f2(t)。与相加运算类似,我们用下面的MATLAB命令来实现连续信号的相乘及其结果的可视化,其中f1,f2为两个用符号表达式表示的信号,w为相乘得到的积信号的符号表达式。w=symmul(f1,f2)或w=f1*f2ezplot(w)(3)移位连续信号的移位也称平移。对于连续信号f(t),若有常数t00,延时信号f(t-t0)是将原信号沿正t轴方向平移时间,而f(t+t0)是将原信号沿负t轴方向移动时间t0。我们可用下面的命令来实现连续信号的平移及其结果的可视化,其中f是用符号表达式表示的连续时间信号,t是符号变量,subs命令则将连续信号中的时间变量t用t-t0替换:y=subs(f,t,t-t0);ezplot(y)(4)反折连续信号的反折,是指将信号以纵坐标为轴反折,即将信号f(t)中的自变量t换为-t。与连续信号的平移类似,我们用下面的命令实现连续信号的反折及其结果的可视化,其中f是用符号表达式表示的连续时间信号,t是符号变量:y=subs(f,t,-t)ezplot(y)(5)尺度变换连续信号的尺度变换,是指将信号的横坐标进行展宽或压缩变换,即将信号f(t)中的自变量t换为at,当a1时,信号f(at)以原点为基准,沿横轴压缩到原来的1/a;当0a1时,信号f(at)将沿横轴展宽至原来的1/a倍。我们用下面的命令来实现连续信号的尺度变换及其结果的可视化,其中f是用符号表达式表示的连续时间信号,t是符号变量:y=subs(f,t,a*t)ezplot(y)(6)倒相连续信号的倒相,是指将信号f(t)以横轴为对称轴对折得到-f(t),可用下面的命令实现连续信号的倒相及其结果的可视化,其中f是用符号表达式表示的连续时间信号。y=-fezplot(y)注意:两个信号相加,其和信号在任意时刻的信号值等于两信号在该时刻的信号值之和。两个信号相乘,其积信号在任意时刻的信号值等于两信号在该时刻的信号值之积。在Matlab中,矩阵和数组的加减法用符合“+”、“-”实现。矩阵的乘法用“*”实现,要求相乘的矩阵要有相邻公共维。数组的乘除法是指两同维数组间对应元素之间的乘除法,运算符为“.*”、“./”或“.\”。对于以上的命令,可在画图命令之后加入坐标轴的调整等命令,以使画出的图形更清晰、直观。下面举例说明如何用MATLAB来实现连续信号的时域运算、变换及其结果的可视化。例如:t=0:0.01:2;f1=exp(-3*t);f2=0.2*sin(4*pi*t);f3=f1+f2;f4=f1.*f2;subplot(2,2,1);plot(t,f1);title('f1(t)');subplot(2,2,2);plot(t,f2);title('f2(t)');subplot(2,2,3);plot(t,f3);title('f1+f2');subplot(2,2,4);plot(t,f4);title('f1*f2');用matlab的符号函数实现信号的时移、反折、尺度变换:由f(t)到f(-at+b)(a0)步骤:调用函数:subs(S,OLD,NEW)表示用NEW中的符合变量替换表达式S中的OLD的符合变量。例:已知f(t)=sin(t)/t,试通过反褶、移位、尺度变换由f(t)的波形得到f(-2t+3)的波形。symst;f=sym('sin(t)/t');%定义符号函数f(t)=sin(t)/tf1=subs(f,t,t+3);%对f进行移位f2=subs(f1,t,2*t);%对f1进行尺度变换f3=subs(f2,t,-t);%对f2进行反褶subplot(2,2,1);ezplot(f,[-8,8]);gridon;%ezplot是符号函数绘图命令subplot(2,2,2);ezplot(f1,[-8,8]);gridon;subplot(2,2,3);ezplot(f2,[-8,8]);gridon;subplot(2,2,4);ezplot(f3,[-8,8]);gridon;注:也可用一条指令:subs(f,t,-2*t+3)实现f(t)到f(-2t+3)3.离散信号的产生(1)单位抽样序列000,0,1)(nnnnnn先定义delta函数,并保存。function[x,n]=delta(n0,n1,n2)n=[n1:1:n2];x=[(n-n0)==0];end然后执行下面程序。(以δ(n-3)为例)[x,n]=delta(5,-1,10)stem(n,x);(2)单位阶跃序列000,0,1)(nnnnnn先定义step_seq函数,并保存。function[x,n]=step_seq(n0,n1,n2)n=[n1:n2];x=[(n-n0)=0];然后执行下面程序。以()3(n为例)[x,n]=step_seq(3,-1,10);stem(n,x)(3)矩形序列000,0,1)(nnnnnn先定义aaa函数,并保存。function[x,n]=aaa(N,n1,n2)n=[n1:n2];x=[(Nn)&(n=0)];然后执行下面程序。(以R3为例)[x,n]=aaa(3,-1,10);stem(n,x)-2024681000.10.20.30.40.50.60.70.80.91(4)单位斜坡序列先定义ramp函数,并保存。function[x,n]=ramp(n1,n2)n=[n1:n2];x=n;然后执行下面程序。[x,n]=ramp(0,10);stem(n,x)(5)正弦序列例:/4)n5sin(0.5)(xnn=-pi:0.1:pi;x=5*sin(0.5*pi*n+pi/4);stem(n,x)(6)指数序列例:x(n)=5exp(-0.5n)n=-1:0.1:1;x=5*exp(-0.5*n);stem(n,x)(7)任意序列例:x=[1,5,-4,2,5,-1,5];x=[1,5,-4,2,5,-1,5];n=1:length(x);stem(n,x)4、离散信号的运算对于离散序列来说,序列相加、相乘是将两序列对应时间序号的值逐项相加或相乘,平移、反折、及倒相变换与连续信号的定义完全相同,这里就不再累述。但需要注意,与连续信号不同的是,在MATLAB中,离散序列的时域运算和变换不能用符号运算来实现,而必须用向量表示的方法,即在MATLAB中离散序列的相加、相乘需表示成两个向量的相加、相乘,因而参加运算的两序列向量必须具有相同的维数。下面是实现离散序列相加、相乘的实用子程序及实例。例:二序列相加、乘x1=[1,5,-4,2,5,-1,5];x2=[1,2,3,4,5,6,7];n=1:length(x);subplot(2,2,1);stem(n,x1);subplot(2,2,2);stem(n,x2);subplot(2,2,3);stem(n,x1+x2);subplot(2,2,4);stem(n,x1.*x2);四、小结1、m文件的命名规则:规则一:文件名首字符不能是数字或下划线。规则二:文件名不能与Matlab的内部函数名相同。规则三:M文件名中不能有空格。2、当前工作路径的含义:当前工作路径是matlab当前文件读取和存储的默认路径,建立一个.m文件或者其他格式文件都默认放在这个目录或者说路径里。3、用户程序的编写规则:(1)变量:和其它高级语言一样,MATLAB也使用变量来保存信息。变量名由英文字母开头,一般只能由英文字母、数字以及下划线“_”组成。(2)在表示连续信号时,选用plot函数。(3)表示离散序列时用stem函数。(4)如果要在一个绘图窗口中显示多个图形,可用subplot函数实现。