差分方程及求解MATLAB实现

2022-07-20 14:22:01 浏览数 (1)

一、 实验目的

1.学习并掌握系统的差分方程表示方法以及差分方程的相关概念。 2.熟练使用filter函数对差分方程进行数值求解。 3.掌握差分方程的求解及MATLAB实现方法。

二、实验原理及方法 1.一LTI系统可以用一个线性常系数差分方程表示:

如果 aN   ≠ 0 ,那么这个差分方程就是N阶的,已知系统的输入序列,用这个方程可以根据当 前输入x(n)和以前M点的输入x(n-m),…,x(n-1),以及以前N点的输出y(n-N),…,y(n-1)来计算当前输出y(n)。在实际中这个方程在时间上是从n = −∞ 到 n = ∞ 朝前计算的,因此该方程的另一种形式是:

方程的解能以下面形式求得: y(n) = yH (n) yp (n) 分别为方程的齐次解跟特解部分。已知输入和差分方程的稀疏, 可用filter 对差分方程进行数值求解。最简单形式为:

2. 上面差分方程解的形式为齐次解和特解,另外还可以求零输入解和零状态解理论计算中 要用到z变换,请好好掌握z变换的内容。用MATLAB实现时,若已知初始条件,则应用y =  filter(b, a, x, xic) 来求完全响应。这里xic是初始状态输入数组。MATLAB还提供一种filtic函数来得到xic。xic =filtic(b, a,Y , X ) 其中b和a是滤波器系数数组,Y和X是分别从y(n)和x(n)的初始条件得来的初始状态数组。 三.实验内容 1、已知下面差分方程: y(n)-y(n-1) 0.9y(n-2)=x(n);任意n 要求a.计算并画出在n=-20,…,100的脉冲响应h(n);        b.计算并画出在n=-20,…,100的单位阶跃相应s(n). 2.解以下差分方程:

 要求先用理论计算,再用MATLAB编程实现,并对比两个结果。参考流程图: 实验内容 1.

 实验内容2.

四、实验报告要求 1.总结差分方程的性质及应用. 2.写出实验程序.记录实验数据并与理论计算作比较,总结结果。

代码语言:javascript复制
4.1-a:
b=1;
a=[1,-1,0.9];
h=[zeros(1,20),1,zeros(1,100)];
y=filter(b,a,h);
n=-20:100;
stem(n,y);
xlabel('n');
ylabel('h(n)')
4.1-b:
b=1;
a=[1,-1,0.9];
u=[zeros(1,20),ones(1,101)];
y=filter(b,a,u);
n=-20:100;
stem(n,y);
xlabel('n');
ylabel('s(n)')
4.2
b=[1];
a=[1,-3/2,1/2];
n1=-10:-1;
n2=0:10;
x=[zeros(size(n1)),(1/4).^n2];
y=[zeros(size(n1)-[0,2]),10,4,zeros(size(n2))];
xic=filtic(b,a,y,x);
y=filter(b,a,x,xic);
subplot(2,1,1)
stem([n1,n2],x);
xlabel('n');
ylabel('x(n)');
grid;
subplot(2,1,2);
stem([n1,n2],y);
xlabel('n');
ylabel('y(n)');
grid

0 人点赞