Posts

Praktische tips voor ruis onderdrukking ECG data

Bij ECG-signaalverwerking is het verwijderen van 50/60Hz powerline interferentie is een grote uitdaging! De informatie voorkomend uit de ECG biomedische golfvormen is erg gevoelig voor verstoringen. De uitdaging wordt verder gecompliceerd door het aanpassen aan de effecten van EMG, zoals een beweging van de patiënt in de ledematen of de romp of zelfs de ademhaling. Hiervoor wordt vaak een 2e orde IIR notch filter gebruikt:

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

waarbij \(w_o=\frac{2\pi f_o}{fs}\) de centrumfrequentie regelt, \(f_o\) van de notch, en \(r=1-\frac{\pi BW}{fs}\) de bandbreedte (-3dB point) van de notch controleert.

Wat is de uitdaging?

Zoals hierboven beschreven, is \(H(z) \) makkelijk te implementeren. De moeilijkheid ligt echter in het vinden van een optimale waarde van r, aangezien een gewenste scherpe notch betekent dat de polen dicht bij de eenheidscirkel ligt (zie rechts).

ECG biomedical 2nd order IIR notch filter H(z) is simple to implement, but the difficulty lies in finding an optimal value of r, as a desirable sharp notch means that the poles are close to unit circle.

Bij stationaire interferentie, bijvoorbeeld wanneer de patiënt absoluut stil ligt en de effecten van de ademhaling op de sensorgegevens minimaal zijn, hoeft dit geen probleem te zijn.

Echter, wanneer men de effecten van EMG op de golfvorm (een veel realistischer situatie) bekijkt, veroorzaakt de terugkoppeling van het IIR-filter (polen) ringen op de gefilterde golfvorm, zoals hieronder wordt weergegeven:

biomedical ex iir td Contaminated ECG with non-stationary 50Hz powerline interference (FIR filtering), ECG sigal processing, ECG DSP, ECG
Vervuilde ECG met niet-stationaire 50Hz stroomlijninterferentie (IIR-filtering)

Zoals hierboven te zien is, is het grootste deel van de 50Hz-storing verwijderd. Er is echter nog steeds sprake van aanzienlijke ringen rond de belangrijkste pieken (gefilterde output in het rood weergegeven). Deze ringing is ongewenst voor veel biomedische toepassingen, omdat vitale cardiale informatie zoals het ST-segment daardoor niet duidelijk kan worden geanalyseerd.

De frequentierespons van het IIR dat wordt gebruikt om de bovenstaande ECG-gegevens te filteren, staat hieronder weergegeven.

biomedical ex iir fr IIR notch filter frequency response, ECG signal processing, ECG DSP, ECG  measurement
IIR notch filter frequentierespons

Bij het analyseren van de grafiek is te zien dat de groepsvertraging (of gemiddelde vertraging) van het filter niet-lineair is, maar bijna nul in de passbands. Dit betekent dat er geen vervorming is. De groepsvertraging bij 50Hz loopt op tot 15 samples, wat de bron is van de ringing – waar hoe dichter bij de polen de eenheidscirkel is, hoe groter de groepsvertraging.

ASN FilterScript biedt ontwerpers de notch() functie, die een directe uitvoering is van H(z), zoals hieronder getoond:

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-filters

Een oplossing voor het bovengenoemde ringing en geluidsreductie kan worden bereikt door middel van een Savitzky-Golay lowpass smoothing filter. Deze filters zijn FIR-filters en hebben dus geen terugmeldingscoëfficiënten en geen ringing!

Savitzky-Golay (polynomiaal) smoothing filters of least-squares smoothing filters zijn generalisaties van het FIR gemiddelde filter die het hoogfrequent gehalte van het gewenste signaal beter kunnen behouden, ten koste van het niet verwijderen van zoveel ruis als een FIR gemiddelde. De specifieke formulering van de Savitzky-Golay filters behoudt verschillende moment orders beter dan andere afvlakmethodes, die de neiging hebben om piekbreedten en -hoogten beter te behouden dan Savitzky-Golay. Als zodanig zijn Savitzky-Golay filters zeer geschikt voor biomedische gegevens, zoals ECG-datasets.

Het elimineren van de 50Hz powerline component

Door het ontwerpen van een 18e orde Savitzky-Golay filter met een 4e orde polynomiale pasvorm (zie de voorbeeldcode hieronder), verkrijgen we een FIR filter met een nul-verdeling zoals hiernaast getoond. Echter, omdat we de 50Hz component volledig willen elimineren, kan de P-Z editor van de tool gebruikt worden om een nulpaar (in het groen weergegeven) tot precies 50Hz te brengen.

biomedical ex fir pole zero. Designing an 18th order Savitzky-Golay filter with a 4th order polynomial fit, , we obtain an FIR filter with a zero  distribution

De resulterende frequentierespons is hieronder weergegeven, waar te zien is dat er een notch is op precies 50Hz, en de groepsvertraging van 9 samples (in paars weergegeven) is constant over de hele frequentieband.

biomedical ex fir fr FIR  Savitzky-Golay filter frequency response, ECG signal processing, ECG DSP, ECG measurement
FIR Savitzky-Golay-filter-frequentierespons

Wanneer we de vervuilde ECG-dataset door onze aangepaste Savitzky-Golay-filter laten gaan, en met de aanpassing voor de groepsvertraging krijgen we:

biomedical ex fir td Passing the tainted ECG dataset through our tweaked Savitzky-Golay filter, and adjusting for the group delay
Verontreinigde ECG met niet-stationaire 50Hz stroomlijninterferentie (FIR-filtering)

Zoals te zien, is er geen sprake van ringing en zijn de ST-segmenten nu duidelijk zichtbaar voor analyse. Merk ook op hoe het filter (weergegeven in rood) de meetruis heeft gereduceerd. Dit toont de bruikbaarheid van de Savitzky-Golay filters voor biomedische signaalverwerking aan.

Een Savitzky-Golay kan als volgt worden ontworpen en geoptimaliseerd in ASN FilterScript via de savgolay() functie:

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);

Implementatie

Dit filter kan nu worden geimplementeerd via de automatische codegenerator van de tool, waardoor het snel kan worden geimplementeerd in Matlab, Python en ingebedde Arm Cortex-M apparaten.

ASN Filter Designer Powerful DSP Platform
ASN Filter Designer Powerful DSP Platform