|
|
Interpolation bei variablen Stützstellenabständen |
|
Ulugumuschluck |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.07.2012, 19:05
Titel: Interpolation bei variablen Stützstellenabständen
|
|
|
|
|
Hallo Leute!
Ich zerbreche mir seit längerem den Kopf über ein Problem und hoffe, dass mir einer von euch weiterhelfen kann.
Ich analysiere zur Zeit stark deformierte und punktuell extrem verrauschte EKGs, deren R-Zacken sich nicht mit den üblichen Detektoren erkennen lassen. Als menschlicher Beobachter erkennt man jedoch eine Periodizität.
Ziel ist es, einzelne Herzschläge offline (d.h. nach Beendigung der Messung) zu detektieren.
Als Ansatz habe ich Template Matching gewählt und ich führe eine Analyse der Korrelation und euklidischen Distanz zwischen meinem Template und allen Maxima des Signals durch. Letztendlich erhalte ich dadurch eine Folge zeitinvarianter Impulse bestimmter Höhe.
Ich habe bereits eine Methode, um einige Perioden sicher anhand ihrer Peaks zu erkennen und zusätzlich eine sehr große Stichprobe typischer Herzfrequenzverläufe. Diese habe ich auf die relative instantane Herzfrequenzvariabilität hin ausgewertet ( Sprich: Um wieviel Prozent verändert sich die Dauer eines Herzschlags von einem auf den folgenden)
Nun zu meinem Problem:
Ich möchte die Peaks, die ich sicher einem Herzschlag zuordnen kann als Stützstellen für eine Interpolation nutzen, bin mir aber nicht sicher, wie ich die Sache angehen muss.
Die Natur meines Ansatzes hat zur Folge, dass ich meist mehrere Stützstellen in direkter Folge habe, dann länger nichts und dann wieder einige Punkte. Ich weiß also leider nicht, wieviel Zyklen zwischen meinen Stützstellen liegen. Meinen einzigen Anhaltpunkt könnte meiner Meinung nach die Stichprobe aus den Referenzmessung liefern.
Kann ich diese irgendwie in eine Interpolation einfließen lassen?
Eine Weitere Frage wäre noch, wie ich aus meiner Stichprobe eine gültige Verteilung ableiten kann. Die Funktion lillietest sagt mir, dass es sich nicht um eine Normalverteilung handelt und der Kolmogorow-Smirnow-Test ist laut Matlab-Hilfe nicht anwendbar, wenn man auf eine Verteilung testet, die aus der Stichprobe geschätzt wird.
Ich hoffe jemand mit mehr mathematischem Sachverstand kann mir weiterhelfen.
Gruß,
Ulu
|
|
|
|
|
flashpixx |
Forum-Guru
|
|
Beiträge: 355
|
|
|
|
Anmeldedatum: 19.04.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.07.2012, 22:52
Titel:
|
|
|
|
|
Ich finde das Problem echt spannend und wirklich kniffelig.
Was möchtest Du denn genau haben? Die Funktion eines "Schlages" oder die periodische Funktion?
Wenn ich mir das hier anschaue http://de.wikipedia.org/w/index.php.....etimestamp=20100524035909
dann denke ich, dass was unter QRS vermerkt ist problematisch ist, denn das ist ja eigentlich für mich eher eine stückweise definierte Funktion nämlich P & PQ, QRS und ST, T und U. Was ja dann wohl eher einem Spline näher kommt.
Bei einem Template Matching setzt Du ja voraus, dass Du "exakt" so einen Template in Deinen Daten hast, was ich durchaus etwas kritisch sehe, weil es sich ja hier um ein "biologisches System" handelt. D.h. Du kannst sicher "ähnliche" Matches haben, aber nie exakt gleiche.
Soweit ich eine EKG Linie verstehe, habe ich doch eine 0 Linie, aus der dann irgendwann ein Schlag auftritt und dieser Schlag hat ein bestimmtes Muster. D.h. Du kennst doch anhand der Daten wie viele Datenpunkte zwischen zwei Herzschlägen liegen, denn hier wären die 0 Werte zwischen Schlägen zu zählen (sprich die Abtastfrequenz des Signals, Stichwort Shannon-Theorem). Wenn ich nun einen einzelnen Schlag mir anschaue, dann besteht dieser aus von 0 verschiedenen Datenpunkten, d.h. Du hast hier eine andere "Frequenz", d.h. man müsste die Peaks mit Hilfe einer Frequenzanalyse finden können (FFT oder z.B. Gortzel Algorithmus). Auf der Basis der Abtastfrequenz und der gefunden Frequenzen müsstest Du ein Polynom interpolieren können.
Ist aber nur so ein Gedanke, der mir beim Lesen des Post eingefallen ist.
|
|
|
Ulugumuschluck |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.07.2012, 09:20
Titel:
|
|
|
|
|
Hi Flashpixx,
also ich hätte im Grunde gerne einfach nur eine Funktion in der pro Herzzyklus ein Impuls auftaucht. Das ganze natürlich möglichst immer an der gleichen Stelle, relativ zum Zyklus.
Ich habe dir mal einen Ausschnitt eines Signals angehängt, dass ich analysiere. Bitte entschuldige die miese Übersichtlichkeit. Das Ganze war eigentlich nur so für mich gedacht. Zur Info: Das blaue ist natürlich das Signal, bzw. im unteren Bild dessen Auswertung. Die roten vertikalen Linien sind die R-Zacken aus dem Referenz EKG, und die horizontale Linie im unteren Bild stellt den Mittelwert der Impulse aus meiner Analyse dar.
Alle Impulse über diesem Mittelwert habe ich außerdem versucht zu kategorisieren. Die Einteilung kannst du in der Überschrift nachlesen.
Wie du um oberen Bild erkennen kannst, bleibt von der typischen EKG nicht viel übrig. Der Ausschnitt ist übrigens noch einer der besseren und jeder EKG-Messreihe wiederum zeigt verschieden Zyklusformen. Eine Analyse auf den EKG-Verlauf innerhalb eines Zyklus ist also praktisch kaum möglich.
Wie du sehen kannst, könnte man neben den sicheren Peaks (in Cyan) meist auch noch andere finden, die vermutlich auch korrekt sind.
Ich möchte nun zwei Ansätze entwickeln: Einmal so eine Art Regelwerk(im Stile von: Suche die kommenden 2Sekunden ab und bewerte alle gefunden Peaks nach Höhe, Abstand und schreibe ihnen eine Gewichtung zu) und dann eben noch eine Interpolation. Um diese werde ich auch beim Regelwerkansatz nicht herum kommen, da manche Signalabschnitte sehr verrauscht sind und ich dort keine vernünftige, zuverlässige Peaks detektiere.
Zuletzt möchte ich beide Ansätze dann auf Zuverlässigkeit und Qualität vergleichen.
Gruß,
Ulu
Beschreibung: |
|
Download |
Dateiname: |
Messung+erste Auswertung.jpg |
Dateigröße: |
159.57 KB |
Heruntergeladen: |
911 mal |
|
|
|
flashpixx |
Forum-Guru
|
|
Beiträge: 355
|
|
|
|
Anmeldedatum: 19.04.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.07.2012, 10:00
Titel:
|
|
Sorry, wenn ich da jetzt nicht "die" Lösung direkt finde, aber ich finde das wirklich sehr spannend aber auch schwierig.
So wie ich das Bild jetzt verstehe hast Du doch nur einen Herzschlag drin (knapp nach 2.35) !? Und diesen willst Du doch finden, oder verstehe ich das falsch?
Weil dann würde ich, bevor ich da überhaupt die Dedektion mache, erstmal einen Tiefpassfilter ( http://de.wikipedia.org/wiki/Tiefpassfilter ) nehmen, um eben nicht "nicht Herzschläge" eben raus zufiltern und dann die Dedektion auf den Daten.
In dem Bild findest Du ja "zu viele" Peaks, darum würde ich erst einmal das Signal rauswerfen was "sicher" kein Herzschlag ist.
|
|
|
Ulugumuschluck |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.07.2012, 11:39
Titel:
|
|
|
|
|
Das, was du als Herzschlag interpretierst ist leider nur eine Störung des eigentlichen Signals. Ich hätte noch erwähnen sollen, dass der Bereich im Bild ca. 22Sekunden entspricht.
Die Herzschläge sind die Schwingungen zwischen den roten Linien in der oberen Abbildung. Die grünen Linien zeigen die Stellen, die ich sicher als Peak identifiziere und die Grünen, sind Stellen, die mit relativ hoher Wahrscheinlichkeit Peaks darstellen.
Ich habe mir im Grunde zunächst nur den Abstand aller Peaks mit Qualitätsmaß über Durchschnitt angeschaut und dann die Paare gesucht, deren Abstand ungefähr dem Median der Abstände entspricht.
Wenn ein Peak dann Teil von 2 Paaren ist, nehme ich an, dass dieser sicher ist.
Mein erster Ansatz ist nun mich mich von sicheren Stellen am Signal "entlang zu hangeln". Leider addieren sich die dabei auftretenden Fehler auf, was nicht mal soo schlimm wäre, wenn ich genügend sicher Peaks im Signal verteilt habe.
Leider habe ich im Extremfall in einem Signal nur 2 sicher Peaks gefunden.
Das sind dann Probanten mit sehr variabler instantaner Herzrate. Leider brauche ich halt irgendeinen Anhaltspunkt zum Starten meiner Suche.
Aber das ist gerade noch nicht Thema meiner Problembetrachtung
|
|
|
flashpixx |
Forum-Guru
|
|
Beiträge: 355
|
|
|
|
Anmeldedatum: 19.04.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.07.2012, 22:29
Titel:
|
|
|
|
|
Ah okay, dann war das mein Fehler. Wenn ich das so sehe, dass die grünen Daten, die sind, die Du suchst, dann würde man doch als menschlicher Betrachter sagen, dass die Kurve doch "recht" periodisch ist, bis auf einen Ausreißer und eben die Perioden auf ein Epsilon unterschiedlich sind.
Wenn ich nun gedanklich davon ausgehe, dass sich der Herzschlag als Periode beschreiben lässt, dann müsstest Du doch über eine Schwingungsanalyse also FFT (oder als Alternative http://de.wikipedia.org/wiki/Goertzel-Algorithmus ) weiter kommen. Sprich Du dedektierst die Frequenzen in dem Signal. Mit den Satz von Parseval ( http://de.wikipedia.org/wiki/Satz_von_Parseval ) kannst Du dann entscheiden, ob die Frequenz als "erkannt" betrachtet wird oder nicht.
Damit hättest Du zu jedem Samplingdatensatz die passende Frequenz dedektiert und musst dann nur noch über die erkannten Punkte interpolieren. Dadurch dass man mit Hilfe der Varianz vergleicht, sollte sich auch direkt eine passende Skalierung ergeben.
Generell würde ich aber noch die Daten vorfiltern um Störungen zu vermeiden.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|