python设计带阻汉明窗fir滤波器用来过滤音频并画出滤波前后时域频域图,四个图画在一个界面
时间: 2024-03-18 13:40:06 浏览: 63
基于汉明窗设计的FIR带通滤波系统..pdf
好的,下面是Python代码实现,需要用到NumPy和SciPy库:
```python
import numpy as np
import scipy.signal as signal
import matplotlib.pyplot as plt
# 设计滤波器
fs = 44100 # 采样频率
f1 = 1000 # 通带低频截止频率
f2 = 3000 # 通带高频截止频率
f3 = 5000 # 阻带低频截止频率
f4 = 7000 # 阻带高频截止频率
b1 = 2 * f1 / fs
b2 = 2 * f2 / fs
b3 = 2 * f3 / fs
b4 = 2 * f4 / fs
N = 101 # 滤波器阶数
h = signal.firwin(N, [b1, b3, b4, b2], pass_zero=False, window='hamming') # 设计带阻滤波器
# 读取音频文件
data, fs = signal.wavfile.read('test.wav')
# 过滤音频信号
filtered_data = signal.lfilter(h, 1, data)
# 绘制时域图
plt.subplot(2, 2, 1)
plt.plot(data)
plt.title('Original Audio Signal')
plt.subplot(2, 2, 2)
plt.plot(filtered_data)
plt.title('Filtered Audio Signal')
# 绘制频域图
plt.subplot(2, 2, 3)
f, Pxx = signal.periodogram(data, fs)
plt.semilogy(f, Pxx)
plt.title('Original Audio Frequency Spectrum')
plt.subplot(2, 2, 4)
f, Pxx = signal.periodogram(filtered_data, fs)
plt.semilogy(f, Pxx)
plt.title('Filtered Audio Frequency Spectrum')
plt.tight_layout()
plt.show()
```
这段代码会读取名为test.wav的音频文件,并使用带阻汉明窗FIR滤波器对音频信号进行滤波。最后,它将绘制原始和过滤后的音频信号的时域图和频域图,并将它们放置在同一个图形界面中。
阅读全文