信号系统课程设计.docx
- 文档编号:27008259
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:29
- 大小:356.19KB
信号系统课程设计.docx
《信号系统课程设计.docx》由会员分享,可在线阅读,更多相关《信号系统课程设计.docx(29页珍藏版)》请在冰豆网上搜索。
信号系统课程设计
1引言
MATLAB是一个功能强大的数学软件,它不但可以解决数学中的数值计算问题,还可以解决符号演算问题,并且能够方便地绘出各种函数图形。
MATLAB自1984年由美国的MathWorks公司推向市场,现已成为国际最优秀的科技应用软件之一。
1.1MATLAB软件功能简介
MATLAB的名称源自MatrixLaboratory,1984年由美国Mathworks公司推向市场。
它是一种科学计算软件,专门以矩阵的形式处理数据。
MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛的应用于科学计算、控制系统和信息处理等领域的分析、仿真和设计工作。
MATLAB软件包括五大通用功能,数值计算功能(Nemeric)、符号运算功能(Symbolic)、数据可视化功能(Graphic)、数字图形文字统一处理功能(Notebook)和建模仿真可视化功能(Simulink)。
其中,符号运算功能的实现是通过请求MAPLE内核计算并将结果返回到MATLAB命令窗口。
该软件有三大特点,一是功能强大;二是界面友善、语言自然;三是开放性强。
目前,Mathworks公司已推出30多个应用工具箱。
MATLAB在线性代数、矩阵分析、数值及优化、数值统计和随机信号分析、电路与系统、系统动力学、次那好和图像处理、控制理论分析和系统设计、过程控制、建模和仿真、通信系统以及财政金融等众多领域的理论研究和工程设计中得到了广泛应用。
1.2MATLAB与信号与系统关系
MATLAB在信号与系统中的应用主要包括符号运算和数值计算仿真分析。
由于信号与系统课程的许多内容都是基于公式演算,而MATLAB借助符号数学工具箱提供的符号运算功能,能基本满足信号与系统课程的需求。
例如解微分方程、傅里叶正反变换、拉普拉斯正反变换和z正反变换等。
MATLAB在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲击响应与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析和零极点图绘制等内容。
数值计算仿真分析可以帮助学生更深入地理解理论知识,并为将来使用MATLAB进行信号处理领域的各种分析和实际应用打下基础。
随着近代科学技术的发展,特别是大规模集成电路的出现,数字计算机的广泛应用,信息高速公路的建设,使信号与系统日益复杂,也促进了信号与系统理论研究的发展。
在系统理论的研究中,包括系统分析与系统综合两个方面。
系统分析与信号分析被看成是一个整体。
从信号传输的观点来看,信号通过系统后,由于系统的职能作用而使信号的时间特性及频率特性发生变化,从而产生新的信号。
从系统响应的观点来看,系统在信号的激励下,将必然作出相应的反应,从而完成系统的职能作用。
因此,系统分析的任务,归根到底是:
在给定系统的条件下,求得输入激励所产生的输出响应。
系统综合则是在给定输入的条件下,为了获得预期的输出去实现系统的构成。
而信号与系统研究的是信号,信号一般是随时间而变化的某些物理量。
按照自变量的取值是否连续,信号分为连续时间信号和离散时间信号,一般f(t)和f(k)来表示。
若对信号进行时域分析,就需要绘制其波形,如果信号比较复杂,则手工绘制波形就变得很困难,且难以精确。
MATLAB强大的图形处理功能及符号运算功能,为实现信号的可视化及其时域分析提供了强有力的工具。
2基于MATLAB时域信号仿真分析
时域法是直接分析时间变量的函数,研究系统的时域特性。
对于输入-输出描述的数学模型,可求解常系数线性微分方程或差分方程;对于状态变量描述的数学模型,则需求解矩阵微分方程。
在线性系统时域分析方法中,卷积方法非常重要,不管是在连续系统中的卷积还是在离散系统中的卷积和,都为分析线性系统提供了简单而有效的方法,运用MATLAB进行时域信号的分析,包括系统零状态响应时域仿真波形图,系统冲激响应和阶跃响应时域波形图和连续时间信号卷积图形。
2.1系统零状态响应仿真设计
2.1.1设计原理
对于零状态响应,MATLAB控制系统工具箱提供了对LTI系统的零状态响应进行数值仿真的函数lsim,该函数可求解零初始条件下微分方程的数值解,语句格式为:
y=lsim(sys,f,t),其中 :
t表示计算系统响应的时间抽样点向量;f是系统的输入信号向量;sys表示LTI系统模型,用来表示微分方程、差分方程或者状态方程。
在求微分方程时,sys是由MATLAB的tf函数根据微分方程系数生成的系统函数对象,其语句格式为:
sys=tf(b,a),其中,b和a分别为微分方程右端和左端的系数向量。
例如,对于微分方程
可用
;
;
获得其LTI模型。
注意,如果微分方程的左端或右端表达式中有缺项,则其向量a或者b中对应的元素应为0,不能省略不写,否则会出错。
2.1.2设计内容及运行结果
如已知系统的微分方程和激励信号
如下,试用MATLAB命令绘出系统零状态响应的时域仿真波形图。
。
思路:
建立关于单位阶跃函数的源文件,即创建名为uCT的M文件:
functionf=uCT(t)
f=(t>0);
保存后,就可调用该函数。
利用函数式y=lsim(sys,f,t)求LTI系统的零状态响应。
按要求编写如下程序代码:
clear;clc;
ts=0;te=5;dt=0.01;
sys=tf([1,3],[1,4,4]);
t=ts:
dt:
te;
f=exp(-t).*uCT(t);
y=lsim(sys,f,t);
plot(t,y),gridon
xlabel(`Time(sec)`),ylabel(`y(t)`)
title(`零状态响应`);
将程序代码写入MATLAB工作区运行可得零状态响应时域波形图如下图2-1:
图2-1零状态响应
总结:
根据系统有无初始状态,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的取样时间间隔越小则响应曲线越光滑,仿真效果也越好。
2.2系统冲击响应和阶跃响应仿真设计
2.2.1设计原理
对于连续的LTI系统,当系统输入为f(t),输出为y(t),则输入与输出之间满足如下的线性常系数微分方程:
(2.1)
当系统输入为单位冲激信号δ(t)时产生的零状态响应称为系统的单位冲激响应,用h(t)表示。
若输入为单位阶跃信号ε(t)时,系统产生的零状态响应则称为系统的单位阶跃响应,记为g(t)。
系统的单位冲激响应h(t)包含了系统的固有特性,它是由系统本身的结构及参数所决定的,与系统的输入无关。
我们只要知道了系统的冲激响应,即可求得系统在不同激励下产生的响应。
因此,求解系统的冲激响应h(t)对我们进行连续系统的分析具有非常重要的意义。
在MATLAB中,对于连续LTI系统的冲激响应和阶跃响应的数值解,可分别用控制系统工具箱提供的函数impulse和step来求解。
其语句格式分别为:
y=impulse(sys,t);
y=step(sys,t);
t表示计算机系统响应的时间抽样点向量,sys表示LTI系统模型。
其中在调用impulse()函数时,我们需要用向量来对连续系统进行分析。
设描述连续系统的微分方程为:
(2.2)
则我们可用向量den和num来表示该系统,即:
den=[aN,aN-1,…,a1,a0],num=[bM,bM-1,…,b1,b0]。
注意,向量den和num的元素一定要以微分方程中时间求导的降幂次序来排列,且缺项要用0来补齐。
例如,对微分方程
,则表示该系统的对应向量应为den=[1,3,2],num=[1,0,1]。
函数impulse()将绘出由向量den和num表示的连续系统在指定时间范围内的冲激响应h(t)的时域波形图,并能求出指定时间范围内冲激响应的数值解。
impulse()函数有如下几种调用格式:
(1)impulse(num,den):
该调用格式以默认方式绘出向量den和num定义的连续系统的冲激响应的时域波形。
(2)impulse(num,den,t):
绘出系统在0-t时间范围内冲激响应的时域波形。
(3)impulse(num,den,t1:
dt:
t2):
绘出在t1-t2时间范围内,且以时间间隔dt均匀取样的冲激响应波形。
2.2.2设计内容及运行结果
若已知系统的微分方程
,则MATLAB命令可得系统冲激响应和阶跃响应的数值解和系统冲激响应和阶跃响应的时域波形图。
则可在命令窗口编写如下程序代码:
clear;clc;
t=0:
0.001:
4;
sys=tf([1],[1,3,2]);
h=impulse(sys,t);
g=step(sys,t);
subplot(211)
plot(t,h),gridon
xlabel(`Time(sec)`),ylabel(`h(t)`)
title(`冲激响应`)
subplot(212)
plot(t,g),gridon
xlabel(`Time(sec)`),ylabel(`g(t)`)
title(`阶跃响应`)
将程序代码写入MATLAB工作区运行可得冲激响应和阶跃响应时域波形图如下图2-3:
总结:
(1)函数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()将绘制出由向量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)。
图2-2冲激响应和阶跃响应
2.3连续时间信号卷积仿真
2.3.1设计原理
卷积积分是信号与系统时域分析的重要方法之一。
定义为:
信号的卷积运算在系统分析中主要用于求解系统的零状态响应。
一般情况,卷积积分的运算比较困难,但在MATLAB中则变得十分简单,MATLAB中是利用conv函数来实现卷积的。
功能:
实现两个函数
和
的卷积。
格式:
g=conv(f1,f2)
说明:
f1=f1(t),f2=f2(t) 表示两个函数,g=g(t)表示两个函数的卷积结果。
Matlab进行卷积计算可通过符号运算方法和数值计算方法实现。
Matlab符号运算法求连续信号卷积从卷积定义出发,可以利用Matlab符号运算法求卷积积分,但要注意积分变量和积分限的选取。
2.3.2设计内容及运行结果
若已知x(t)=u(t-1)-u(t-3),h(t)=u(t-2)-u(t-4),则y(t)=x(t)*h(t)的仿真设计如下:
首先设计出求解连续时间卷积的Matlab主程序。
T=0.01;
tx=1:
T:
3;
x=rectpuls((tx-2),2);
th=2:
T:
4;
h=rectpuls((th-3),2);
t=(1+2):
T:
(3+4);
y=conv(x,h);
figure
subplot(3,1,1);
plot(tx,x)
ylabel(`输入激励`);
subplot(3,1,2);
plot(th,h)
ylabel(`单位冲激响应`);
subplot(3,1,3);
plot(t,y)
ylabel(`输出响应`);
将程序代码写入MATLAB工作区运行可得连续时间信号卷积时域波形图如下图2-3:
总结:
信号的卷积运算在系统分析中主要用于求解系统的零状态响应。
一般情况,卷积积分的运算比较困难,但在MATLAB中则变得十分简单,MATLAB中是利用conv函数来实现卷积的。
功能:
实现两个函数
和
的卷积。
格式:
g=conv(f1,f2)
说明:
f1=f1(t),f2=f2(t) 表示两个函数,g=g(t)表示两个函数的卷积结果。
图2-3连续时间信号卷积
3基于MATLAB的频域仿真分析
频谱分析工作在许多科学技术领域都会遇到。
首先,在无线电技术的许多方面,例如通讯、地震测量、电信、导航、雷达、电子对抗、空间技术等;此外,由于象光波、机械振动、冲击、声响等各种非电量都可以通过所谓换能器转换成电流或电压的变化来方便地进行分析,所以,频谱分析在各种振动、噪声、电声、发动机、建筑、生物、医学等领域也起重要作用。
运用MATLAB进行连续时间信号频域分析,其中包括,傅里叶变换、频域特性和输出响应。
在MATLAB帮助下让频域分析大为简单。
3.1傅里叶变换仿真设计
3.1.1设计原理
傅里叶变换是信号分析的最重要的内容之一。
从已知信号
求出相应的频谱函数
的数学表示为:
(3.1)
的傅里叶变换存在的充分条件是
在无限区间内绝对可积,即
满足下式:
(3.2)
但上式并非傅里叶变换存在的必要条件。
在引入广义函数概念之后,使一些不满足绝对可积条件的函数也能进行傅里叶变换。
傅里叶反变换的定义为:
。
(3.3)
在这一部分的学习中,大家都体会到了这种数学运算的麻烦。
在MATLAB语言中有专门对信号进行正反傅里叶变换的语句,使得傅里叶变换很容易在MATLAB中实现。
在MATLAB中实现傅里叶变换的方法有两种,一种是利用MATLAB中的SymbolicMathToolbox提供的专用函数直接求解函数的傅里叶变换和傅里叶反变换,另一种是傅里叶变换的数值计算实现法。
下面分别介绍这两种实现方法的原理。
1.直接调用专用函数法
①在MATLAB中实现傅里叶变换的函数为:
F=fourier(f) 对f(t)进行傅里叶变换,其结果为F(w)
F=fourier(f,v) 对f(t)进行傅里叶变换,其结果为F(v)
F=fourier(f,u,v) 对f(u)进行傅里叶变换,其结果为F(v)
②傅里叶反变换
f=ifourier(F) 对F(w)进行傅里叶反变换,其结果为f(x)
f=ifourier(F,U) 对F(w)进行傅里叶反变换,其结果为f(u)
f=ifourier(F,v,u) 对F(v)进行傅里叶反变换,其结果为f(u)
由于MATLAB中函数类型非常丰富,要想了解函数的意义和用法,可以用mhelp命令。
如在命令窗口键入:
mhelpfourier回车,则会得到fourier的意义和用法。
注意:
(1)在调用函数fourier()及ifourier()之前,要用syms命令对所有需要用到的变量(如t,u,v,w)等进行说明,即要将这些变量说明成符号变量。
对fourier()中的f及ifourier()中的F也要用符号定义符sym将其说明为符号表达式。
(2)采用fourier()及fourier()得到的返回函数,仍然为符号表达式。
在对其作图时要用ezplot()函数,而不能用plot()函数。
(3)fourier()及fourier()函数的应用有很多局限性,如果在返回函数中含有δ(ω)等函数,则ezplot()函数也无法作出图来。
另外,在用fourier()函数对某些信号进行变换时,其返回函数如果包含一些不能直接表达的式子,则此时当然也就无法作图了。
这是fourier()函数的一个局限。
另一个局限是在很多场合,尽管原时间信号f(t)是连续的,但却不能表示成符号表达式,此时只能应用下面介绍的数值计算法来进行傅氏变换了,当然,大多数情况下,用数值计算法所求的频谱函数只是一种近似值。
3.1.2设计内容与运行结果
若已知门函数
则其幅度频谱设计MATLAB程序如下:
R=0.02; %取样间隔τ=0.02
t=-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);gridon; %画出振幅频谱的波形,并加网格
xlabel('W');ylabel('F(W)'); %坐标轴标注
title('f(t)的振幅频谱图'); %文本标注
将程序代码写入MATLAB工作区运行可得连续时间信号傅里叶变换幅度频谱图如下图3-1:
图3-1连续时间信号傅里叶变换幅度频谱
总结:
MATLAB进行傅里叶变换有两种方法,一种利用符号运算的方法计算,另一种是数值计算。
严格来说,用数值计算的方法计算连续时间信号的傅里叶变换需要有个限定条件,即信号是时限信号(Timelimitedsignal),也就是当时间|t|大于某个给定时间时其值衰减为零或接近于零,这个条件与前面提到的为什么不能用无限多个谐波分量来合成周期信号的道理是一样的。
计算机只能处理有限大小和有限数量的数。
采用数值计算算法的理论依据是:
(3.4)
若信号为时限信号,当时间间隔T取得足够小时,上式可演变为:
(3.5)
上式用MATLAB表示为:
F_w=f*exp(-j*t’*w)*dt其中F_w为信号f(t)的傅里叶变换,w为频率,dt为时间步长。
对信号进行频谱分析时,数据样本应有足够的长度,一般FFT程序中所用数据点数与原含有信号数据点数相同,这样的频谱图具有较高的质量,可减小因补零或截断而产生的影响。
注意:
时间取样间隔τ的确定,其依据是τ必须小于奈奎斯特(Nyquist)取样间隔。
如果f(t)不是严格的带限信号,则可以根据实际计算的精度要求来确定一个适当的频率w为信号的带宽。
3.2频域特性仿真设计
3.2.1设计原理
设线性时不变(LTI)系统的脉冲响应函数为h(t),该系统的输入(激励)信号为f(t),则此系统的零状态输出(响应)y(t)可以写成卷积的形式:
y(t)=f(t)*h(t)。
设f(t),h(t)和y(t)的傅里叶变换分别为F(jw),H(jw)和Y(jw),则它们之间存在关系:
Y(jw)=H(jw)F(jw),反映了系统的输入和输出在频域上的关系。
这种利用频域函数分析系统问题的方法常称为系统的频域分析法。
函数H(jw)反映了系统的频域特性,称为系统的频率响应函数(有时也称为系统函数)可定义为系统响应(零状态响应)的傅里叶变换与激励的傅里叶变换之比,即:
(3.6)
可见|H(jw)|是角频率为w的输出与输入信号幅度之比,称为幅频特性(或幅频响应);
是输出与输入信号的相位差,称为相频特性(或相频响应)。
Matlab工具箱中提供的freqs函数可直接计算系统的频率响应,其调用形式为:
H=freqs(b,a,w)。
其中b为系统频率响应函数有理多项式中分子多项式的系数向量;a为分母多项式的系数向量;w为需计算的系统频率响应的频率抽样点向量(w中至少需包含2个频率点,w的单位为rad/s)。
如果没有输出参数,直接调用freqs(b,a,w),则MATLAB会在当前绘图窗口中自动画出幅频和相频响应曲线图性。
(值得注意的是,这种方法的前提条件是系统函数的极点全部在复平面的左半开平面,因此必须先对系统函数的零极点进行分析和判断,只有满足了条件才可以如此求解。
)
另一种调用形式为:
[H,w]=freqs(b,a,N)
它表示由MATLAB自动选择一组N个频率点来计算其频率响应。
N的缺省值为200。
系统零状态响应的象函数Y(s)与激励的象函数F(s)之比称为系统传递函数,即:
(3.7)
系统传递函数只与描述系统的微分方程系数有关,即只与系统的结构、元件参
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信号系统 课程设计