差分方程及求解MATLAB实现

一、 实验目的

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

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

\sum_{k=0}^{N} a_{k} y(n-k)=\sum_{m=0}^{M} b_{m} x(n-m)
如果 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)=\sum_{m=0}^{M} b_{m} x(n-m)-\sum_{k=1}^{N} a_{k} y(n-k)
方程的解能以下面形式求得: y(n) = yH (n) + yp (n) 分别为方程的齐次解跟特解部分。已知输入和差分方程的稀疏, 可用filter 对差分方程进行数值求解。最简单形式为:

 y=\text { filter }(b, a, x) \mathrm{b}=[\mathrm{b} 0, \mathrm{~b} 1, \cdots, \mathrm{bM}] ; \mathrm{a}=[\mathrm{a} 0, \mathrm{a} 1, \cdots \mathrm{a} M]
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.写出实验程序.记录实验数据并与理论计算作比较,总结结果。

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timerring

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值