Forum: Digitale Signalverarbeitung / DSP / Machine Learning Pan Tompkins Bandpassfilter


von Hans (Gast)


Lesenswert?

Hallo Leute,

ich bin gerade dabei den Bandpassfilter (5-11Hz) des 
Pan/Tompkins-Algorithmus in C zu implementieren. Leider liefert er mir 
nicht das gewünschte Ergebnis, sondern im Ausgangssignal ist immer noch 
eine deutliche 50Hz-Schwingung zu erkennen und überhaupt kein 
EKG-Signal. Allerdings erkenne ich in meiner Implementierung keinen 
Fehler. Außerdem hatte ich den kompletten Algorithmus vorher schon mit 
einem IIR-Butterworth-Bandpass 3.Ordnung am laufen, also kann es auch 
nicht an dem Rest des Codes liegen.
Ich wollte nur den IIR-Bandpass durch den originalen Bandpass aus dem 
Pan-Tompkins-Algorithmus ersetzen um einen linearen Phasengang zu 
erhalten und so das Ergebnis etwas zu verbessern.

Der Bandpass besteht aus einem Hoch- und einem Tiefpass deren Funktionen 
folgendermaßen gegeben sind:

Hochpass:
y(nT) = 32x(nT-16T) - 1/32[y(nT-T) + x(nT) - x(nT-32T)]

Tiefpass:
y(nT) = 2y(nT-T) - y(nT-2T) + x(nT) - 2x(nT-6T) + x(nT-12T)

Habe ich vielleicht doch einen Fehler übersehen?
1
-----------------Filterfunktionen---------------------
2
signed long lowpass(signed long *x, signed long *y)
3
{  
4
  y[0] = 2*y[1] - y[2] + ((x[0] - 2*x[6] + x[12]));
5
6
  return y[0];
7
8
  y[1] = y[2];
9
  y[0] = y[1];
10
}
11
12
13
signed long highpass(signed long *x, signed long *y)
14
{  
15
  y[0] = x[16] - (y[1] >> 5) - (x[0] >> 5) + (x[32] >> 5);
16
17
  return y[0];
18
19
  y[0] = y[1];
20
}
21
22
-------------------Aufruf in der Main----------------------
23
x_lowpass[0] = data;
24
data = lowpass(x_lowpass, y_lowpass);
25
//alle Werte um eine Stelle weiterschieben
26
for(l = 11; l > 0; l--)
27
{
28
  x_lowpass[l] = x_lowpass[l+1];
29
}
30
x_lowpass[0] = x_lowpass[1];
31
32
x_highpass[0] = data;
33
data = highpass(x_highpass, y_highpass);
34
//alle Werte um eine Stelle weiterschieben
35
for(l = 31; l > 0; l--)
36
{
37
  x_highpass[l] = x_highpass[l+1];
38
}
39
x_highpass[0] = x_highpass[1];

von Paul B. (Gast)


Lesenswert?

Woher stammen denn Deine Eingangsdaten? Ich kenne mich mit EKG nicht so 
aus, aber 50Hz klingen mir verdächtig nach ungewollten Störungen. Sind 
die empfangen worden oder simuliert?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.