AKTUALISIEREN:
Ich habe ein Scipy-Rezept gefunden, das auf dieser Frage basiert! Wenn Sie interessiert sind, gehen Sie direkt zu: Inhalt »Signalverarbeitung» Butterworth Bandpass
Es fällt mir schwer, eine anfangs einfache Aufgabe der Implementierung eines Butterworth-Bandpassfilters für ein 1-D-Numpy-Array (Zeitreihen) zu erreichen.
Die Parameter, die ich einschließen muss, sind die Abtastrate, die Grenzfrequenzen IN HERTZ und möglicherweise die Reihenfolge (andere Parameter wie Dämpfung, Eigenfrequenz usw. sind für mich dunkler, daher würde jeder "Standard" -Wert ausreichen).
Was ich jetzt habe, ist das, was als Hochpassfilter zu funktionieren scheint, aber ich bin mir nicht sicher, ob ich es richtig mache:
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
Die Dokumente und Beispiele sind verwirrend und undurchsichtig, aber ich möchte das Formular implementieren, das in der Empfehlung "für Bandpass" angegeben ist. Die Fragezeichen in den Kommentaren zeigen, wo ich gerade ein Beispiel kopiert habe, ohne zu verstehen, was passiert.
Ich bin kein Elektrotechniker oder Wissenschaftler, sondern nur ein Entwickler medizinischer Geräte, der eine recht einfache Bandpassfilterung für EMG-Signale durchführen muss.