ОНОВЛЕННЯ:
Я знайшов рецепт Scipy, заснований на цьому питанні! Отже, для всіх, хто цікавиться, перейдіть прямо до: Зміст »Обробка сигналів» Butterworth Bandpass
Мені важко домогтися того, що спочатку здавалося простим завданням реалізації смугового фільтра Баттерворта для одновимірного масиву numpy (часовий ряд).
Параметри, які я повинен включити, - це sample_rate, частоти відсікання в HERTZ і, можливо, порядок (інші параметри, такі як затухання, власна частота тощо, для мене більш незрозумілі, тому будь-яке значення "за замовчуванням" підійде).
Зараз у мене є це, що, здається, працює як фільтр високих частот, але я не впевнений, чи роблю це правильно:
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
Документи та приклади заплутані та незрозумілі, але я хотів би застосувати форму, представлену в рекомендації, позначену як "для пропуску". Знак питань у коментарях показує, де я просто скопіював якийсь приклад, не розуміючи, що відбувається.
Я не електричний інженер і не вчений, я просто дизайнер медичного обладнання, якому потрібно виконати досить просту смугову фільтрацію сигналів ЕМГ.