我希望将20 Hz至20000 Hz之外的所有内容过滤掉。我使用Butterworth滤波器:
from scipy.io import wavfile
from scipy import signal
import numpy
sr, x = wavfile.read('sweep.wav')
nyq = 0.5 * sr
b, a = signal.butter(5, [20.0 / nyq, 20000.0 / nyq], btype='band')
x = signal.lfilter(b, a, x)
x = numpy.float32(x)
x /= numpy.max(numpy.abs(x))
wavfile.write('b.wav', sr, x)
我注意到这个程序可以处理44.1千赫兹的文件,但无法处理96千赫兹的WAV文件(演示文件在此)(这不是音频输入输出问题):输出要么是空白(没有声音),要么是爆炸声(对于其他一些输入wav文件)。
1)是否有什么原因导致Butterworth滤波器不能用于带通[b1,b2],其中b2 < 0.5?
2)总的来说,你如何使用Python/scipy进行过滤,只保留20-20000Hz的声音?(不使用其他外部库)