南昌大学信号与系统MATLAB软件实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信号与系统软件实验报告
班级:
姓名:
学号:
指导教师:
一.实验要求:绘出门函数()(2)(2)f t t t εε=+--的波形
二.实验原理:在MATLAB 中,有一个专门用于表示单位阶跃信号的函数,即stepfun()函数,它是用数值计算法表示的单位阶跃函数()t ε。
其调用格式为:stepfun(t,t0),其中,t 是以向量形式表示的变量,t0表示信号发生突变的时刻,在t0以前,函数值小于零,t0以后函数值大于零。
有趣的是它同时还可以表示单位阶跃序列()k ε,这只要将自变量以及取样间隔设定为整数即可。
有关单位阶跃序列()k ε的表示方法,我们后面有专门论述,下面通过一个例子来说明如何调用stepfun()函数来表示单位阶跃函数。
三.Matlab 程序
t=-4:0.01:4;%定义时间样本向量t1=-2;%指定信号发生突变的时刻u1=stepfun(t,t1);%产生左移位的阶跃信号(t+2)t2=2;%指定信号发生突变的时刻u2=stepfun(t,t2);%产生右移位的阶跃信号(t-2)g=u1-u2;%表示门函数plot(t,g)%绘制门函数的波形axis([-4,4,-0.5,1.5])
%设定坐标轴范围-4<x<4,-0.5<y<1.5
四.实验结果
一.实验要求:若某连续系统的输入为e (t ),输出为r (t ),系统的微分方程为:
''()5'()6()3'()2()
y t y t y t f t f t ++=+①求该系统的单位冲激响应h (t )及其单位阶跃响应g (t )。
②若2()()t f t e t ε-=求出系统的零状态响应y(t )
二.实验原理:对于连续的LTI 系统,当系统输入为f (t ),输出为y (t ),则输入与输出之间满足如下的线性常系数微分方程:()
()00()()n m
i j i j i j a y t b f t ===∑∑,当系统输入为单位冲激信号δ(t )时产生的零状态响应称为系统的单位冲激响应,用h(t)表示。
若输入为单位阶跃信号ε(t )时,系统产生的零状态响应则称为系统的单位阶跃响应,记为g(t),如下图所示。
系统的单位冲激响应h (t )包含了系统的固有特性,它是由系统本身的结构及参数所决定的,与系统的输入无关。
我们只要知道了系统的冲激响应,即可求得系统在不同激励下产生的响应。
因此,求解系统的冲激响应h(t )对我们进行连续系统的分析具有非常重要的意义。
在MATLAB 中有专门用于求解连续系统冲激响应和阶跃响应,并绘制其时域波形的函数impulse()和step()。
如果系统输入为f (t ),冲激响应为h(t),系统的零状态响应为y (t ),则有:()()()y t h t f t =*。
若已知系统的输入信号及初始状态,我们便可以用微分方程的经典时域求解方法,求出系统的响应。
但是对于高阶系统,手工计算这一问题的过程非常困难和繁琐。
在MATLAB 中,应用lsim()函数很容易就能对上述微分方程所描述的系统的响应进行仿真,求出系统在任意激励信号作用下的响应。
lsim()函数不仅能够求出连续系统在指定的任意时间范围内系统响应的数值解,而且还能同时绘制出系统响应的时域波形图。
以上各函数的调用格式如下:
⑴impulse()函数
函数impulse()将绘制出由向量a 和b 所表示的连续系统在指定时间范围内的单位冲激响应h (t )的时域波形图,并能求出指定时间范围内冲激响应的数值解。
impulse(b,a)以默认方式绘出由向量a 和b 所定义的连续系统的冲激响应的时域波形。
impulse(b,a ,t0)绘出由向量a 和b 所定义的连续系统在0~t0时间范围内冲激响应的时域波形。
impulse(b,a,t1:p:t2)绘出由向量a 和b 所定义的连续系统在t1~t2时间范围内,并且以时间间隔p 均匀取样的冲激响应的时域波形。
y=impulse(b,a,t1:p:t2)只求出由向量a和b所定义的连续系统在t1~t2时间范围内,并且以时间间隔p均匀取样的冲激响应的数值解,但不绘出其相应波形。
⑵step()函数
函数step()将绘制出由向量a和b所表示的连续系统的阶跃响应,在指定的时间范围内的波形图,并且求出数值解。
和impulse()函数一样,step()也有如下四种调用格式:
step(b,a)
step(b,a,t0)
step(b,a,t1:p:t2)
y=step(b,a,t1:p:t2)
上述调用格式的功能和impulse()函数完全相同,所不同只是所绘制(求解)的是系统的阶跃响应g(t),而不是冲激响应h(t)。
⑶lsim()函数
根据系统有无初始状态,lsim()函数有如下两种调用格式:
①系统无初态时,调用lsim()函数可求出系统的零状态响应,其格式如下:
lsim(b,a,x,t)绘出由向量a和b所定义的连续系统在输入为x和t所定义的信号时,系统零状态响应的时域仿真波形,且时间范围与输入信号相同。
其中x和t是表示输入信号的行向量,t为表示输入信号时间范围的向量,x则是输入信号对应于向量t所定义的时间点上的取样值。
y=lsim(b,a,x,t)与前面的impulse和step函数类似,该调用格式并不绘制出系统的零状态响应曲线,而只是求出与向量t定义的时间范围相一致的系统零状态响应的数值解。
②系统有初始状态时,调用lsim()函数可求出系统的全响应,格式如下:
lsim(A,B,C,D,e,t,X0)绘出由系数矩阵A,B,C,D所定义的连续时间系统在输入为e和t所定义的信号时,系统输出函数的全响应的时域仿真波形。
t为表示输入信号时间范围的向量,e则是输入信号e(t)对应于向量t所定义的时间点上的取样值,X0表示系统状态变量X=[x1,x2,…..xn]'在t=0时刻的初值。
[Y,X]=lsim(A,B,C,D,e,t,X0)不绘出全响应波形,而只是求出与向量t定义的时间范围相一致的系统输出向量Y的全响应以及状态变量X的数值解。
显然,函数lsim()对系统响应进行仿真的效果取决于向量t的时间间隔的密集程度,t的取样时间间隔越小则响应曲线越光滑,仿真效果也越好。
三.Matlab程序:
(1)a=[156];b=[32];
subplot(2,1,1),impulse(b,a,4)
subplot(2,1,2),step(b,a,4)
(2)a=[156];b=[32];
p1=0.01;%定义取样时间间隔为0.01
t1=0:p1:5;%定义时间范围
x1=exp(-2*t1);%定义输入信号
lsim(b,a,x1,t1),%对取样间隔为0.01时系统响应进行仿真
hold on;%保持图形窗口以便能在同一窗口中绘制多条曲线
p2=0.5;%定义取样间隔为0.5
t2=0:p2:5;%定义时间范围
x2=exp(-2*t2);%定义输入信号
lsim(b,a,x2,t2),hold off%对取样间隔为0.5时系统响应进行仿真并解除保持四.实验结果
(1)(2)
实验3
一.实验要求
用数值计算法实现门函数()(1)(1)f t t t εε=+--的傅里叶变换,并画出幅度频谱图.
二.实验原理
对于连续时间信号f(t),其傅里叶变换为:
()F j ω0()lim ()j t j n n f t e dt f n e ωωττττ
∞∞---∞→=-∞
==∑⎰其中τ为取样间隔,如果f(t)是时限信号,或者当|t|大于某个给定值时,f(t)的值已经衰减得很厉害,可以近似地看成是时限信号,则上式中的n 取值就是有限的,假定为N ,有:()
F j ω10()N j n n f n e ωτττ--==∑若对频率变量ω进行取样,得:
()()k F k F j ω=10()0k N j n n f n e k M
ωτ
ττ--==<<∑通常取:02k k k M M ωπωτ==,其中0ω是要取的频率范围,或信号的频带宽度。
采用MATLAB 实现上式时,其要点是要生成f(t)的N 个样本值()f n τ的向量,以及向量k j n e ωτ-,两向量的内积(即两矩阵的乘积),结果即完成上式的傅里叶变换的数值计算。
三.Matlab 程序
R=0.02;%取样间隔τ=0.02t=-2:R:2;%t 为从-2到2,间隔为0.02的行向量,有201个样本点
ft=[zeros(1,50),ones(1,101),zeros(1,50)];%产生f(t)的样值矩阵(即f(t)的样
本值组成的行向量)
W1=10*pi;%取要计算的频率范围M=500;k=0:M;w=k*W1/M;%频域采样数为M,w 为频率正半轴的采样点
Fw=ft*exp(-j*t'*w)*R;%求傅氏变换F(jw)FRw=abs(Fw);%取振幅W=[-fliplr(w),w(2:501)];%由信号双边频谱的偶对称性,利用fliplr(w)形成负半轴的点,%w(2:501)为正半轴的点,
函数fliplr(w)对矩阵w 行向量作180度反转
FW=[fliplr(FRw),FRw(2:501)];%形成对应于2M+1个频率点的值Subplot(2,1,1);plot(t,ft);grid;%画出原时间函数f(t)的波形,并加网格xlabel('t');ylabel('f(t)');%坐标轴标注title('f(t)=u(t+1)-u(t-1)');%文本标注
subplot(2,1,2);plot(W,FW);grid on;%画出振幅频谱的波形,并加网格
xlabel('W');ylabel('F(W)');%坐标轴标注
title('f(t)的振幅频谱图');%文本标注
四.实验结果
实验4
一.实验要求设某离散系统的系统函数为:
541()341z H z z z +=-+,利用roots 函数求出系统的零极
点,并画出系统的零极点图,判断系统是否稳定。
二.实验原理
假设系统函数H(Z)=B(Z)/A(Z).
则系统函数的零极点可以用求根命令roots()实现其调用格式为p=roots(A)A 为待求根的多项式的系数行向量。
例A=5x^2+2x-7则命令为A=[52-7]p=roots(A)结果为p=-1.40001.000.其中如果有的项没有应该用0补起。
如B=3x^3+6x B=[3060].
利用roots 命令求出零极点后就可以运用PLOT 画图。
再画的时候同时应该画出在Z 平面的单位圆来
三.Matlab 程序
function [p,q]=sjdt(A,B)p=roots(A);q=roots(B);p=p';q=q';x=max(abs([p q]));x=x+0.1;y=x;clf hold on;axis([-x x -y y]);axis('square')plot([-x x],[00])plot([00],[-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,'实轴');
A=[3-40001];B=[11];sjdt(A,B);
四.实验结果
实验5:
一.实验要求:线性连续系统的系统函数为
11
)(+=ωωj j H ,输入信号为周期矩形波如图1所示,用MATLAB 分析系统的输入频谱、输出频谱以及系统的时域响应。
二.实验原理:
1、确定周期信号f(t)的频谱n F 。
基波频率Ω。
2、确定系统函数)(Ωjn H 。
3
、计算输出信号的频谱n
n F jn H Y )(Ω=4、系统的时域响应∑∞-∞=Ω=
n t
jn n e Y t y )(MATLAB 计算为y=Y_n*exp(j*w0*n'*t);
三.实验步骤:
1、在一幅图中画输入信号f(t)和输入信号幅度频谱|F(j ω)|。
用两个子图画出。
2、画出系统函数的幅度频谱|H(j ω)|。
3、在一幅图中画输出信号y(t)和输出信号幅度频谱|Y(j ω)|。
用两个子图画出。
四.实验计算
分析计算:
输入信号的频谱为
(n)
输入信号最小周期为
=2,脉冲宽度,基波频率Ω=2π/=π,
所以
(n)
系统函数为
因此
输出信号的频谱为
系统响应为
Matlab程序:
t=linspace(-3,3,300);
tau_T=1/4;%
n0=-20;n1=20;
n=n0:n1;%计算谐波次数20
F_n=tau_T*Sa(tau_T*pi*n);
f=2*(rectpuls(t+1.75,0.5)+rectpuls(t-0.25,0.5)+rectpuls(t-2.25,0.5));
figure(1),subplot(2,1,1),line(t,f,'linewidth',2);%输入信号的波形axis([-3,3,-0.1,2.1]);grid on
xlabel('Time(sec)','fontsize',8),title('输入信号','fontweight','bold')%设定字体大小,文本字符的粗细
text(-0.4,0.8,'f(t)')
subplot(2,1,2),stem(n,abs(F_n),'.');%输入信号的幅度频谱
xlabel('n','fontsize',8),title('输入信号的幅度频谱','fontweight','bold')
text(-4.0,0.2,'|Fn|')
H_n=1./(i*n*pi+1);
figure(2),stem(n,abs(H_n),'.');%系统函数的幅度频谱xlabel('n','fontsize',8),title('系统函数的幅度频谱','fontweight','bold')
text(-2.5,0.5,'|Hn|')
Y_n=H_n.*F_n;
y=Y_n*exp(i*pi*n'*t);
figure(3),subplot(2,1,1),line(t,y,'linewidth',2);%输出信号的波形axis([-3,3,0,0.5]);grid on
xlabel('Time(sec)','fontsize',8),title('输出信号','fontweight','bold')
text(-0.4,0.3,'y(t)')
subplot(2,1,2),stem(n,abs(Y_n),'.');%输出信号的幅度频谱
xlabel('n','fontsize',8),title('输出信号的幅度频谱','fontweight','bold')text(-4.0,0.2,'|Yn|')
实验结果:
-3-2-10
123
0.5
1
1.5
2
Time(sec)输入信号
n 输入信号的幅度频谱
-20-15-10-50
5101520
n 系统函数的幅度频谱
-3-2-10
123
00.1
0.2
0.3
0.4
Time(sec)输出信号
n 输出信号的幅度频谱
实验6
一.实验要求线性连续系统的系统函数为
11)(+=s s H ,输入信号为周期矩形波如图2所示,用
二.实验原理
1、确定第一个周期拉氏变换)(0s F 。
2、确定前6个周期的拉氏变换)(s F 。
3、计算输出信号的拉氏变换)
()()(s F s H s Y =4、系统的时域响应)
()(s Y t y ⇔MATLAB 计算为y=ilaplace(Y);
5、系统的稳态响应和稳态值,即经过4个周期后,系统响应趋于稳态,两个稳态值可取为
t=8s 和t=8.5s
三.实验步骤
1、画出输入信号f(t)波形。
2、画出系统输出信号y(t)的波形。
3、画出系统稳态响应yss(t)的波形,4个周期后。
并计算出稳态值。
四.Matlab 程序
syms s;H=1/(s+1);
F0=1/s*(1-exp(-0.5*s));%输入信号第一个周期的laplace 变换
F=F0+F0*exp(-2*s)+F0*exp(-4*s)+F0*exp(-6*s);
Y=H.*F;
Y0=H.*F0;
y=ilaplace(Y);
y=simple(y);
t=linspace(0,12,300);
f=2*(rectpuls(t-0.25,0.5)+rectpuls(t-2.25,0.5)+rectpuls(t-4.25,0.5)+rectpuls(t-6.25,0.5)); yn=subs(y);%符号替换
figure(1),plot(t,f,'linewidth',2);
axis([0,7,-0.2,2.2]),xlabel('Time(sec)','fontsize',8),title('输入信号','fontweight','bold') text(3.0,1.0,'f(t)')
figure(2),plot(t,yn,'linewidth',2);
axis([0,7,-0.1,0.5]),xlabel('Time(sec)','fontsize',8),title('输出信号','fontweight','bold') text(3.0,0.3,'y(t)')
figure(3),plot(t,yn,'linewidth',2);
axis([8,12,-0.1,0.5]),xlabel('Time(sec)','fontsize',8),title('输出信号稳态响应','fontweight','bold')
text(10.0,0.2,'ys(t)')
t=8:0.5:8.5;%取t=8s和t=8.5两个稳态值
ys=subs(y,t,'t');
disp('输入为周期信号的响应的第一个周期');
y0=ilaplace(Y0);
pretty(y0);%符号输出类似数值形式
disp('输出稳态周期信号的两个值');
ys
五.实验结果
0123
4567
0.5
11.5
2
Time(sec)输入信号
0123
4567
-0.10
0.1
0.2
0.3
0.4
Time(sec)输出信号
88.599.510
10.51111.512
-0.10
0.1
0.20.3
0.4
Time(sec)输出信号稳态响应
命令窗口显示:
输入为周期信号的响应的第一个周期
heaviside(t -1/2)(exp(1/2-t)-1)-exp(-t)+1输出稳态周期信号的两个值
ys =
0.10150.0616。