UPDATE:
К моему удивлению, глядя на эту же тему почти два года спустя, я нашел Scipy Recipe, основанный на этом вопросе! Итак, для всех, кто интересуется, перейдите прямо к:
http://wiki.scipy.org/Cookbook/ButterworthBandpass
Мне трудно найти то, что первоначально представляло собой простую задачу по внедрению полосового фильтра Баттерворта для массива 1-D numpy (временные ряды).
Параметры, которые я должен включить, это sample_rate, частоты отсечки IN 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
Документы и примеры сбивают с толку и неясны, но я хотел бы реализовать форму, представленную в поминге, обозначенную как "для полосы пропускания". Вопросительные знаки в комментариях показывают, где я только что скопировал несколько примеров, не понимая, что происходит.
Я не специалист по электротехнике или ученый, просто проектировщик медицинского оборудования, которому нужно выполнить довольно простую фильтрацию полос пропускания по сигналам ЭМГ.
Спасибо за любую помощь!