MATLAB在信号与系统中的应用xxxxxx(学号:xxxxxxxxxxx)(物理与信息科学学院物理学专业xx级物理xx班)摘要:利用MATLAB的信号处理工具箱和图形处理及数据可视化功能对各种信号的频率、周期、振幅进行分析处理,将结论直接用图形演示出来。关键字:MATLAB、信号与线性系统分析1、引言信号与系统在电气信息,通信方面已得到了广泛的应用,何况是在科技日益发达的当今社会的人对于通信以及各种信息的需求越来越大,对其质量的要求越来越高,使得对信号的分析处理难度不断的提高,而MATLAB无疑成了最好的选择。MATLAB由美国MathWorks公司于1984年推出的数学软体。名称是由“矩阵实验﹙MATrixLABoratory)”所合成。MATLAB为各种动态系统模拟、数位讯号处理、科学计算、科学目视等领域的标准程式语言。的主要特点包括:(1)高效的数值计算及符号计算功能,使用户摆脱了繁杂的数学运算分析;(2)完备的图形处理功能,实现计算结果和编程的可视化;(3)友好的用户界面及接近数学表达式的自然化语言,易于学习和掌握,编程效率极高;(4)开放性好,能与多种平台工具软件兼容;(5)功能丰富的应用工具箱,具有广泛解决各学科专业领域内复杂问题的能力。2、MATLAB在信号与系统中的应用信号分为两类及:连续时间信号:时间变化连续。如y=x(t);和离散时间信号(序列):时间离散,如x(nT)=x(t).下列为MATLAB中的信号产生函数:2.1离散时间信号的表示比如:做出“x(-1)=-1,x(0)=1,x(1)=2,x(2)=1,x(3)=0,x(4)=-1”这个离散信号。MATLAB程序为:图1:n=-3:5;x=[0,0,-1,1,2,1,-1,0,0];stem(n,x);grid;line([-3,5],[0,0]);xlabel('n');ylabel('x[n]')图1离散信号2.2常见信号函数的MATLAB程序a.单位脉冲序列(1)程序:x=zeros(1,N);x(1,n0)=1;b.单位阶跃序列(2)程序:n=[ns:nf];x=[(n-n0)=0];c.实指数序列(3)程序:n=[ns:nf];x=a.^n;d.复指数序列(4)程序:n=[ns:nf];x=exp((sigema+jw)*n);e.正(余)弦序列(5)程序:n=[ns:nf];x=cos(w*n+sita);关于信号的相加与相乘、序列翻转与序列累加、序列移位与周期延时,就不列举了。很简单的程序。(如翻转:y(n)=x(-n)——y=fliplr(x))。两序列的卷积运算为:1212()()*()()()mynxnxnxmxnm(6)程序:y=xcorr(x1,x2)有了这些,我们就可以完成很多信号与系统的图像和系统函数了。2.3“信号与系统”中LTI系统的响应求法。a.连续LTI系统的响应()[()]()*()()()ytTxtxthtxhtd(7)用MATLAB中的卷积函数conv()来实现。b.离散LTI系统的响应()()*()()()mynxnhnxmhnm(8)00001)(nnnnnn00001)(nnnnnnunjenx)()()cos()(nnxnanx)(用MATLAB中的卷积函数conv()来实现。c.对任意输入的连续LTI系统响应函数lsim()用[y,x]=lsim(a,b,c,d,u,t)d.对任意输入的离散LTI系统响应函数dlsim()用[y,x]=dlsim(a,b,c,d,u)e.求连续LTI系统的单位冲激响应函数impulse()用[Y,T]=impulse(sys)或impulse(sys)f.求离散系统的单位冲激响应函数dimpulse()用[y,x]=dimpulse(num,den)g.求连续LTI系统的零输入响应函数initial()用[y,t,x]=initial(a,b,c,d,x0)h.求离散系统的零输入响应函数dinitial()用[y,x,n]=dinitial(a,b,c,d,x0)i.求连续系统的单位阶跃响应函数step()用[Y,T]=step(sys)j.求离散系统的单位阶跃响应函数dstep()用[y,x]=dstep(num,den)2.4a.已知某模拟滤波器的系统函数4321()2.61313.41422.61311aHsssss(9)求该模拟滤波器的频率响应。MATLAB程序如下B=1;A=[12.61313.41422.61311];W=0:0.1:2*pi*5;freqs(B,A,W)结果如图2:b.已知某滤波器的系统函数为求该滤波器的频率响应。MATLAB程序为:图2频率响应B=[10000000–1];A=1;freqz(B,A)结果如图3:8()1Hzz(10)图3频率响应以上两道连续信号题,我们清楚的看到了系统的幅频特性和相频特性,这样大家就不会被抽象的数学式子所困扰了。下面举例一道离散信号的题。c.设系统方程为:()0.8()1()ynynxn32()0.8()nxnRn(11)求该系统对信号的应。MATLAB程序为:B=1;A=[1,-0.8];N=0:31;x=0.8.^n;y=filter(B,A,x);subplot(2,1,1);stem(x)subplot(2,1,2);stem(y)结果如图4:图4d.用傅里叶变换的性质计算下面两个序列的卷积。()sin(0.4)()NxnnRn()0.9()MnhnRn(12)线性卷积xn=sin(0.4*[1:15]);hn=0.9.^(1:20);yn=conv(xn,hn);圆周卷积L=pow2(nextpow2(M+N-1));Xk=fft(xn,L);Hk=fft(hn,L);Yk=Xk.*Hk;yn=ifft(Yk,L);结果如图5:图52.5最后设计一个滤波器,信号课本P316有一个设计低通FIR数字滤波器的例子。它使用了MATLAB中信号处理工具箱函数firrcos.调用形式为b=firrcos(n,F0,df,FS),其中n为滤波器的阶数,F0为截止频率,df过渡带频宽,FS取样频率。在这,我用另一种方法来设计低通FIR数字滤波器。使用MATLAB信号处理工具箱中的频率抽样法专用函数命fir2;调用形式为B=fir2(N,F,A)。其频率响应由向量F和A指定,滤波器的系数(单位冲激响应)返回在向量B中,长度为N+1。向量F和A分别指定滤波器的采样点的频率及其幅值,F中的频率必须在0.0到1.0之间,1.0对应于采样频率的一半。它们必须按递增的顺序从0.0开始到1.0为结束。设计一个FIR低通滤波器,该滤波器的截止频率为0.5Hz,频率抽样点数为33。MATLAB源程序为:N=32;F=[0:1/32:1];A=[ones(1,16),zeros(1,N-15)];B=fir2(N,F,A);freqz(B);figure(2);stem(B,'.');line([0,35],[0,0]);xlabel('n');ylabel('h(n)');结果如图6:图63MATLAB仿真与分析3.1抽样信号的实现在信号与系统中,信号的表征是进行系统分析与设计的基础。信号的表征是写出它的数学表达式,该式是关于时间或者频率的函数。而常用的时间信号有:正弦型信号、冲激信号、阶跃信号、门信号、衰减型指数信号和抽样信号等。抽样信号的基本数学形式定义为:tttSasin(13)而在MATLAB中用与类似的函数来表示:tt)sin(Sa(t)(14)而两个函数没有本质上的区别,仅是时间尺度上不同。程序中的时间区间,6,6t仿真波形如图7所示。图7抽样信号在MATLAB中实现的程序代码如下:t=-6*pi:pi/100:6*pi;Sat=sinc(t/pi);plot(t,Sat),gridonxlabel('t'),ylabel('Sa(t)')axis([-20,20,-0.3,1.1])title('抽样信号')从图7中看出,Sa(t)为偶函数,是非周期的振荡衰减信号,当,()0tSat当t=0时,峰值Sa(t)=1,(k)=0,(k为整数),当t2后,衰减幅度减小。3.2周期方波信号傅立叶级数分解与合成在系统时域分析中,以正弦函数为基本信号,分析工程上常用的周期信号的一些基本特性以及信号在系统中的传输问题。周期信号到正弦信号的分解是利用傅里叶级数,系统的响应可看作各不同频率正弦信号产生响应的叠加。设周期信号为f(t),周期为T,角频率02T,则傅立叶级数的三角展开式为:0001()(cossin)nnnftaantbnt(15)其中,积分区间取,0,tT,n=1,2,...则各项系数为:001()TaftdtT002()cosnTaftntdtT002()sinnTbftntdtT(16)公式表明,任何满足狄利赫利条件的周期信号都可以分解成不同频率的正弦分量和余弦分量的叠加。n=0时为直流分量,n=1时为一次谐波分量,以此类推。可见,周期信号可分解成各次谐波分量的叠加,反过来,各次谐波分量的叠加可以合成周期信号。下面,用MATLAB实现周期方波的信号分解与合成,并绘出各次谐波叠加的傅立叶综合波形图。设方波周期信号如图2所示,取T1,则方波信号的傅立叶三角级数为:00004111()(sinsin3sin5sin7)357fttttt(17)所以各次谐波分量na=0,n=1,2...,1,1,221kbkk(18)分别求5、11和39次谐波的合成波形。如图8所示,MATLAB程序如下:t=-1:0.001:1;omega=2*pi;y=square(2*pi*t,50);subplot(221)plot(t,y),gridonaxis([-1,1,-1.5,1.5])xlabel('t'),title('周期方波信号')n_max=[51139];N=length(n_max);fork=1:Nn=1:2:n_max(k);b=4./(pi*n);x=b*sin(omega*n'*t);subplot(2,2,k+1);plot(t,y),holdonplot(t,x),holdoffaxis([-1,1,-1.5,1.5]),gridonxlabel('t'),title(['合成波形,最大谐波=',num2str(n_max(k))]);end图8方波信号合成仿真波形-有限项傅里叶级数叠加从图8中看出,随着傅立叶级数项的增加,合成信号与方波信号之间的误差越来越小但是在信号跳变点附近,却总是存在一个过冲,这就是典型的Gibbs现象。3.3两个余弦周期信号的相加与相乘信号的相加与相乘是指在同一时刻信号取值的相加与相乘,是信号的基本运算形式,在MATLAB中是基于向量的点运算。设已知信号,12()cos,()cos8,12fttfttfHz(19)则两个信号相加与相乘的波形如图9所示。图9两个余弦信号及相加与相乘的仿真波形图为了便于观察,增加了包络线,MATLAB程序如下:f=1;t=0:0.01:3/f;f1=cos(2*pi*f*t);f2=cos(2*pi*8*f*t);subplot(411);plot(t,f1),gridon,title('f1(t)')subplot(412);plot(t,f2),gridon,title('f2(t)')subplot(413);plot(t,f1+1,':',t,f1-1,':',t,f1+f2)gridon,title('f1(t)+f2(t)')subplot(414);plot(t,f1,':',t,-f1,':',t,f1.*f2)gridon,title('f1(t)*f2(t)')从图9