设计一个滤波器,中心频率1MHz,带宽200KHz,低频截止频率0.9MHz,高频截止频率1.1MHz,绘制出幅频响应和相频响应
时间: 2024-06-13 07:08:22 浏览: 202
根据提供的引用内容,设计一个滤波器需要进行频率域处理。根据题目要求,中心频率为1MHz,带宽为200KHz,低频截止频率为0.9MHz,高频截止频率为1.1MHz。可以使用巴特沃斯滤波器进行设计。
以下是设计滤波器的步骤:
1. 计算滤波器的阶数,可以使用巴特沃斯滤波器公式进行计算:
$$
N = \frac{\log(\frac{1}{\sqrt{Rp}\cdot\sqrt{Rs}})}{2\cdot\log(\frac{\omega_p}{\omega_s})}
$$
其中,$Rp$为通带最大衰减量,$Rs$为阻带最小衰减量,$\omega_p$为通带截止频率,$\omega_s$为阻带截止频率。根据题目要求,通带最大衰减量为3dB,阻带最小衰减量为40dB,通带截止频率为1.1MHz,阻带截止频率为0.9MHz。代入公式计算得到阶数$N=4$。
2. 计算滤波器的系数,可以使用巴特沃斯滤波器公式进行计算:
$$
H(s) = \frac{1}{1+(\frac{s}{\omega_c})^{2N}}
$$
其中,$\omega_c$为截止频率。根据题目要求,截止频率为1MHz。代入公式计算得到滤波器系数。
3. 绘制幅频响应和相频响应,可以使用Python中的scipy库进行绘制。以下是Python代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# 滤波器参数
fs = 10e6 # 采样率
f0 = 1e6 # 中心频率
bw = 200e3 # 带宽
f1 = 0.9e6 # 低频截止频率
f2 = 1.1e6 # 高频截止频率
N = 4 # 阶数
# 计算滤波器系数
b, a = signal.butter(N, [f1/(fs/2), f2/(fs/2)], 'bandpass')
# 绘制幅频响应
w, h = signal.freqz(b, a)
fig, ax1 = plt.subplots()
ax1.set_title('Butterworth Bandpass Filter')
ax1.plot((fs * 0.5 / np.pi) * w, abs(h), 'b')
ax1.set_ylabel('Amplitude', color='b')
ax1.set_xlabel('Frequency [Hz]')
ax1.grid()
ax2 = ax1.twinx()
angles = np.unwrap(np.angle(h))
ax2.plot((fs * 0.5 / np.pi) * w, angles, 'g')
ax2.set_ylabel('Angle (radians)', color='g')
ax2.grid()
plt.show()
# 绘制相频响应
fig, ax = plt.subplots()
ax.set_title('Butterworth Bandpass Filter Phase Response')
ax.plot((fs * 0.5 / np.pi) * w, angles)
ax.set_ylabel('Angle (radians)')
ax.set_xlabel('Frequency [Hz]')
ax.grid()
plt.show()
```
运行以上代码,可以得到滤波器的幅频响应和相频响应的图像。
阅读全文