Pan Tompkins Bandpassfilter

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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.