数字信号处理实验教案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一 用递推法解差分方程以及用线性卷

积法求线性时不变系统的输出

一、实验目的

1. 学习用递推法求解差分方程的方法。

2. 学习用线性卷积法求网络输出的方法。

二、实验原理

一般网络或系统用线性常系数差分方程描述,如果已知差分方程和输入信号,用递推法求解差分方程或者求网络输出,最适合用计算机求解。但要注意N 阶差分方程要预先给定N 个初始条件。下面用例子说明用递推法求解差分方程的方框图。例如一个二阶差分方程如下y (n )=a 1y (n -1)+a 2y (n -2)+b 0x (n )+b 1x (n -1)式中,系数a 1、 a 2、b 0、b 1为已知系数,x (n )是输入序列。设x (n )是因果序列,x (-1)=0,从n =0 开始递推。当n =0时,y (0)=a 1y (-1)+a 2y (-2)+b 0x (0)+b 1x (-1)=a 1y (-1)+a 2y (-2)+b 0x (0)式中, y (-1)和y (-2)是两个初始条件,要预先给定。这样求解网络输出的计算框图如图1所示。

图1 用递推法求解差分方程的框图

已知h (n )和输入x (n ),求系统输出y (n ),可以用线性卷积法进行。线性卷积的公式如下:

计算时,关键问题是根据x (n )和h (n )的特点,确定求和的上下限。例如,h (n ) =0.9nu (n ),x (n )

=R 10 (n ), 卷积公式为 根据上式中的R 10 (n ),限制非零区间为: 0≤m ≤9,由u (n )限制非零区间为:m ≤n 。 由上面的不等式知道m 的取值与n 有关,可以分几种情况: 当n <0时,y (n )=0

∑∞

-∞

=-=*=m m n h m x n h n x n y )

()()()()(∑

-∞

=--=m m

n m n u m R n y )(9.0)()(10∑=-=n

m m

n n y 0

9.0)(

当0≤n <9时,

当n ≥9时,

最后得到:

三、实验用MATLAB 函数介绍

1. conv 功能:计算离散卷积、多项式相乘。

调用格式:y n=conv(hn, xn)计算向量hn 和xn 的卷积,卷积结果向量为yn 。如果用N 和M 分别表示hn 和xn 的长度,则yn 的长度为N+M-1。如果hn 和xn 表示两个多项式的系数向量,则yn 为两个多项式乘积的系数向量。

例如,程序: hn=[1, 1, 1, 1]; xn=[1, 1, 1, 1]; yn=conv(hn, xn); 运行结果为yn=[1 2 3 4 3 2 1]

2. Impz 功能:计算数字滤波器的单位脉冲响应。 调用格式:[hn, n ]=impz(B, A):计算出单位脉冲响应列向量hn ,并返回时间列向量n 。自动选择hn 的样点数。调用参数B 和A 分别为数字滤波器系统函数H(z)的分子和分母多项式系数向量。[hn, n ]=impz(B, A, N): 计算出单位脉冲响应N 个样值。如果N 是一个整数向量,则仅计算出这些整数点的单位脉冲响应样值。如果调用时无输出参数,则完成相应的计算功能,并自动调用stem(n, hn)绘图。其他调用格式用help 命令查看。

例如,本实验中,系统的差分方程y 1(n )=0.9y 1(n -1)+x (n )对应的系统函数为

计算出单位脉冲响应50个样值,并给出绘图的程序如下: B=1; A=[1, -0.9]; impz(B, A, 50); 运行结果如图2所示。

图2

四、实验内容

1. 已知系统的差分方程如下式:y 1(n )=0.9y 1(n -1)+x (n )

∑=-=9

09.0)(m m

n n y ⎪⎪⎪⎩⎪⎪⎪⎨⎧≥<≤<=∑∑=-=-90

09 9.09

0 9

.00

0)(m m n n m m

n n n n n y 1

9.011)(--=

z z

H

(1)输入信号x(n)=R10 (n),初始条件y1(-1)=1,试用递推法求解输出y1(n);

理论分析如下:

y1(0)=0.9y1(-1)+x(0)=0.9*1+1=1.9

y1(1)=0.9y1(0)+x(1)=0.9*1.9+1=2.71

y1(2)=0.9y1(1)+x(2)=0.9*2.71+1=3.439

y1(3)=0.9y1(2)+x(3)=0.9*3.439+1=4.0951

程序如下:clear

close all

x=[0,ones(1,10)];

y=zeros(1,11);

y(1)=1;

for i=1:10

y(i+1)=0.9*y(i)+x(i+1);

end

stem([-1:9],y)

title('y1(n)')

xlabel('n'),ylabel('y');

结果如图3:

图3

经过分析由以上程序实现的结果与实际理论一样。

(2)输入信号x(n)=R10 (n),初始条件y1(-1)=0,试用递推法求解输出y1(n)。

理论分析如下:

y1(0)=0.9y1(-1)+x(0)=0.9*0+1=1

y1(1)=0.9y1(0)+x(1)=0.9*1+1=1.9

y1(2)=0.9y1(1)+x(2)=0.9*1.9+1=2.71

y1(3)=0.9y1(2)+x(3)=0.9*2.71+1=3.439

相关文档
最新文档