用python画出过滤前后频谱图
时间: 2023-07-20 07:19:07 浏览: 97
好的,下面是一个示例代码,可以使用Python绘制出音频信号经过巴特沃斯高通滤波器前后的频谱图:
```python
from scipy.io import wavfile
from scipy import signal
import numpy as np
import matplotlib.pyplot as plt
# 读取音频文件
sample_rate, samples = wavfile.read('audio.wav')
# 设计巴特沃斯高通滤波器
fc = 500 # 截止频率
b, a = signal.butter(4, fc/(sample_rate/2), 'highpass')
# 滤波前的频谱图
freq, original_spec = signal.welch(samples, fs=sample_rate)
plt.plot(freq, original_spec, label='Original')
# 滤波
filtered_samples = signal.filtfilt(b, a, samples)
# 滤波后的频谱图
freq, filtered_spec = signal.welch(filtered_samples, fs=sample_rate)
plt.plot(freq, filtered_spec, label='Filtered')
# 设置图形标题和标签
plt.title('Spectral comparison')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.legend()
# 显示图形
plt.show()
```
在这个例子中,我们使用了`signal.welch`函数计算了音频信号的功率谱密度,并使用Matplotlib库将滤波前后的频谱图绘制在同一个图形中进行比较。需要注意的是,`signal.filtfilt`函数是双向滤波,因此滤波后的信号的长度会比原始信号略短,需要在绘制频谱图前对其进行裁剪以保证长度一致。
阅读全文