Hochpassfilter von 0,01 Hz für langsame EEG-Drifts

10

Ich versuche, einen Hochpassfilter für elektroenzephalografische (EEG) Datensätze zu erstellen, um sehr langsame Abweichungen zu vermeiden. Frequenzen um 0,3 Hz sind jedoch für die Forschung, der diese Daten dienen, sehr wichtig.

Ich benutze Matlab und habe verschiedene Dinge ausprobiert. Es scheint, dass eine sehr niedrige dB-Dämpfung von 3 dB für FIR-Filter in Ordnung ist. Zum Beispiel habe ich das benutzt:

h=fdesign.highpass('Fst,Fp,Ast,Ap',0.005,0.01,3,1,250); % i needed to cut 
d=design(h,'butter');
fvtool(d)

Dieser Filter erzeugt jedoch zu Beginn der Daten eine Gleichstromdrift, und ich möchte diese ersten Datenpunkte nicht verlieren.

Ich habe Ihre Seiten durchgelesen, dass eine clevere Idee darin besteht, einen Tiefpassfilter zu entwerfen, den ich später von den realen Daten abziehen würde. Ich habe es mit einem Equiripple-Filter gemacht und es hat funktioniert, aber einen Grundlinienlift hinterlassen. Ich möchte jetzt keine durchschnittliche Entfernung ausführen, da dies ein nächster Schritt im Analyseprotokoll ist.

Irgendwelche Vorschläge?

forsker_for_dsp
quelle
1
Das Problem ist also nur die erste Reaktion des Filters? Sind dies voraufgezeichnete Daten, denen Sie nur Nullen voranstellen können, oder handelt es sich um Echtzeitdaten?
Endolith
Der Tiefpass- und Subtraktionsansatz leidet auch unter dem Problem, das Sie sehen. Das Problem ist, dass jeder Filter eine Verzögerung hat. Filter mit scharfen Grenzwerten wie dem gewünschten können sehr lange Verzögerungen aufweisen. Ich bin mir nicht sicher, warum Sie als nächstes eine durchschnittliche Entfernung durchführen würden. Die DC-Verstärkung des von Ihnen angezeigten Filters ist Null, sodass kein nennenswerter Durchschnitt entfernt werden muss (mit Ausnahme der Übergangsperiode zu Beginn des Ausgangs aufgrund der Verzögerung des Filters).
Jason R

Antworten:

6

Sie fragen nach einer Zeitmaschine: Um den Gleichstromstoß bei zu vermeiden , müssen Sie den Zustand des Filters kennen, als ob er vor Beginn der Aufnahme gelaufen wäre. Das wird nicht passieren, egal welche Art von Filter Sie verwenden.t=0

Hier ist ein Trick, der kann für Sie nützlich sein. Angenommen , Sie haben ein Tap-FIR-Filter (oder ein IIR-Filter, dessen Impulsantwort nach Abtastwerten angemessen auf 0 abfällt ). Nehmen Sie die ersten Abtastwerte Ihres Signals, kehren Sie sie um und stellen Sie diese dem Beginn Ihres Signals voran. Tatsächlich definieren wir zum Filtern ein neues Signal . Wenn Sie das filtern, wurde der Filterzustand bereits mit dem Anfangssignal "vorbereitet": Löschen Sie die ersten Abtastwerte des Ausgangs, und der DC-Bump sollte hoffentlich verschwunden sein.N N g ( t ) = g ( - t ) = f ( t ) N.NNNg(t)=g(t)=f(t)N

Es ist unnötig zu erwähnen, dass dieses Schema zahlreiche Fallstricke aufweist. Für den Anfang ist es für die Echtzeitverarbeitung schwieriger, und wenn die Signalableitung bei hoch ist , treten bei den ersten Abtastwerten immer noch Vertrauensprobleme auf. Aber es sollte die Beule loswerden.t=0

rtollert
quelle
6

Schauen Sie sich die Filtfilt-Funktion an. Es gibt eine Nullphasenantwort und eine perfekte Sprungantwort. Insbesondere die Sprungantwort-Eigenschaft der Filtfilt-Filterung kann Ihr Problem lösen.

Niaren
quelle
0

Ich habe den Trick gemacht, den Herr Rtollert erklärt hat, und dachte, es sei das Beste, was ich tun kann.

Wenn Sie den Weg der kontinuierlichen Abtastung / Hardwarekompensation beschreiten, könnte die Effizienz Sie an DC-Blockern interessieren, wie sie von Randy Yates und Richard Lyons in dsp Tips & Tricks März 2008 beschrieben wurden

Chip Wrangler
quelle
-1

Der absolute Gleichstromwert ist Ihnen egal, richtig?

Warum fügen Sie Ihren Daten nicht einfach einen statischen Versatz hinzu, sodass der erste Datenpunkt bei Null liegt?

Sicher, Sie müssten den Offset zu jedem Datenpunkt hinzufügen, aber dies würde die großen Probleme mit der Sprungantwort, die Sie mit dem Filter haben, vollständig vermeiden.

Tatsächlich startet der Filter initialisiert auf Null. Wenn Ihre Daten beginnen, sieht der Filter daher einen großen Treppenschritt von Null zu dem DC-Pegel, den Sie haben.

Fügen Sie einfach einen Versatz hinzu, um die Treppenstufe zu entfernen.

Falscher Name
quelle
-1

Warum nicht durchschnittlich entfernen? Der spätere Schritt, der es "wieder" macht, hat einfach keine Wirkung (es würde Null subtrahieren).

ladkkasdöla
quelle
Dies ist eher eine Frage und keine wirkliche Antwort auf die Frage. Es könnte an einer Stelle als Kommentar angebracht gewesen sein, obwohl die Frage so alt ist, dass sie an dieser Stelle einfach sinnlos erscheint.
Sam Maloney