python 绘制频响曲线代码
时间: 2025-06-09 17:05:03 浏览: 11
在Python中,可以使用matplotlib库以及scipy.signal模块来绘制信号的频率响应曲线。下面是一个简单的例子,展示如何计算并绘制一个线性滤波器的频响曲线:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import freqz, butter
# 设定滤波器参数
fs = 1000 # 采样率 (Hz)
cutoff = 50 # 频率截止点 (Hz)
order = 4 # 滤波器阶数
# 创建低通滤波器
b, a = butter(order, cutoff / (fs / 2), btype='low') # Butterworth滤波器设计
# 计算频率响应
w, h = freqz(b, a, worN=8000) # 这里的worN参数用于指定计算的频率点的数量
# 将频率从rad/s转换为Hz
w = w * fs / (2 * np.pi)
# 绘制幅值响应
plt.figure()
plt.plot(w, 20 * np.log10(abs(h)), 'b', label='Amplitude Response')
plt.xlabel('Frequency [Hz]')
plt.ylabel('Magnitude [dB]')
plt.title('Lowpass Filter Frequency Response')
plt.grid(True)
plt.legend()
# 如果需要,还可以绘制相位响应
plt.figure()
plt.plot(w, np.unwrap(np.angle(h))*180/np.pi, 'g', label='Phase Response (degrees)')
plt.xlabel('Frequency [Hz]')
plt.ylabel('Phase [Degrees]')
plt.title('Lowpass Filter Phase Response')
plt.legend()
plt.show()
```
在这个代码里,`freqz`函数生成了滤波器的幅值和相位响应,然后我们分别对它们进行了绘制。注意,`butter`函数用于设计滤波器,`abs`和`unwrap`分别用于获取幅值和无量纲化相位。
阅读全文
相关推荐

















