Posts

Bei der EKG-Signalverarbeitung ist die Rauschunterdruckung von 50/60Hz-Powerline-Interferenzen aus empfindlichen, informationsreichen biomedizinischen EKG-Wellenformen eine herausfordernde Aufgabe! Die Herausforderung wird durch die Anpassung an die Auswirkungen des EMG, wie z.B. die Bewegung von Gliedmaßen/Rumpf des Patienten oder sogar die Atmung, noch komplizierter. Ein traditioneller Ansatz, der von vielen angenommen wird, ist die Verwendung eines IIR-Kerbfilters zweiter Ordnung:

\(\displaystyle H(z)=\frac{1-2cosw_oz^{-1}+z^{-2}}{1-2rcosw_oz^{-1}+r^2z^{-2}}\)

wobei \(w_o=\frac{2\pi f_o}{fs}\) die Mittenfrequenz, \(f_o\) die Kerbe und \(r=1-\frac{\pi BW}{fs}\) die Bandbreite (-3dB-Punkt) der Kerbe steuert.

Wo liegt die Herausforderung?

Wie oben gesehen, ist \(H(z) \) einfach zu implementieren, aber die Schwierigkeit liegt darin, einen optimalen Wert für \(r\), zu finden, da eine wünschenswerte scharfe Kerbe bedeutet, dass die Pole nahe am Einheitskreis liegen (siehe rechts).

In Gegenwart von stationären Störungen, z.B. wenn der Patient absolut ruhig ist und die Auswirkungen der Atmung auf die Sensordaten minimal sind, ist dies möglicherweise kein Problem.

Betrachtet man jedoch die Auswirkungen von EMG auf die erfasste Wellenform (eine viel realistischere Situation), verursacht die Rückkopplung (Pole) des IIR-Filters ein Klingeln auf der gefilterten Wellenform, wie unten dargestellt:

Contaminated ECG with non-stationary 50Hz powerline interference (FIR filtering), ECG sigal processing, ECG DSP, ECG measurement

Verschmutztes EKG mit nicht-stationären 50Hz-Stromleitungsstörungen (IIR-Filterung)

Wie oben zu sehen ist, wurde zwar ein Großteil der 50Hz-Stromleitungsstörungen beseitigt, aber es gibt immer noch ein deutliches Ringing um die Hauptspitzen herum (gefilterter Ausgang in rot dargestellt). Dieses Ringing ist für viele biomedizinische Anwendungen unerwünscht, da wichtige kardiale Informationen wie das ST-Segment nicht eindeutig analysiert werden können.

Der Frequenzgang des IIR, der zur Filterung der obigen EKG-Daten verwendet wird, ist unten dargestellt.

IIR notch filter frequency response, ECG signal processing, ECG DSP, ECG  measurement

Frequenzgang des IIR-Kerbfilters

Die Analyse des Diagramms zeigt, dass die Gruppenlaufzeit (group delay, oder durchschnittliche Verzögerung) des Filters nichtlinear ist, aber in den Durchlassbereichen fast Null ist, was bedeutet, dass keine Verzerrung vorliegt. Die Gruppenlaufzeit bei 50 Hz steigt auf 15 Abtastwerte an, was die Quelle des Schwingens ist – wobei die Gruppenlaufzeit umso größer ist, je näher sich die Pole am Einheitskreis befinden.

ASN FilterScript bietet Designern die Funktion notch(), die eine direkte Implementierung von H(z), ist, wie unten gezeigt:

ClearH1;  // clear primary filter from cascade
ShowH2DM;   // show DM on chart

interface BW={0.1,10,.1,1};

Main()

F=50;
Hd=notch(F,BW,"symbolic");
Num = getnum(Hd); // define numerator coefficients
Den = getden(Hd); // define denominator coefficients
Gain = getgain(Hd); // define gain

Savitzky-Golay FIR-Filter

Eine Lösung für das oben erwähnte Ringing sowie die Rauschunterdrückung kann durch einen Savitzky-Golay-Tiefpass-Glättungsfilter erreicht werden. Diese Filter sind FIR-Filter und haben daher keine Rückkopplungskoeffizienten und kein Ringing!

Savitzky-Golay-(Polynom-)Glättungsfilter oder Glättungsfilter der kleinsten Quadrate sind Verallgemeinerungen des FIR-Durchschnittsfilters, die den Hochfrequenzanteil des gewünschten Signals besser erhalten können, auf Kosten der Entfernung von nicht so viel Rauschen wie ein FIR-Durchschnitt. Die besondere Formulierung von Savitzky-Golay-Filtern bewahrt verschiedene Momentenordnungen besser als andere Glättungsmethoden, die dazu neigen, Spitzenbreiten und -höhen besser als Savitzky-Golay zu erhalten. Als solche sind Savitzky-Golay-Filter sehr gut für biomedizinische Daten, wie z.B. EKG-Datensätze, geeignet.

Eliminierung der 50Hz-Powerline-Komponente

Beim Entwurf eines Savitzky-Golay-Filters 18. Ordnung mit einer Polynomanpassung 4. Ordnung (siehe den Beispielcode unten) erhalten wir einen FIR-Filter mit einer Nullverteilung, wie rechts dargestellt. Da wir jedoch die 50Hz-Komponente vollständig eliminieren möchten, kann der P-Z-Editor des Tools verwendet werden, um ein Nullpaar (grün dargestellt) auf genau 50Hz zu schieben.

Der resultierende Frequenzgang ist unten dargestellt, wobei zu erkennen ist, dass bei genau 50 Hz eine Kerbe vorhanden ist und die Gruppenlaufzeit von 9 Proben (in violett dargestellt) über das Frequenzband konstant ist.

FIR  Savitzky-Golay filter frequency response, ECG signal processing, ECG DSP, ECG measurement

FIR Savitzky-Golay-Filter-Frequenzgang

Wir lassen den verunreinigten EKG-Datensatz durch unseren optimierten Savitzky-Golay-Filter laufen und passen ihn an die Gruppenverzögerung an, die wir erhalten:

Contaminated ECG with non-stationary 50Hz powerline interference (FIR filtering), ECG signal processing, ECG digital filter, ECG filter designa

Verschmutztes EKG mit nicht-stationären 50Hz-Stromleitungsstörungen (FIR-Filterung)

Wie man sieht, gibt es keine Anzeichen für ein Klingeln, und die ST-Segmente sind jetzt für die Analyse deutlich sichtbar. Beachten Sie auch, wie der Filter (rot dargestellt) das Messrauschen reduziert hat, was die praktische Anwendbarkeit von Savitzky-Golay-Filtern für die biomedizinische Signalverarbeitung unterstreicht.

Ein Savitzky-Golay kann in ASN FilterScript über die Funktion savgolay() wie folgt entworfen und optimiert werden:

ClearH1;  // clear primary filter from cascade

interface L = {2, 50,2,24};
interface P = {2, 10,1,4};

Main()

Hd=savgolay(L,P,"numeric");  // Design Savitzky-Golay lowpass
Num=getnum(Hd);
Den={1};
Gain=getgain(Hd);

Bereitstellung

Dieser Filter kann nun über den automatischen Code-Generator des Werkzeugs in einer Vielzahl von Domänen eingesetzt werden, was einen schnellen Einsatz in Matlab-, Python- und eingebetteten Arm Cortex-M-Geräten ermöglicht.