我尝试将高通滤波器(截止频率: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
工作时,我应该修改哪些高通?
答案 0 :(得分:2)
似乎问题只是滤波器系数的数量:5太低了。
用
b = signal.firwin(101, cutoff=1000, fs=sr, pass_zero=False)
效果更好。
注意:前101个样本中的音频几乎为零,因此我们应该在开始和结束时对WAV文件进行零填充,然后应用滤镜,然后裁剪文件以删除零填充部分。