使用matlab完成已知一个二阶线性常系数差分方程用下式表示: y(n)+a1y(n-1)+a2y(n-2)= b0x(n)+b1x(n-1)+b2x(n-2), 要求: (1)参数a1、a2、b0、b1、b2由运行时输入; (2)求出该系统的单位冲激响应;
时间: 2023-12-24 21:04:29 浏览: 102
好的,我可以帮你解决这个问题。
首先,我们可以将该二阶线性常系数差分方程表示为矩阵形式:
$$\begin{bmatrix}y(n)\\y(n-1)\end{bmatrix}=\begin{bmatrix}-a_1 & -a_2\\1 & 0\end{bmatrix}\begin{bmatrix}y(n-1)\\y(n-2)\end{bmatrix}+\begin{bmatrix}b_0\\b_1\end{bmatrix}x(n)+\begin{bmatrix}0\\b_2\end{bmatrix}x(n-1)$$
令 $H(z)$ 为该系统的传递函数,则有:
$$H(z)=\frac{Y(z)}{X(z)}=\frac{b_0+b_1z^{-1}+b_2z^{-2}}{1+a_1z^{-1}+a_2z^{-2}}$$
为了求出该系统的单位冲激响应,我们需要计算出 $h(n)$,即单位冲激响应的离散时间序列。
根据离散时间序列的卷积性质,我们知道:
$$h(n)*x(n)=y(n)$$
当 $x(n)=\delta(n)$ 时,$y(n)$ 就是 $h(n)$,即:
$$h(n)*\delta(n)=h(n)$$
因此,我们只需要将 $\delta(n)$ 代入原方程,然后通过逆变换得到离散时间序列 $h(n)$。
下面,我们就来写一个 MATLAB 代码,实现该过程:
```matlab
% 输入参数
a1 = input('a1 = ');
a2 = input('a2 = ');
b0 = input('b0 = ');
b1 = input('b1 = ');
b2 = input('b2 = ');
% 系统传递函数
syms z
H = (b0+b1*z^-1+b2*z^-2)/(1+a1*z^-1+a2*z^-2);
% 单位冲激响应
h = iztrans(H);
% 离散时间序列
n = 0:20;
h_n = subs(h, 'n', n);
% 绘图
stem(n, h_n);
xlabel('n');
ylabel('h(n)');
title('Impulse Response');
```
运行代码后,你可以输入 $a_1$、$a_2$、$b_0$、$b_1$、$b_2$ 的值,然后 MATLAB 就会输出该系统的单位冲激响应,并绘制出离散时间序列的图像。
阅读全文