使用scipy.signal.firwin将高通滤镜应用于WAV文件

时间:2018-06-01 13:29:39

标签: python audio scipy signal-processing

我尝试将高通滤波器(截止频率:1000 Hz)应用于scipy.signal.firwin的单声道16位44.1 Khz WAV文件:

from scipy.io import wavfile
from scipy import signal
import numpy as np

sr, x = wavfile.read('test.wav')      # 16-bit mono 44.1 khz

b = signal.firwin(5, cutoff=1000, fs=sr, pass_zero=False)

x = signal.lfilter(b, [1.0], x)

wavfile.write('test2.wav', sr, x.astype(np.int16))

结果与输入完全相似(但不完全相等),即没有应用高通。

firwin工作时,我应该修改哪些高通?

1 个答案:

答案 0 :(得分:2)

似乎问题只是滤波器系数的数量:5太低了。

b = signal.firwin(101, cutoff=1000, fs=sr, pass_zero=False)

效果更好。

注意:前101个样本中的音频几乎为零,因此我们应该在开始和结束时对WAV文件进行零填充,然后应用滤镜,然后裁剪文件以删除零填充部分。