Pan Tompkins Bandpassfilter

Gast #3560615
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];

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren