线性移不变系统的响应。 线性移不变系统的差分方程为 y(n)+0.1y(n-1)-0.06y(n-2)=x(n)-2x(n-1) 分别利用 filter 函数和 conv 编程求解。 1、系统对输入信号x(n)=R8(n)响应,并画出x(n)和y(n)的波形。 2、求解系统的单位脉冲响应和单位阶跃响应,并画出波形。
时间: 2023-12-03 16:46:46 浏览: 108
首先,我们可以将差分方程转换为系统函数的形式:
H(z) = (1 - 2z^-1) / (1 + 0.1z^-1 - 0.06z^-2)
然后,我们可以用 filter 函数和 conv 函数求解系统的响应。
使用 filter 函数:
```python
import numpy as np
import matplotlib.pyplot as plt
b = [1, -2]
a = [1, 0.1, -0.06]
n = np.arange(0, 20)
x = np.zeros(20)
x[8] = 1
y = np.zeros(20)
y[0], y[1] = 0, 0
for i in range(2, 20):
y[i] = -a[1]*y[i-1] - a[2]*y[i-2] + b[0]*x[i] + b[1]*x[i-1]
plt.stem(n, x, label='x(n)')
plt.stem(n, y, label='y(n)')
plt.legend()
plt.show()
```
使用 conv 函数:
```python
import numpy as np
import matplotlib.pyplot as plt
b = [1, -2]
a = [1, 0.1, -0.06]
n = np.arange(0, 20)
x = np.zeros(20)
x[8] = 1
h = np.zeros(20)
h[0], h[1] = 1, -0.1
for i in range(2, 20):
h[i] = 0.06*h[i-2] - 0.1*h[i-1]
y = np.convolve(x, h)
plt.stem(n, x, label='x(n)')
plt.stem(n, y[:20], label='y(n)')
plt.legend()
plt.show()
```
两种方法得到的结果应该是一致的。
接下来我们求解单位脉冲响应和单位阶跃响应。
单位脉冲响应:
```python
import numpy as np
import matplotlib.pyplot as plt
b = [1, -2]
a = [1, 0.1, -0.06]
h = np.zeros(20)
h[0], h[1] = 1, -0.1
for i in range(2, 20):
h[i] = 0.06*h[i-2] - 0.1*h[i-1]
plt.stem(np.arange(0, 20), h)
plt.title('Impulse Response')
plt.show()
```
单位阶跃响应:
```python
import numpy as np
import matplotlib.pyplot as plt
b = [1, -2]
a = [1, 0.1, -0.06]
h = np.zeros(20)
h[0], h[1] = 1, -0.1
for i in range(2, 20):
h[i] = 0.06*h[i-2] - 0.1*h[i-1]
s = np.cumsum(h)
plt.stem(np.arange(0, 20), s)
plt.title('Step Response')
plt.show()
```
阅读全文