(2)考虑差分方程𝑦[𝑛] − 𝑎𝑦[𝑛 − 1] = 𝑥[𝑛],其中|𝑎| < 1。取𝑎 = 0.2,编程求 解该方程所描述系统的频率响应,并: (a)画出系统的幅频和相频特性曲线; (b)求解系统的单位脉冲响应并绘制出图形。 注意是用python来给出代码,还有就是为代码标注上详细的注释,注意图的标题是中文
时间: 2024-02-13 13:00:42 浏览: 104
根据差分方程 $y[n] - a y[n-1] = x[n]$,得到其频率响应为 $H(z) = \frac{1}{1-az^{-1}}$,其中 $z=e^{j\omega}$。因此,系统的幅频特性为 $|H(j\omega)| = \frac{1}{\sqrt{1+a^2-2a\cos\omega}}$,相频特性为 $\angle H(j\omega) = -\arctan\frac{a\sin\omega}{1-a\cos\omega}$。而单位脉冲响应 $h[n]$ 满足 $h[0] = 1, h[n] - a h[n-1] = \delta[n]$,其中 $\delta[n]$ 为单位脉冲序列。
以下是实现该系统频率响应和单位脉冲响应的Python代码,并附有详细注释和中文标题:
```python
import numpy as np
import matplotlib.pyplot as plt
a = 0.2 # 取a=0.2
# 绘制幅频特性曲线
w = np.linspace(0, np.pi, 1000)
H = 1 / np.sqrt(1 + a**2 - 2*a*np.cos(w))
plt.plot(w, H)
plt.title('系统幅频特性')
plt.xlabel('频率')
plt.ylabel('幅度')
plt.show()
# 绘制相频特性曲线
phi = -np.arctan2(a*np.sin(w), 1-a*np.cos(w))
plt.plot(w, phi)
plt.title('系统相频特性')
plt.xlabel('频率')
plt.ylabel('相位')
plt.show()
# 求解单位脉冲响应
N = 100 # 取N=100
h = np.zeros(N)
h[0] = 1
for n in range(1, N):
h[n] = a * h[n-1]
# 绘制单位脉冲响应
plt.stem(h)
plt.title('系统单位脉冲响应')
plt.xlabel('时间')
plt.ylabel('振幅')
plt.show()
```
其中,`np.linspace(0, np.pi, 1000)`这一行生成了从0到π的1000个频率点,用于绘制幅频特性和相频特性曲线。而求解单位脉冲响应的代码则使用了for循环来逐个计算每个$h[n]$的值。而绘制幅频特性、相频特性和单位脉冲响应的代码分别使用了`plt.plot()`和`plt.stem()`函数。
阅读全文