Я хочу отфильтровывать все за пределами 20 Гц - 20000 Гц. Я использую фильтр Баттерворта:20hz-20000hz Взрывная фильтрация 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 файл (demo file here) (это не проблема аудио ввода/вывода): выход либо пустой (тишина), либо взрыва (с некоторыми другими входными wav-файлами).
1) Есть ли что-то, что делает фильтры Баттерворта не работающими с полосой пропускания [b1, b2] где b2 < 0,5?
2) В целом, как бы вы сделали фильтрацию, чтобы сохранить только 20 - 20000 Гц с помощью Python/scipy? (никакая другая внешняя библиотека)
Неверный стек. Попробуйте dsp.stackexchange.com. – wwii
Scipy - это внешняя библиотека. – wwii