数字信号处理实验教案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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