ОБНОВИТЬ:
Я нашел Scipy рецепт, основанный на этом вопросе! Итак, всем, кто интересуется, сразу переходите к: Содержание »Обработка сигналов» Полоса пропускания Баттерворта
Мне трудно достичь того, что изначально казалось простой задачей реализации полосового фильтра Баттерворта для одномерного массива numpy (временного ряда).
Параметры, которые я должен включить, - это sample_rate, частоты среза в герцах и, возможно, порядок (другие параметры, такие как затухание, собственная частота и т. Д., Для меня более непонятны, поэтому подойдет любое значение "по умолчанию").
Сейчас у меня есть вот это, похоже, работает как фильтр верхних частот, но я не уверен, правильно ли я это делаю:
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
Документы и примеры сбивают с толку и непонятны, но я хотел бы реализовать форму, представленную в благодарности, помеченной как «для пропускной способности». Знаки вопроса в комментариях показывают, что я просто скопировал какой-то пример, не понимая, что происходит.
Я не инженер-электрик или ученый, я просто разработчик медицинского оборудования, которому необходимо выполнить довольно простую полосовую фильтрацию сигналов ЭМГ.