1、实验三 信号与系统数字信号部分1实验三1. 信号的尺度变换、翻转和时移信号的尺度变换、翻转和平移运算实际上是函数自变量的运算。例1 已知某三角波脉冲信号f(t),试绘制f(2t)、f(-2t)和f(2-2t)的波形。t=-3:0.001:3;ft=tripuls(t,4,0.5);subplot(2,2,1);plot(t,ft);title(原始信号);ft1=tripuls(2*t,4,0.5); %尺度变换subplot(2,2,2);plot(t,ft1);title(尺度变换);ft2=tripuls(-2*t,4,0.5); %翻转subplot(2,2,3);plot(t,ft2
2、);title(翻转);ft3=tripuls(2-2*t,4,0.5); %时移subplot(2,2,4);plot(t,ft3);title(时移);f(t)、f(2t)、f(-2t)和f(2-2t)的波形如图1所示。图1 信号的尺度变换、翻转和时移2. 信号的微分和积分连续信号的微分可用diff函数来计算,连续信号的定积分可用quad函数或quad8函数来计算。其调用格式为:y=diff(x)/h其中x为待微分的信号,h为步长,y为信号x的微分。y=quad(function-name,a,b)其中function-name为被积函数名,a、b为积分区间的下限和上限,y为积分后信号。q
3、uad和quad8都是积分函数,只是采用的积分方法不同而已。quad 采用较低次的可塑性递回辛普森积分法则,quad8 采用可塑性递回八段Newton-Cotes积分法则,quad8不管是在精度上还是在速度上都明显高于quad。例2 如图2所示的三角波脉冲信号f(t),试利用MATLAB绘制和的波形。为了使用quad函数来计算三角波脉冲信号f(t)的积分,将f(t)编写成MATLAB的函数文件,函数名为ft_tri.m。此函数文件如下:function yt=ft_tri(t)yt=tripuls(t,4,0.5);利用diff和quad函数,并调用ft_tri.m即可计算三角波脉冲信号f(t
4、)的微分、积分。程序如下:h=0.001;t=-3:h:3;y1=diff(ft_tri(t)/h;subplot(1,2,1);plot(t(1:length(t)-1),y1);title(信号的微分);t=-3:0.1:3;for x=1:length(t) y2(x)=quad(ft_tri,-3,t(x);endsubplot(1,2,2);plot(t,y2);title(信号的积分);程序运行结果如图2所示。图2 信号的微分和积分3. 信号的差分和迭分离散序列的差分为:,用diff函数实现,其调用格式为y=diff(f)。离散序列的迭分是,与信号的相加运算不同,迭分运算把k1到k
5、2之间的所有样本加起来,在MATLAB中用sum函数实现,其调用格式为y=sum(f(k1:k2)。例3计算指数信号的能量。解:离散信号的能量定义为根据上式,计算能量的程序如下:k=0:10;fk=(-1.6).k;E=sum(abs(fk).2)E =1.9838e+0044. 系统的冲激动响应和阶跃响应若系统的微分方程或传递函数为: 对于物理上可实现的系统,。一般情况下,系数a0=1,若不为1则分子分母可以同时除以a0。由微分方程和传递函数的关系可知,传递函数和微分方程中的系数ai和bi是严格对应的,因此,两种形式给出系统函数都可以用下面的方法解决。y=ipulse(b,a) ,用于绘制向
6、量a和b定义的LTI(线性时不变)系统的冲激响应。y=step(b,a) ,用于绘制向量a和b定义的LTI(线性时不变)系统的阶跃响应。其中,a和b表示由系统微分方程中的ai和bi组成的系数向量。例4 求系统的冲激响应和阶跃响应。a=7 4 6;b=1 1;subplot(1,2,1);impulse(b,a); %冲激响应title(冲激响应);xlabel(时间);ylabel(幅值);subplot(1,2,2);step(b,a); % 阶跃响应title(阶跃响应);xlabel(时间);ylabel(幅值);系统的冲激响应和阶跃响应如图3所示。 图3 系统的冲激响应和阶跃响应5.
7、系统的零状态响应LTI连续系统以常系数微分方程描述,系统的零状态响应可通过求解初始状态为零的微分方程得到。MATLAB提供的零状态响应函数为lsim,其调用格式为:y=lsim(sys,f,t)其中,t是系统零状态响应的抽样点,f是输入信号,sys是LTI(线性时不变)系统的模型,可以是微分方程、差分方程或状态空间方程。在求解微分方程时, LTI(线性时不变)系统的模型sys要借助函数tf来获得,其调用格式为:sys=tf(b,a)其中,a、b分别对应系统函数中输出和输入的系数向量。例5已知系统。求当输入信号为时,该系统的零状态响应。sys=tf(1,1 2 77);t=1:0.01:5;f=
8、10*sin(2*pi*t);y=lsim(sys,f,t);plot(t,y);系统的零状态响应如图9-11所示。 图5 零状态响应6 离散系统的零状态响应离散系统可以用差分方程来描述:其中,、分别表示离散系统的输入和输出,n表示差分方程的阶数。已知差分方程的n个初始状态和输入,就可以利用迭代计算法来计算系统的输出。在零初始状态下,MATLAB工具箱提供了一个filter函数来计算差分方程的零状态响应,其调用格式如下:y=filter(b,a,f)其中,b、a分别是差分方程输入和输出各阶差分的系数所组成的向量,f为输入序列,y为输出序列。注意:输出序列和输入序列的长度应当相等。例6 已知某L
9、TI系统的输入输出关系为:,输入信号为,其中,是随机信号。试用MATLAB编程求解系统的零状态响应。随机信号可以由rand函数产生,假设M=5。则程序如下:R=51; %信号长度d=rand(1,R)-0.5; %产生-0.5 0.5的随机数k=0:R-1;s=2*k.*(0.9.k);f=s+d;subplot(1,2,1)stem(k,f);title(输入信号f(k);axis(0 50 0 8);M=5;b=ones(M,1)/M;a=1;y=filter(b,a,f);subplot(1,2,2)stem(k,y);title(系统响应y(k);axis(0 50 0 8);该系统的
10、零状态响应如图6所示。图6离散系统的零状态响应7离散系统的冲激响应在MATLAB中,可以用impz函数来求解系统的冲激响应,其调用格式为:h=impz(b,a,k)其中,b、a分别是差分方程输入、输出的系数向量,k表示输出序列的时间取值范围,h就是系统的单位冲激响应。例7 某离散系统的差分方程为,初始条件为y0=0,y1=1,求其冲激响应、零状态响应和完全响应。k=-10:20;a=6 -5 1;b=1;subplot(1,3,1),impz(b,a,k);title(冲激响应); %冲激响应kj=0:30;fk=cos(kj*pi/2);yf=filter(b,a,fk); %零状态响应su
11、bplot(1,3,2),stem(kj,yf);title(零状态响应); axis(0 30 -0.15 0.2); %完全响应y(1)=0;y(2)=1; %初值for m=3:length(kj); y(m)=(1/6)*(5*y(m-1)-y(m-2)+fk(m);endsubplot(1,3,3),stem(kj,y);title(完全响应);axis(0 30 -0.15 1.1);程序运行结果如图7所示。 图7 离散系统的冲激响应、零状态响应和完全响应8卷和运算卷和是计算离散系统零状态响应的强有力的工具之一,卷和函数conv的调用格式为:c=conv(a,b)其中,序列c的时间
12、起点为两个向量a、b的时间起点之和,终点为两两个向量a、b的时间终点之和,长度为a、b长度之和减1。例8已知序列xk=1,2,3,4; k=0,1,2,3,yk=1,1,1,1,1; k=0,1,2,3,4,计算xk*yk,并绘制卷和的结果。x=1 2 3 4;y=1 1 1 1 1;z=conv(x,y)k=0:7 %z的时间起点为0+0,终点为3+4stem(k,z)k =0 1 2 3 4 5 6 7z =1 3 6 10 10 9 7 4程序运行结果如图8所示:图9-14 离散信号的卷和运算结果9 信号的分解与合成周期信号按照傅里叶级数可以分解成三角函数的线性组合:其中,w为基波频率。
13、N为截断位置,当N选取较大时,信号的傅里叶级数就是原信号的较好的近似。分解和合成的程序如下:functionA_sym,B_sym=CTFShchsym; %设定函数名及参数 %Nf=6谐波的阶数;Nn 输出数据的准确位数;tao= %A_sym:第1元素是直流项,其后元素依次是1,2,3,次谐波cos项的展开系数 %B_sym:第2,3,4,元素依次是1,2,3,次谐波sin项的展开系数syms t n k x %说明为符号变量tao=1;T=5;a=0.5;if nargin4;Nf=6;end %设定默认参数的个数及默认值if nargin5;Nn=32;end %设定默认参数的个数及默
14、认值x=time_fun_x(t);A0=int(x,t,-a,T-a)/T; %求三角函数展开系数a0=A0As=int(2*x*cos(2*pi*n*t/T)/T,t,-a,T-a); %求三角函数展开系数an=AsBs=int(2*x*sin(2*pi*n*t/T)/T,t,-a,T-a); %求三角函数展开系数bn=BsA_sym(1)=double(vpa(A0,Nn); % 获取数组A0所对应的ASCII码数值数组for k=1:NfA_sym(k+1)=double(vpa(subs(As,n,k),Nn); % 获取数组A所对应的ASCII码数值数组B_sym(k+1)=dou
15、ble(vpa(subs(Bs,n,k),Nn); % 获取数组B所对应的ASCII码数值数组endif nargout=0 %没有输入参数 c=A_sym;disp(c); %disp(c)输出系数an(n=0,1,2,3,) d=B_sym;disp(d); %disp(d)函数输出系数bn(n=0,1,2,3,) t=-8*a:0.01:T-a; f1=c(1)+c(2).*cos(2*pi*1*t/5)+0.*sin(2*pi*1*t/5); %基波 f2=c(3).*cos(2*pi*2*t/5)+0.*sin(2*pi*2*t/5); %2次谐波 f3=c(4).*cos(2*pi*3*t/5)+0.*sin(2*pi*3*t/5); %3次谐
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1