Как реализовать полосовой фильтр Баттерворта с помощью 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

enter image description here

Документы и примеры являются запутанными и неясными, но я хотел бы реализовать форму, представленную в комментарии, помеченной как "для пропускной способности". Знаки вопроса в комментариях показывают, где я просто скопировал некоторый пример, не понимая, что происходит.

Я не электротехник и не ученый, я просто разработчик медицинского оборудования, которому нужно выполнить довольно простую полосовую фильтрацию сигналов ЭМГ.

Ответы на вопрос(3)

Ваш ответ на вопрос