matlab在DSP中的应用(四)---离散系统的冲激响应和阶跃响应

本文详细介绍了如何使用MATLAB进行离散线性移不变系统的冲激响应和阶跃响应计算,涉及impz、dstep、filter和filtic等子函数的使用,并通过实例解析了差分方程和系统函数的关系及求解方法。
摘要由CSDN通过智能技术生成

一、实验目的

(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)]

关于该函数可参考 matlab filtic 函数应用 filter 解差分方程 dft 函数的使用。

说明:以上子函数中的b和a,分别表示系统函数H(z)中由对应的分子项和分母项系数所构成的数组。

如下面式(5-2)所示,H(z)按z-1(或z)的降幂排列。在列写b和a系数向量时,两个系数的长度必须相等,它们的同次幂系数排在同样的位置上,缺项的系数赋值为0。

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

三、实验原理

1.离散LSI系统的响应与激励

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

这里写图片描述

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

这里写图片描述

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

对于复杂信号激励下的线性系统,可以将激励信号在时域中分解为单位脉冲序列单位阶跃序列,把这些单元激励信号分别加于系统求其响应,然后把这些响应叠加,即可得到复杂信号加于系统的零状态响应。

因此,求解系统的冲激响应和阶跃响应尤为重要。由下图可以看出一个离散LSI系统响应与激励的关系。

这里写图片描述

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

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

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

例5-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进行归一化,得到:

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

则:
这里写图片描述

编写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+1);%时域单位阶跃函数
subplot(1,2,1),stem(n,hn);
title('系统单位冲激函数')
axis([0 N 1.1*min(hn) 1.1*max(hn)])

subplot(1,2,2),stem(n,gn);
title('系统单位阶跃函数')
axis([0 N 1.1*min(gn) 1.1*max(gn)])

输出结果:
这里写图片描述

需要注意的是:求时域单位阶跃函数时,需要使用的是gn=dstep(b,a,n+1),而不是gn=dstep(b,a,n),在这里前者产生32* 1的矩阵(和n一样),后者产生31* 1矩阵。

但是,如果我就是想用gn=dstep(b,a,n)呢?也可以,只要把stem(n,gn);改成stem(n(1:length(gn)),g

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值