AKTUALIZACJA:
Znalazłem przepis na Scipy oparty na tym pytaniu! Zatem dla wszystkich zainteresowanych przejdź bezpośrednio do: Spis treści »Przetwarzanie sygnału» Pasmo Butterwortha
Mam trudności z osiągnięciem tego, co początkowo wydawało się prostym zadaniem, polegającym na zaimplementowaniu filtru pasmowo-przepustowego Butterwortha dla macierzy 1-D numpy (szeregi czasowe).
Parametry, które muszę uwzględnić, to sample_rate, częstotliwości odcięcia w HERTZ i ewentualnie kolejność (inne parametry, takie jak tłumienie, częstotliwość drgań własnych itp. Są dla mnie bardziej niejasne, więc wystarczyłaby każda wartość „domyślna”).
Teraz mam to, co wydaje się działać jako filtr górnoprzepustowy, ale nie jestem pewien, czy robię to dobrze:
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
Dokumentacja i przykłady są zagmatwane i niejasne, ale chciałbym zaimplementować formularz przedstawiony w poleceniu oznaczonym jako „for bandpass”. Znaki zapytania w komentarzach pokazują, gdzie właśnie skopiowałem i wkleiłem jakiś przykład bez zrozumienia, co się dzieje.
Nie jestem inżynierem elektrykiem ani naukowcem, tylko projektantem sprzętu medycznego, który musi wykonać dość proste filtrowanie pasmowoprzepustowe sygnałów EMG.