《信号与系统实验指导书.doc》由会员分享,可在线阅读,更多相关《信号与系统实验指导书.doc(37页珍藏版)》请在三一文库上搜索。
1、实验报告要求:(1)简述实验目的和实验原理。(2)按照实验步骤上的实验过程,把重要的程序和实验结果都记录下来。(3)总结实验中的主要结论。(4)回答思考题。(5)实验心得体会。实验一 信号与系统的基本概念一 实验目的:1.学习信号与系统在Matlab软件的基本使用方法;2.了解Matlab的数值计算,符号运算。二 实验原理和内容: 在MATLAB中通常用两种方法来表示信号,一种是向量来表示信号,另一种则是用符号运算的方法来表示信号。(一)向量表示法 MATLAB的信号处理工具箱有大量的函数可用于产生信号,这些函数中大部分都要求样间隔的时间值矢量t,是用命令 t=0:0.005:1;这个矢量包含
2、每秒200个时间抽样点,或者说抽样频率为200Hz。要产生离散时间信号的时间值矢量k,例如,从k0到k1000,使用命令 k=0 :1000 ;给定了t或k,就可以开始产生需要的信号。 在MATLAB中,可以精确地表示离散时间信号,因为信号的值对应于矢量的各元素。但是,MATLAB对连续时间信号只能提供近似表示,由各元素分别代表连续时间信号抽样值的一个矢量来近似。当使用这种近似时,应该选择足够小的抽样间隔 ,以保证那些样本值能反映信号的全部细节。 t=0:0.1:30; f=exp(-.1*t).*sin(2/3*t); plot(t,f); grid ylabel(f(t) xlabel(T
3、ime(sec) axis(0 30 -1 1); 在这段程序中,绘制 的曲线时,时间坐标值作为元素保存在矢量中。表达式exp(-.1*t)和sin(2/3*t)分别产生一个矢量,各矢量中的元素等于对应不同时间点处表达式的值。由这两个表达式生成的两个矢量的对应元素相乘得到矢量 ,然后用plot命令绘出该信号的时域波形。plot命令可以将点与点间用直线连接,当点与点间的距离很小时,绘出的图形就成了光滑的曲线,如图。 图1(二) 符号运算的表示法 如前说述,MATLAB可以有两种方法来表示连续时间信号。用这两种方法均可实现连续信号的时域运算和变换,但用符号运算的方法则较为简便。下面分别介绍各种运算
4、、变换的符号运算的MATLAB实现方法。 1. 相加 s=symadd(f1,f2)或s=f1+f2 ezplot(s) 上面是用MATLAB的符号运算命令来表示两连续信号的相加,然后用ezplot命令绘制出其结果波形图。其中f1,f2是两个用符号表达式表示的连续信号,s为相加得到的和信号的符号表达式。 2. 相乘 w=symmul(f1,f2)或w=f1*f2 ezplot(w)上面是用MATLAB的符号运算命令来表示两连续信号的相乘,然后用ezplot命令绘制出其结果波形图。其中f1,f2是两个用符号表达式表示的连续信号,w为相乘得到的积信号表达式。 3. 时移 y=subs(f,t,t-
5、t0); ezplot(y) 上面的命令是实现连续时间信号的平移及其结果的可视化,其中f是用符号表达式表示的连续时间信号,t是符号变量,subs命令则将连续时间信号中的时间变量t用t-t0替换。 4.反褶 y=subs(f,t,-t); ezplot(y) 上面的命令是实现连续时间信号的反褶及其结果的可视化,其中f是用符号表达式表示的连续时间信号,t是符号变量。 5.尺度变换 y=subs(f,t,a*t); ezplot(y) 上面的命令是实现连续时间信号的尺度变换及其结果的可视化,其中f是用符号表达式表示的连续时间信号,t是符号变量。解:程序如下: syms t f=sym(t/2+1)*
6、(heaviside(t+2)-heaviside(t-2) subplot(2,3,1),ezplot(f,-3,3) title(f(t) y1=subs(f,t,t+2) subplot(2,3,2),ezplot(y1,-5,1) title(f(t+2) y2=subs(f,t,t-2) subplot(2,3,3),ezplot(y2,-1,5) title(f(t-2) y3=subs(f,t,-t) subplot(2,3,4),ezplot(y3,-3,3) title(f(-t) y4=subs(f,t,2*t) subplot(2,3,5),ezplot(y4,-2,2)
7、 title(f(2t) 命令执行后得到f,y1,y2,y3,y4的符号表达式如下: f = (t/2+1)*(heaviside(t+2)-heaviside(t-2) y1 = (1/2*t+2)*(heaviside(t+4)-heaviside(t) y2 = 1/2*t*(heaviside(t)-heaviside(t-4) y3 = (-1/2*t+1)*(heaviside(-t+2)-heaviside(-t-2) y4 = (t+1)*(heaviside(2*t+2)-heaviside(2*t-2) 信号的时域变换波形如图2所示。 图2三 思考题:1、说明产生一个mat
8、lab行向量的两种方法,其中行向量从0开始,并在pi结束,共有13个等间隔点。2、假定行向量x=3 6 9,y=5 3 0,下列matlab运算的结果是什么?A x+y b, x.*y c, x.y d, x./y 实验二 连续时间信号与系统的时域分析一 实验目的:1. 由系统方程进行时域分析。 2. 由卷积积分法进行时域分析。 3. 进行简单的连续时间系统的仿真设计。二 实验原理和内容:(一) 阶跃信号例1. 用MATLAB绘出单位阶跃信号的波形。解: (1)一种得到单位阶跃信号的方法是在MATLAB的Symbolic Math Toolbox 中调用单位阶跃函数Heaviside, 这样可
9、方便的表示出单位阶跃信号。但是,在用函数ezplot实现其可视化时,就出现一个问题:函数ezplot只能画出既存在于Symbolic Math 工具箱中,又存在于总MATLAB工具箱中的函数,而Heaviside函数仅存在于Symbolic Math Toolbox中,因此就需要在自己的工作目录work下创建Heaviside的M文件,该文件如下: function f=Heaviside(t) f=(t0) t0时f为1,否则为0正确定义出该函数并保存运行后,就可以调用该函数了,如先定义向量: t=1 :0.01 :3然后调用Heaviside函数表示出该信号并绘出波形 f=heavisid
10、e(t) plot(t,f) axis(-1,3,-0.2,1.2)得到波形如图1所示。 图1 (2)另一种表示单位阶跃信号的方法是用向量f和t分别表示信号的样值和对应时刻值。零时刻以前,信号样值为零,从零时刻起,信号样值为1,定义出这样的两个向量后,就可用plot命令绘出波形图了。t0时刻以前信号为零,在t0处有一跃变,以后为1 function jieyue(t1,t2,t0); t=t1:0.01:-t0; tt=-t0:0,01:t2; n=length(t); nn=length(tt); u=zeros(1,n); uu=ones(1,nn); plot(tt,uu) hold o
11、n plot(t,u) plot(-t0,-t0,0,1 hold off title(单位阶跃信号) axis(t1,t2,-0.2,1.5) jieyue(-2,5,0)程序执行后绘出波形如图2所示: 图2(二) 连续时间信号卷积 图3解:首先自编通用函数sconv()实现连续时间信号的卷积,该程序在计算出卷积积分的数值近似的同时,还绘出f(t)的时域波形图。需要注意的是程序中如何构造f(t)的对应时间向量k。另外,程序在绘制f(t)波形图时采用的是plot命令而不是stem命令。 functionf,k=sconv(f1,f2,k1,k2,p) 计算连续信号卷积积分f(t)=f1(t)*
12、f2(t) f: 卷积积分f(t)对应的非零样值向量 k: f(t)的对应时间向量 f1: f1(t)非零样值向量 f2: f2(t)非零样值向量 k1: f1(t)的对应时间向量 k2: f2(t)的对应时间向量 p: 取样时间间隔 f=conv(f1,f2); 计算序列f1和f2的卷积和f f=f*p; k0=k1(1)+k2(1); 计算序列f非零样值的起点位置 k3=length(f1)+length(f2)-2 计算卷积和f非零样值的宽度 k=k0:p:k3*p 确定卷积和f非零样值的时间向量 subplot(2,2,1) plot(k1,f1) 在子图1绘出f1(t)的时域波形图
13、title(f1(t) xlabel(t) ylabel(f1(t) subplot(2,2,2) plot(k2,f2) 在子图2绘出f2(t)的时域波形图 title(f2(t) xlabel(t) ylabel(f2(t) subplot(2,2,3) plot(k,f) 画卷积f(t)的时域波形图 h=get(gca,position) h(3)=2.5*h(3) set(gca,position,h) 将第三个子图的横坐标范围扩为原来的2.5倍 title(f(t)=f1(t)*f2(t) xlabel(t) ylabel(f(t) 下面调用函数sconv()来计算f(t)=f1(t
14、)*f2(t),首先设定抽样时间间隔p,并对连续时间信号f1(t)和f2(t)非零值区间以时间间隔p进行抽样,产生离散时间序列f1和f2,然后构造离散时间序列f1和f2所对应的时间向量k1和k2,最后再调用sconv函数求出f1(t)*f2(t)的数值近似,并绘出其时域波形图,如图4所示。 实现上述过程的MATLAB命令如下: p=0.01; k1=0:p:2; f1=0.5*k1; k2=k1; f2=f1; f,k=sconv(f1,f2,k1,k2,p) 图4(三) 连续时间系统响应 如果系统的输入信号及初始状态已知,便可用微分方程的经典时域求解方法求出系统的响应。但对于高阶系统,手工计
15、算这一问题的过程将会非常困难和繁琐。而MATLAB中的函数lsim()能对微分方程描述的LTI连续时间系统的响应进行仿真。该函数能绘制连续时间系统在指定的任意时间范围内系统响应的时域波形图,还能求出连续时间系统在指定的任意时间范围内系统响应的数值解,函数lsim()的调用格式如下: lsim(b,a,x,t) 在该调用格式中,a和b是由描述系统的微分方程系统决定的表示该系统的两个行向量。x和t则是表示输入信号的行向量,其中t为表示输入信号时间范围的向量,x则是输入信号在向量t定义的时间点上的取样值。该调用格式将绘出向量b和a所定义的连续系统在输入为向量x和t所定义的信号时,系统的零状态响应的时
16、域仿真波形,且时间范围与输入信号相同。例3. 描述某连续时间系统的微分方程为 解:MATLAB命令如下: a=1 2 1; b=1 2; p=0.5; 定义取样时间间隔 t=0:p:5; 定义时间范围 x=exp(-2*t); 定义输入信号 lsim(b,a,x,t); 对系统输出信号进行仿真 hold on p=0.3; t=0:p:5; x=exp(-2*t); lsim(b,a,x,t); p=0.01; t=0:p:5; x=exp(-2*t); lsim(b,a,x,t); hold off 系统零状态响应的仿真波形图如图4所示: 图5 显然,函数lsim()对系统响应进行仿真的效果
17、取决于向量t的时间间隔的密集程度。图5绘出了上述系统在不同取样时间间隔时函数lsim仿真的情况,可见抽样时间间隔越小则仿真效果越好。三 思考题:1. 区分自然响应、受迫响应、零输入响应和零状态响应的概念。 2. 系统输入与系统单位冲激响应的卷积积分求得的响应是系统的全响应吗? 3. 区分系统的起始条件(起始状态)与初始条件(初始状态)。解决边界问题的方法有哪些? 实验三 连续时间信号与系统的频域分析一 实验目的:1 掌握周期信号的频谱;2 理解非周期信号的傅立叶变换;3 掌握连续时间信号频率响应的求解4 了解幅度调制的基本原理二 实验原理和内容:(一) 周期信号振幅谱例1. 试用MATLAB绘
18、出如图1所示周期矩形脉冲信号的振幅频谱。 图1解:MATLAB程序如下: echo off a=-5; b=5; n=50; j=sqrt(-1);积分精度 tol=1e-6; 设置脉冲波形周期 T0b-a; 定义脉冲波波形 xsqual=(x)1/2.*(x=-1/2)+(x-1&x1/2)+1/2.*(x=-1/2); 计算直流分量 out(1)=1/T0.*quad(xsqual,a,b,tol); 积分计算基波和各次谐波分量 xfun=(x,k,T)xsqual(x).*exp(-j*2*pi*x*k/T); for i=1:n out(i+1)=1/T0.*quad(xfun,a,b
19、,tol,i,T0); end out1=out(n+1:-1:2); out1=conj(out1),out; absout=abs(out1); n1=-n:n; stem(n1(n+1:2*n+1),absout(n+1:2*n+1); titile(幅度谱); (二) 非周期信号的傅立叶变换 MATLAB的Symbolic Math Toolbox 提供了能直接求解傅立叶变换及与变换的函数fourier()与ifourier()。在调用fourier()与ifourier()之前,要用syms命令对所用到的变量进行说明,即要将这些变量说明成符号变量。对fourier()中的函数f及if
20、ourier()的函数F,也要用符号定义符syms将f和F说明为符号表达式。若f或F是MATLAB中的通用函数表达式,则不必用sym加以说明。解:MATLAB命令为: syms t x=exp(-2*abs(t)) F=fourier(x) subplot(211); ezplot(t); subplot(212); ezplot(F); f(t)的幅度频谱图如图3所示: 图3(三) 傅立叶变换对称性质 解:MATLAB程序如下: syms t r=0.01; j=sqrt(-1); t=-15:r:15; f=sin(t)/t; f1=pi*(Heaviside(t+1)-Heaviside
21、(t-1); N=500; w=k*w/n; F=r*sinc(t/pi)*exp(-j*t*w); F1=r*f1*exp(-j*t*w); subplot(221);plot(t,f); xlabel(t); ylabel(f(t); subplot(222); plot(w,F); axis(-2 2 -1 4); xlabel(w); ylabel(F(w); subplot(223); plot(t,f1); axis(-2 2 -1 4); xlabel(t); ylabel(f1(t); subplot(224); plot(w,F1); axis(-20 20 -3 7); x
22、label(w); ylabel(F1(w)); 图4 (四) 连续时间系统频率响应 函数可以求出系统频率响应的数值解,并可绘出系统的幅频及相频响应曲线。例4. 已知一RLC二阶低通滤波器,其电路图如图5所示,该电路的频率响应为freqs函数绘出该频率响应。 图5 其中 MATLAB程序如下: b=0 0 1; a=0.08 0.4 1; h,w=freqs(b,a,100); h1=abs(h); h2=angle(h); subplot(211); plot(w,h1); grid xlabel(角频率(W)); ylabel(幅度); title(H(jw)的幅频特性); subplot
23、(212); plot(w,h2*180/pi); grid xlabel(角频率(W)); ylabel(相位(度)); title(H(jw)的相频特性); 图6 (五) 连续时间信号幅度调制 MATLAB提供了专门的函数modulate()用于实现信号的调制。调用格式为: y=modulate(x,Fc,Fs,method); y,t=modulate(x,Fc,Fs) 其中,x为被调信号,Fc为载波频率,Fs为信号x的抽样频率,method为所采用的调制方式,本书所介绍的调制方法为抑制载波方式,即已调信号的频谱中不包含载波的频率分量,则method为am。其执行的算法为: y=x*co
24、s(2*pi*Fc*t) 其中y为已调制信号,t为函数计算时间间隔量。下例说明了如何调用modulate()来实现信号的调制。解:MATLAB程序如下: Fs=1000; 被调信号x的采样频率 Fc=400; 载波信号的载波频率 N100; FFT的长度 n=0:N-2; t=n/Fs; x=sin(2*pi*50*t); 被调信号 subplot(221); plot(t,x); xlabel(t(s); ylabel(x); title(被调信号); axis(0 0.1 -1 1); Nfft=1024; window=hamming(512); noverlap=256; dflag=
25、none; Pxx,f=psd(x,Nfft,Fs,window,noverlap,dflag); 求被调信号x功率谱 subplot(222); plot(f,Pxx); xlabel(f(Hz); ylabel(功率谱(X)); title(被调信号的功率谱); grid y=modulate(x,Fc,Fs,am); 已调信号 subplot(223); plot(t,y); xlabel(t(s); ylabel(y); axis(0 0.1 -1 1); title(已调信号); Pxx,f=psd(y,1024,Fs,window,noverlap,dflag); 求已调信号的功率
26、谱 subplot(224); plot(f,Pxx); xlabel(f(Hz); ylabel(已调信号的功率谱); grid 已调信号和被调信号的频谱如图7所示。 图7 由图可见,y(t)的功率谱处在频域的频率f=400Hz为中心的两侧,偏移值为50Hz的双边带。显然,上述结果与理论分析结果完全一致。本例的主要目的是观察被调信号f(t)及已调信号y(t)的谱线在频域上的位置变化关系,验证调制定理。三 思考题:1 什么是幅度调制?2 周期信号和非周期信号的频谱特性?3 如何求系统的频率响应?实验四 连续时间信号与系统的复频域分析一 实验目的:1 了解系统函数的零极点分布图的概念2 掌握系统
27、冲击响应的求解3 学会绘制频率响应曲线二 实验原理和内容:(一) 系统函数零极点分布图 系统函数的零点和极点位置可以用MATLAB的多项式求根函数roots( )来求得。用roots( )函数求得系统函数H(s)的零极点后,就可以用plot命令在复平面上绘制出系统函数的零极点图。例1、已知连续时间系统的系统函数如下所示,试用MATLAB绘出系统的零极点分布图,并判断系统是否稳定。 解: MATLAB程序如下: A=1 7 17 17 6; B=1 0 -4; p=roots(A); q=roots(B); p=p; q=q; x=max(abs(p q); x=x+0.1; y=x; clf
28、hold on axis(-x x -y y); axis(square) plot(-x x,0 0) plot(0 0,-y y) plot(real(p),imag(p),x) plot(real(q),imag(q),o) title(连续时间系统的零极点图) text(0.2,x-0.2,虚轴) text(y-0.2,0.2,实轴)上述命令绘制的系统零极点图如图1所示: 由图可以看出,该系统的极点-1(二重),-2,-3均落在s的左半平面,故该系统是稳定的。(二) 系统冲激响应解: MATLAB程序如下: a=1 3 2 0; b=1 4; r,p,k=residue(b,a) im
29、pulse(b,a) 运行结果为: r = 1 -3 2 p = -2 -1 0 k = 可见,系统函数有三个实极点,可以根据程序运行结果直接写出系统的冲激响应为: 由时域波形可以看出,当时间t趋于无穷大时,并不趋于零而是趋于一个有限值,故该系统是临界稳定。另一方面,由于系统有极点位于s平面的原点处,这也可以判断该系统是临界稳定的。(三) 矢量作图法绘制系统频率响应曲线 用MATLAB实现已知系统零极点分布,求系统频率响应,并绘制其幅频响应曲线的程序流程如下: (1)定义包含系统所有零点和极点位置的行向量q和p。 (2)定义绘制系统频率响应曲线的频率范围向量f1和f2,频率抽样间隔k,并产生频
30、率等分点向量f。 (3)求出系统所有零点和极点到这些等分点的距离。 解:(1)根据系统零极点分析的几何矢量分析法的原理绘制幅频响应曲线,其MATLAB程序如下: q=0 0; p=-100 -200; p=p; q=q; f=0:0.1:1000; w=f*(2*pi); y=i*w; n=length(p); m=length(q); if n=0 yq=ones(m,1)*y; vq=yq-q*ones(1,length(w); bj=abs(vq); ai=1; elseif m=0 yp=ones(n,1)*y; vp=yp-p*ones(1,length(w); aj=abs(vp)
31、; bj=1; else yp=ones(n,1)*y; yq=ones(m,1)*y; vp=yp-p*ones(1,length(w); vq=yq-q*ones(1,length(w); ai=abs(vp); bj=abs(vq); end Hw=prod(bj,1)./prod(ai,1); plot(f,Hw); title(连续时间系统幅频响应曲线) xlabel(频率w(单位:赫兹)) ylabel(F(jw) 上述命令绘制的系统幅频响应曲线如图3所示。 (2)其MATLAB程序如下: q=0 0; p=-500 -1000; p=p; q=q; f=0:0.1:1000; w
32、=f*(2*pi); y=i*w; n=length(p); m=length(q); if n=0 yq=ones(m,1)*y; vq=yq-q*ones(1,length(w); bj=abs(vq); ai=1; elseif m=0 yp=ones(n,1)*y; vp=yp-p*ones(1,length(w); aj=abs(vp); bj=1; else yp=ones(n,1)*y; yq=ones(m,1)*y; vp=yp-p*ones(1,length(w); vq=yq-q*ones(1,length(w); ai=abs(vp); bj=abs(vq); end H
33、w=prod(bj,1)./prod(ai,1); plot(f,Hw); title(连续时间系统幅频响应曲线) xlabel(频率w(单位:赫兹)) ylabel(F(jw) 上述命令绘制的系统幅频响应曲线如图4所示。 (3)其MATLAB程序如下: q=0 0; p=-2000 -4000; p=p; q=q; f=0:0.1:1000; w=f*(2*pi); y=i*w; n=length(p); m=length(q); if n=0 yq=ones(m,1)*y; vq=yq-q*ones(1,length(w); bj=abs(vq); ai=1; elseif m=0 yp=
34、ones(n,1)*y; vp=yp-p*ones(1,length(w); aj=abs(vp); bj=1; else yp=ones(n,1)*y; yq=ones(m,1)*y; vp=yp-p*ones(1,length(w); vq=yq-q*ones(1,length(w); ai=abs(vp); bj=abs(vq); end Hw=prod(bj,1)./prod(ai,1); plot(f,Hw); title(连续时间系统幅频响应曲线) xlabel(频率w(单位:赫兹)) ylabel(F(jw) 上述命令绘制的系统幅频响应曲线如图5所示。三 思考题:1 零极点分布与
35、系统稳定性的关系?2 如何求解系统的冲击响应?3 如何利用matlab绘制系统的频率响应曲线?实验五 离散时间信号与系统的时域分析一 实验目的:1 掌握离散时间信号的基本概念2 了解抽样定理的基本概念3 理解卷积和的概念4 学会利用差分方程求系统的响应二 实验原理和内容:(一) 离散时间正弦序列解:由MATLAB产生的信号实际上是离散的。可以使用命令stem(n,x)作出离散序列x(n)各离散时间点n的取值。 A=2;N=12;pha=pi/6; omega=2*pi/12; n=10:10; x=A*sin(omega*n+pha); stem(n,x); ylabel(x(n);xlabel(Time index n); title(离散时间正弦序列); 连续时间正弦信号如图1(a)所示,离散时间正弦序列如图1(b)所示。 图1(a) 图1(b) 若要表示具有特定采样频率的信号,需定义时间轴向量。例如: 用MATLAB实现如下: 离散信号波形 f1=50
链接地址:https://www.31doc.com/p-5018181.html