数字信号||离散系统的冲激响应和阶跃响应(3)

实验三 离散系统的冲激响应和阶跃响应

一、实验目的

(1)加深对离散线性移不变(LSI)系统基本理论的理解,明确差分方程与系统函数之间的关系。

(2)初步了解用MATLAB语言进行离散时间系统研究的基本方法。

(3)掌握求解离散时间系统冲激响应和阶跃响应程序的编写方法,了解常用子函数。

二、实验涉及的MATLAB子函数

1.impz

功能:求解数字系统的冲激响应。

调用格式:

[h,t]=impz(b,a);求解数字系统的冲激响应h,取样点数为缺省值。

[h,t]=impz(b,a,n);求解数字系统的冲激响应h,取样点数由n确定。

impz(b,a);在当前窗口用stem(t,h)函数出图。

2.dstep

功能:求解数字系统的阶跃响应。

调用格式:

[h,t]=dstep(b,a);求解数字系统的阶跃响应h,取样点数为缺省值。

[h,t]=dstep(b,a,n);求解数字系统的阶跃响应h,取样点数由n确定。

dstep(b,a);在当前窗口用stairs(t,h)函数出图。

3.filter

功能:对数字系统的输入信号进行滤波处理。

调用格式:

y=filter(b,a,x);对于由矢量a、b定义的数字系统,当输入信号为x时,对x中的数据进行滤波,结果放于y中,长度取max(na,nb)。

[y,zf]=filter(b,a,x);除得到结果矢量y外,还得到x的最终状态矢量zf。

y=filter(b,a,x,zi);可在zi中指定x的初始状态。

4.filtic

功能:为filter函数选择初始条件。

调用格式:

z=filtic(b,a,y,x);求给定输入x和y时的初始状态。

z=filtic(b,a,y);求x=0,给定输入y时的初始状态。

其中,矢量x和y分别表示过去的输入和输出:

x=[x(-1),x(-2),...,x(-N)]

y=[y(-1),y(-2),...,y(-N)]

说明:以上子函数中的b和a,分别表示系统函数H(z)中由对应的分子项和分母项系数所构成的数组。如式(4-2)所示,H(z)按z-1(或z)的降幂排列。在列写b和a系数向量时,两个系数的长度必须相等,它们的同次幂系数排在同样的位置上,缺项的系数赋值为0。

在MATLAB信号处理工具箱中,许多用于多项式处理的函数,都采用以上的方法来处理分子项和分母项系数所构成的数组。在后面的实验中不再说明。

三、实验原理

1.离散LSI系统的响应与激励:由离散时间系统的时域和频域分析方法可知,一个线性移不变离散系统可以用线性常系数差分方程表示:

也可以用系统函数来表示:

系统函数H(z)反映了系统响应与激励间的关系。一旦上式中的bm和ak的数据确定了,则系统的性质也就确定了。其中特别注意:a0必须进行归一化处理,即a0=1。

对于复杂信号激励下的线性系统,可以将激励信号在时域中分解为单位脉冲序列或单位阶跃序列,把这些单元激励信号分别加于系统求其响应,然后把这些响应叠加,即可得到复杂信号加于系统的零状态响应。因此,求解系统的冲激响应和阶跃响应尤为重要。由图4-1可以看出一个离散LSI系统响应与激励的关系。

同时,图4-1显示了系统时域分析方法和z变换域分析法的关系。如果已知系统的冲激响应h(n),则对它进行z变换即可求得系统函数H(z);反之,知道了系统函数H(z),对其进行z逆变换,即可求得系统的冲激响应h(n)。

图4-1 离散LSI系统响应与激励的关系

2.用impz和dstep子函数求解离散系统的单位冲激响应和阶跃响应

在MATLAB语言中,求解系统单位冲激响应和阶跃响应的最简单的方法是使用MATLAB提供的impz和dstep子函数。

下面举例说明使用impz和dstep子函数求解系统单位冲激响应和阶跃响应的方法。

四、实验任务

(1)认真阅读实验原理部分,明确本次实验目的,复习有关离散LSI系统的理论知识。

(2)读懂实验原理并编写例题程序,理解每一条语句的意义,了解用MATLAB进行离散时间系统冲激响应和阶跃响应求解的方法、步骤,熟悉MATLAB与本实验有关的子函数。

(3)列写已调试通过的实验任务程序,打印或描绘实验程序产生的曲线图形。

例4-1已知一个因果系统的差分方程为

6y(n)+2y(n-2)=x(n)+3x(n-1)+3x(n-2)+x(n-3)

满足初始条件y(-1)=0,x(-1)=0,求系统的单位冲激响应和阶跃响应。

解:将y(n)项的系数a0进行归一化,得到

分析上式可知,这是一个3阶系统,列出其bm和ak系数:

编写MATLAB程序如下(取N=32点作图):

a=[1,0,1/3,0];

b=[1/6,1/2,1/2,1/6];

N=32;

n=0:N-1;

hn=impz(b,a,n); %求时域单位冲激响应

gn=dstep(b,a,n); %求时域单位阶跃响应

subplot(1,2,1),stem(n,hn,¢k¢);%显示冲激响应 曲线

title(¢系统的单位冲激响应¢);

ylabel(¢h(n)¢);xlabel(¢n¢);

axis([0,N,-1.1*min(hn),1.1*max(hn)]);

subplot(1,2,2),stem(n,gn,¢k¢);%显示阶跃响应 曲线

title(¢系统的单位阶跃响应¢);

ylabel(¢g(n)¢);xlabel(¢n¢);

axis([0,N,-1.1*min(gn),1.1*max(gn)]);

系统的单位冲激响应和阶跃响应如图4-2所示。

a=[1,0,1/3,0];

b=[1/6,1/2,1/2,1/6];

N=32;

n=0:N-1;

hn=impz(b,a,n);             %求时域单位冲激响应

gn=dstep(b,a,n);        %求时域单位阶跃响应

subplot(1,2,1),stem(n,hn,'k');%显示冲激响应曲线

title('系统的单位冲激响应');

ylabel('h(n)');xlabel('n');

axis([0,N,-1.1*min(hn),1.1*max(hn)]);

subplot(1,2,2),stem(n,gn,'k');%显示阶跃响应曲线

title('系统的单位阶跃响应');

ylabel('g(n)');xlabel('n');

axis([0, N, -1.1*min(gn), 1.1*max(gn)]);

例4-1系统的单位冲激响应和阶跃响应

3.用filtic和filter子函数求解离散系统的单位冲激响应

MATLAB提供了两个子函数filtic和filter来求解离散系统的响应。当输入信号为单位冲激信号时,求得的响应即为系统的单位冲激响应;当输入信号为单位阶跃信号时,求得的响应即为系统的单位阶跃响应。

例4-3 已知一个因果系统的差分方程为

6y(n)-2y(n-4)=x(n)-3x(n-2)+3x(n-4)-x(n-6)

满足初始条件y(-1)=0,x(-1)=0,求系统的单位冲激响应和单位阶跃响应。时间轴上N取32点作图。

解 将y(n)项的系数a0进行归一化,得到

分析上式可知,这是一个6阶系统,直接用MATLAB语言列出其bm和ak系数:

a=[1,0,0,0,-1/3,0,0];

b=[1/6,0,-1/2,0,1/2,0,-1/6];

注意:原公式中存在着缺项,必须在相应的位置上补零。

编写MATLAB程序如下:

x01=0;y01=0;N=32; %赋初始条件和采样点数

a=[1,0,0,0,-1/3,0,0];%输入差分方程系数

b=[1/6,0,-1/2,0,1/2,0,-1/6];

xi=filtic(b,a,0);%求等效初始条件的输入序列

n=0:N-1;%建立N点的时间序列

x1=[n==0];%建立输入单位冲激信号x1(n)

hn=filter(b,a,x1,xi);%对输入单位冲激信号进行滤波,求冲激响应

x2=[n>=0];%建立输入单位阶跃信号x2(n)

gn=filter(b,a,x2,xi);%对输入单位阶跃信号进行 滤波,求阶跃响应

subplot(1,2,1),stem(n,hn);

title(¢系统单位冲激响应¢);

subplot(1,2,2),stem(n,gn);

title(¢系统单位阶跃响应¢);

x01=0;y01=0;N=32;    %赋初始条件和采样点数

a=[1,0,0,0,-1/3,0,0];%输入差分方程系数

b=[1/6,0,-1/2,0,1/2,0,-1/6];

xi=filtic(b,a,0),%求等效初始条件的输入序列

n=0:N-1,%建立N点的时间序列

x1=[n==0];%建立输入单位冲激信号x1(n)

hn=filter(b,a,x1,xi);%对输入单位冲激信号进行滤波,求冲激响应

x2=[n>=0];%建立输入单位阶跃信号x2(n)

gn=filter(b,a,x2,xi);%对输入单位阶跃信号进行                   滤波,求阶跃响应

subplot(1,2,1),stem(n,hn);

title('系统单位冲激响应');

subplot(1,2,2),stem(n,gn);

title('系统单位阶跃响应);

图4-4 用filter子函数求解例4-3系统的响应

相关推荐
2401_858286112 分钟前
101.【C语言】数据结构之二叉树的堆实现(顺序结构) 下
c语言·开发语言·数据结构·算法·
deephub3 分钟前
使用 PyTorch-BigGraph 构建和部署大规模图嵌入的完整教程
人工智能·pytorch·深度学习·图嵌入
Beau_Will8 分钟前
数据结构-树状数组专题(1)
数据结构·c++·算法
迷迭所归处12 分钟前
动态规划 —— 子数组系列-单词拆分
算法·动态规划
爱吃烤鸡翅的酸菜鱼12 分钟前
Java算法OJ(8)随机选择算法
java·数据结构·算法·排序算法
deephub35 分钟前
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
人工智能·深度学习·transformer·大语言模型·注意力机制
搏博1 小时前
神经网络问题之二:梯度爆炸(Gradient Explosion)
人工智能·深度学习·神经网络
KGback1 小时前
【论文解析】HAQ: Hardware-Aware Automated Quantization With Mixed Precision
人工智能
寻找码源1 小时前
【头歌实训:利用kmp算法求子串在主串中不重叠出现的次数】
c语言·数据结构·算法·字符串·kmp
Matlab精灵1 小时前
Matlab科研绘图:自定义内置多款配色函数
算法·matlab