Как реализовать полосовой фильтр Баттерворта с помощью Scipy.signal.butter
ОБНОВИТЬ:
Я нашел рецепт Scipy, основанный на этом вопросе! Итак, для всех, кто заинтересован, перейдите прямо к:Содержание & # xBB; Обработка сигналов & # xBB; Butterworth Bandpass
Мне трудно достичь того, что первоначально казалось простой задачей реализации полосового фильтра Баттерворта для двумерного массива (временные ряды).
Параметры, которые я должен включить, - это sample_rate, частоты среза IN HERTZ и, возможно, порядок (другие параметры, такие как затухание, собственная частота и т. Д., Для меня более неясны, поэтому подойдет любое значение "default").
Теперь у меня есть то, что, похоже, работает как фильтр верхних частот, но я ни в коем случае не уверен, правильно ли я делаю:
def butter_highpass(interval, sampling_rate, cutoff, order=5):
nyq = sampling_rate * 0.5
stopfreq = float(cutoff)
cornerfreq = 0.4 * stopfreq # (?)
ws = cornerfreq/nyq
wp = stopfreq/nyq
# for bandpass:
# wp = [0.2, 0.5], ws = [0.1, 0.6]
N, wn = scipy.signal.buttord(wp, ws, 3, 16) # (?)
# for hardcoded order:
# N = order
b, a = scipy.signal.butter(N, wn, btype='high') # should 'high' be here for bandpass?
sf = scipy.signal.lfilter(b, a, interval)
return sf
Документы и примеры являются запутанными и неясными, но я хотел бы реализовать форму, представленную в комментарии, помеченной как "для пропускной способности". Знаки вопроса в комментариях показывают, где я просто скопировал некоторый пример, не понимая, что происходит.
Я не электротехник и не ученый, я просто разработчик медицинского оборудования, которому нужно выполнить довольно простую полосовую фильтрацию сигналов ЭМГ.