Ich versuche, ein Bild aus einer Elektrokardiographie zu lesen und jede der Hauptwellen darin zu erfassen (P-Welle, QRS-Komplex und T-Welle). Jetzt kann ich das Bild lesen und einen Vektor wie (4.2; 4.4; 4.9; 4.7; ...) erhalten, der für die Werte in der Elektrokardiographie repräsentativ ist, was die Hälfte des Problems ist. Ich brauche einen Algorithmus, der durch diesen Vektor gehen und erkennen kann, wann jede dieser Wellen beginnt und endet.
Hier ist ein Beispiel für eines seiner Diagramme:
Wäre einfach, wenn sie immer die gleiche Größe hätten, aber es funktioniert nicht so, oder wenn ich wüsste, wie viele Wellen das EKG haben würde, aber es kann auch variieren. Hat jemand ein paar Ideen?
Vielen Dank!
Aktualisierung
Beispiel für das, was ich erreichen möchte:
Angesichts der Welle
Ich kann den Vektor extrahieren
[0; 0; 20; 20; 20; 19; 18; 17; 17; 17; 17; 17; 16; 16; 16; 16; 16; 16; 16; 17; 17; 18; 19; 20; 21; 22; 23; 23; 23; 25; 25; 23; 22; 20; 19; 17; 16; 16; 14; 13; 14; 13; 13; 12; 12; 12; 12; 12; 11; 11; 10; 12; 16; 22; 31; 38; 45; 51; 47; 41; 33; 26; 21; 17; 17; 16; 16; 15; 16; 17; 17; 18; 18; 17; 18; 18; 18; 18; 18; 18; 18; 17; 17; 18; 19; 18; 18; 19; 19; 19; 19; 20; 20; 19; 20; 22; 24; 24; 25; 26; 27; 28; 29; 30; 31; 31; 31; 32; 32; 32; 31; 29; 28; 26; 24; 22; 20; 20; 19; 18; 18; 17; 17; 16; 16; 15; 15; 16; 15; 15; 15; 15; 15; 15; 15; 15; 15; 14; 15; 16; 16; 16; 16; 16; 16; 16; 16; 16; 15; 16; 15; 15; 15; 16; 16; 16; 16; 16; 16; 16; 16; 15; 16; 16; 16; 16; 16; 15; 15; 15; 15; 15; 16; 16; 17; 18; 18; 19; 19; 19; 20; 21; 22; 22; 22; 22; 21; 20; 18; 17; 17; 15; 15; 14; 14; 13; 13; 14; 13; 13; 13; 12; 12; 12; 12; 13; 18; 23; 30; 38; 47; 51; 44; 39; 31; 24; 18; 16; 15; 15; 15; 15; 15; 15; 16; 16; 16; 17; 16; 16; 17; 17; 16; 17; 17; 17; 17; 18; 18; 18; 18; 19; 19; 20; 20; 20; 20; 21; 22; 22; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 32; 33; 33; 33; 32; 30; 28; 26; 24; 23; 23; 22; 20; 19; 19; 18; 17; 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 16; 16; 16; 17; 16; 16; 17; 17; 16; 17; 17; 17; 17; 18; 18; 18; 18; 19; 19; 20; 20; 20; 20; 21; 22; 22; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 32; 33; 33; 33; 32; 30; 28; 26; 24; 23; 23; 22; 20; 19; 19; 18; 17; 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 16; 16; 16; 17; 16; 16; 17; 17; 16; 17; 17; 17; 17; 18; 18; 18; 18; 19; 19; 20; 20; 20; 20; 21; 22; 22; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 32; 33; 33; 33; 32; 30; 28; 26; 24; 23; 23; 22; 20; 19; 19; 18; 17; 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 19; 20; 20; 20; 20; 21; 22; 22; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 32; 33; 33; 33; 32; 30; 28; 26; 24; 23; 23; 22; 20; 19; 19; 18; 17; 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 19; 20; 20; 20; 20; 21; 22; 22; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 32; 33; 33; 33; 32; 30; 28; 26; 24; 23; 23; 22; 20; 19; 19; 18; 17; 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 17; 18; 17; 18; 18; 17; 18; 17; 18; 18; 17; 17; 17; 17; 16; 17; 17; 17; 18; 18; 17; 17; 18; 18; 18; 19; 18; 18; 17; 18; 18; 17; 17; 17; 17; 17; 18; 17; 17; 18; 17; 17; 17; 17; 17; 17; 17; 18; 17; 17; 18; 18; 18; 20; 20; 21; 21; 22; 23; 24; 23; 23; 21; 21; 20; 18; 18; 17; 16; 14; 13; 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;] 13; 13; 13; 13; 13; 13; 13; 13; 12; 12; 12; 16; 19; 28; 36; 47; 51; 46; 40; 32; 24; 20; 18; 16; 16; 16; 16; 15; 16; 16; 16; 17; 17; 17; 18; 17; 17; 18; 18; 18; 18; 19; 18; 18; 19; 20; 20; 20; 20; 20; 21; 21; 22; 22; 23; 25; 26; 27; 29; 29; 30; 31; 32; 33; 33; 33; 34; 35; 35; 35; 0; 0; 0; 0;]
Ich möchte zum Beispiel erkennen
P-Welle in [19 - 37]
QRS-Komplex in [51 - 64]
usw...
Antworten:
Das erste, was ich tun würde, ist zu sehen, was schon da draußen ist . In der Tat wurde dieses spezifische Problem bereits intensiv untersucht. Hier ist eine kurze Übersicht über einige wirklich einfache Methoden: Link .
Ich muss auch auf eine andere Antwort antworten. Ich forsche in der Signalverarbeitung und beim Abrufen von Musikinformationen. Oberflächlich betrachtet ähnelt dieses Problem der Erkennung des Beginns, aber der Problemkontext ist nicht der gleiche. Diese Art der biologischen Signalverarbeitung, dh die Erfassung der P-, QRS- und T-Phasen, kann das Wissen über spezifische Zeitbereichseigenschaften jeder dieser Wellenformen nutzen. Onset-Erkennung in MIR nicht wirklich. (Zumindest nicht zuverlässig.)
Ein Ansatz, der für die QRS-Erkennung gut geeignet wäre (aber nicht unbedingt für die Erkennung des Einsetzens von Noten), ist die dynamische Zeitverzerrung. Wenn die Zeitbereichseigenschaften unveränderlich bleiben, kann DTW bemerkenswert gut funktionieren. Hier ist ein kurzes IEEE-Papier, das DTW für dieses Problem verwendet: link .
Dies ist ein schöner Artikel im IEEE-Magazin, der viele Methoden vergleicht: link . Sie werden sehen, dass viele gängige Signalverarbeitungsmodelle ausprobiert wurden. Überfliegen Sie das Papier und probieren Sie eines aus, das Sie auf einer grundlegenden Ebene verstehen.
BEARBEITEN: Nach dem Durchsuchen dieser Artikel erscheint mir ein Wavelet-basierter Ansatz am intuitivsten. DTW wird auch gut funktionieren, und es gibt DTW-Module, aber der Wavelet-Ansatz scheint mir am besten zu sein. Jemand anderes antwortete, indem er Ableitungen des Signals ausnutzte. Mein erster Link untersucht Methoden aus der Zeit vor 1990, die dies tun, aber ich vermute, dass sie nicht so robust sind wie modernere Methoden.
EDIT: Ich werde versuchen, eine einfache Lösung zu finden, wenn ich die Gelegenheit dazu bekomme, aber der Grund, warum ich denke, dass Wavelets hier geeignet sind, liegt darin, dass sie nützlich sind, um eine Vielzahl von Formen unabhängig von Zeit- oder Amplitudenskalierung zu parametrisieren . Mit anderen Worten, wenn Sie ein Signal mit derselben wiederholten zeitlichen Form, aber mit unterschiedlichen Zeitskalen und Amplituden haben, kann die Wavelet-Analyse diese Formen immer noch als ähnlich erkennen (grob gesagt). Beachten Sie auch, dass ich Filterbänke in diese Kategorie einreihe. Ähnliche Dinge.
quelle
Ein Teil dieses Puzzles ist die " Onset Detection ", und eine Reihe komplexer Algorithmen wurden geschrieben, um dieses Problem zu lösen. Hier finden Sie weitere Informationen zu Einsätzen .
Das nächste Stück ist eine Hamming Distance . Mit diesen Algorithmen können Sie Fuzzy-Vergleiche durchführen. Die Eingabe besteht aus 2 Arrays und die Ausgabe ist eine ganzzahlige "Entfernung" oder Differenz zwischen den beiden Datensätzen. Je kleiner die Zahl, desto ähnlicher sind die 2. Dies ist sehr nah an dem, was Sie brauchen, aber es ist nicht genau. Ich habe einige Änderungen am Hamming-Distanz-Algorithmus vorgenommen, um eine neue Distanz zu berechnen. Er hat wahrscheinlich einen Namen, aber ich weiß nicht, was er ist. Grundsätzlich addiert es den absoluten Abstand zwischen jedem Element im Array und gibt die Summe zurück. Hier ist der Code dafür in Python.
Dieses Skript gibt 2 aus, dh den Abstand zwischen diesen beiden Arrays.
Nun zum Zusammenstellen dieser Teile. Sie können die Onset-Erkennung verwenden, um den Anfang aller Wellen im Datensatz zu finden. Sie können dann diese Position durchlaufen, indem Sie jede Welle mit einer Beispiel-P-Welle vergleichen. Wenn Sie einen QRS-Komplex treffen, ist die Entfernung am größten. Wenn Sie eine andere P-Welle treffen, wird die Zahl nicht Null sein, aber sie wird viel kleiner sein. Der Abstand zwischen einer P-Welle und einer T-Welle wird ziemlich klein sein. Dies ist jedoch kein Problem, wenn Sie die folgende Annahme treffen:
The distance between any p-wave and any other p-wave will be smaller than the distance between any p-wave and any t-wave.
Die Serie sieht ungefähr so aus: pQtpQtpQt ... Die p-Welle und die t-Welle liegen direkt nebeneinander, aber da diese Sequenz vorhersehbar ist, ist sie leichter zu lesen.
Auf der anderen Seite gibt es wahrscheinlich keine kalkülbasierte Lösung für dieses Problem. In meinen Augen machen Kurvenanpassung und Integrale dieses Problem jedoch eher zu einem Chaos. Die Distanzfunktion, die ich geschrieben habe, findet die Flächendifferenz, die sehr ähnlich ist, indem das Integral beider Kurven subtrahiert wird.
Es ist möglicherweise möglich, die Onset-Berechnungen zugunsten einer Iteration um jeweils 1 Punkt zu opfern und somit O (n) -Distanzberechnungen durchzuführen, wobei n die Anzahl der Punkte in der Grafik ist. Wenn Sie eine Liste all dieser Entfernungsberechnungen hätten und dort wüssten, wo 50 pQt-Sequenzen sind, dann würden Sie die 50 kürzesten Entfernungen kennen, die sich nicht überlappen, wo alle Orte der p-Wellen liegen. Bingo! Wie ist das der Einfachheit halber? Der Kompromiss ist jedoch ein Effizienzverlust aufgrund einer erhöhten Anzahl von Entfernungsberechnungen.
quelle
Sie können Kreuzkorrelation verwenden . Nehmen Sie von jedem Muster eine Modellprobe und korrelieren Sie sie mit dem Signal. Sie erhalten Peaks, bei denen die Korrelation hoch ist. Ich würde gute Ergebnisse mit dieser Technik erwarten, die qrs- und t-Wellen extrahiert. Danach können Sie p-Wellen extrahieren, indem Sie nach Spitzen auf dem Korrelationssignal suchen, die vor qrs liegen.
Kreuzkorrelation ist ein ziemlich einfach zu implementierender Algorithmus. Grundsätzlich:
Und suchen Sie nach Peaks in r (z. B. Werte über einem Schwellenwert).
quelle
Das erste, was ich tun würde, ist die Daten zu vereinfachen.
Anstatt absolute Daten zu analysieren, analysieren Sie das Ausmaß der Änderung von einem Datenpunkt zum nächsten.
Hier ist ein schneller Einzeiler, der
;
getrennte Daten als Eingabe verwendet und das Delta dieser Daten ausgibt.Wenn Sie es mit den von Ihnen angegebenen Daten ausführen, ist dies die Ausgabe:
In den obigen Text sind neue Zeilen eingefügt, die ursprünglich nicht in der Ausgabe vorhanden waren.
Nachdem Sie dies getan haben, ist es trivial, den qrs-Komplex zu finden.
Die
20
und-35
Datenpunkte ergeben sich aus den Originaldaten, die mit beginnen und enden0
.Um die anderen Datenpunkte zu finden, müssen Sie sich auf den Mustervergleich verlassen.
Wenn Sie sich die erste p-Welle ansehen, sehen Sie deutlich ein Muster.
Es ist jedoch nicht so einfach, das Muster auf der zweiten p-Welle zu erkennen. Dies liegt daran, dass der zweite weiter verteilt ist
Die dritte p-Welle ist etwas unregelmäßiger als die beiden anderen.
Sie würden die t-Wellen auf ähnliche Weise wie die p-Wellen finden. Der Hauptunterschied besteht darin, wann sie auftreten.
Dies sollten genügend Informationen sein, um Ihnen den Einstieg zu erleichtern.
Die beiden Einzeiler sind zum Beispiel nur nicht für den täglichen Gebrauch zu empfehlen.
quelle
Sind diese beiden anderen scharfen Gipfel und Täler ebenfalls qrs-Komplexe?
Ich denke, Sie müssen die Steigung dieses Diagramms an jedem Punkt berechnen. Dann müssen Sie auch sehen, wie schnell sich die Steigung ändert (2. Ableitung ???). Wenn Sie eine abrupte Veränderung haben, wissen Sie, dass Sie einen scharfen Höhepunkt erreicht haben. Natürlich möchten Sie die Erkennung der Änderung einschränken, also möchten Sie möglicherweise etwas tun wie "Wenn sich die Steigung über das Zeitintervall T um X ändert", damit Sie die winzigen Unebenheiten im Diagramm nicht erkennen.
Es ist schon eine Weile her, dass ich Mathe gemacht habe ... und das scheint eine Mathe-Frage zu sein;) Oh, und ich habe auch keine Signalanalyse gemacht :).
Fügen Sie einfach einen weiteren Punkt hinzu. Sie können auch versuchen, das Signal zu mitteln, denke ich. Beispiel: Mittelung der letzten 3 oder 4 Datenpunkte. Ich denke, so kann man auch abrupte Veränderungen erkennen.
quelle
Ich bin kein Experte für dieses spezielle Problem, aber aus allgemeinerem Wissen heraus: Nehmen wir an, Sie kennen den QRS-Komplex (oder eine der anderen Funktionen, aber ich werde den QRS-Komplex für dieses Beispiel verwenden). findet in ungefähr einem festgelegten Zeitraum der Länge L statt. Ich frage mich, ob Sie dies wie folgt als Klassifizierungsproblem behandeln könnten:
quelle
Ein Ansatz, der sehr wahrscheinlich gute Ergebnisse liefert, ist die Kurvenanpassung:
Definieren Sie eine Modellfunktion, mit der alle möglichen Variationen von Elektrokardiographiekurven angenähert werden können. Dies ist nicht so schwierig, wie es zunächst scheint. Die Modellfunktion kann als Summe von drei Funktionen mit Parametern für den Ursprung (t_), die Amplitude (a_) und die Breite (w_) jeder Welle konstruiert werden.
Die Funktionen
f_p(t)
,f_qrs(t)
,f_t(t)
sind einige einfache Funktion , die Anwendungen jeder der drei Wellen zu modellieren sein kann.Verwenden Sie einen Anpassungsalgorithmus (z. B. den Levenberg-Marquardt-Algorithmus http://en.wikipedia.org/wiki/Levenberg%E2%80%93Marquardt_algorithm ), um die Anpassungsparameter a_p, t_p, w_p, a_qrs, t_qrs, w_qrs, a_t zu bestimmen , t_t, w_t für den Datensatz jedes Intervalls.
Die Parameter t_p, t_qrs und t_p sind diejenigen, die Sie interessieren.
quelle
Das ist eine wunderbare Frage! Ich habe ein paar Gedanken:
Dynamisches Time Warping könnte hier ein interessantes Werkzeug sein. Sie würden "Vorlagen" für Ihre drei Klassen erstellen und dann mithilfe von DTW die Korrelation zwischen Ihrer Vorlage und "Blöcken" des Signals erkennen (das Signal in beispielsweise 0,5-Sekunden-Bits aufteilen, dh 0 bis 0,5. 1-.6 .2-.7 ...). Ich habe mit etwas Ähnlichem für die Ganganalyse mit Beschleunigungsmesserdaten gearbeitet, es hat ziemlich gut funktioniert.
Eine weitere Option ist ein kombinierter Signalverarbeitungs- / maschinelles Lernalgorithmus. Brechen Sie Ihr Signal wieder in "Stücke". Machen Sie wieder "Vorlagen" (Sie wollen ein Dutzend oder so für jede Klasse) nehmen Sie die FFT jedes Blocks / jeder Vorlage und verwenden Sie dann einen Naiven Bayes-Klassifizierer (oder einen anderen ML-Klassifizierer, aber NB sollte ihn ausschneiden), um für jede zu klassifizieren deine drei Klassen. Ich habe dies auch bei Gangdaten versucht und konnte mit relativ komplizierten Signalen eine Genauigkeit von über 98% erreichen und abrufen. Lassen Sie mich wissen, wie das funktioniert, es ist ein sehr aufregendes Problem.
quelle
"" Wavelet-Transformation " kann ein relevantes Schlüsselwort sein. Ich habe einmal an einer Präsentation von jemandem teilgenommen, der diese Technik verwendet hat, um verschiedene Herzschlagphasen in einem lauten EKG zu erkennen.
Nach meinem begrenzten Verständnis ähnelt es einer Fourier-Transformation, verwendet jedoch (skalierte) Kopien eines, in Ihrem Fall herzschlagförmigen, Pulses.
quelle
Es hat sich gezeigt, dass Wavelets das beste Werkzeug zum Lokalisieren von Peaks in dieser Art von Daten sind, bei denen die Peaks "unterschiedliche Größen" haben. Die Skalierungseigenschaften von Wavelets machen sie zu einem idealen Werkzeug für diese Art der mehrskaligen Peakerkennung. Dies sieht aus wie ein instationäres Signal, daher wäre die Verwendung einer DFT nicht das richtige Werkzeug, wie einige vorgeschlagen haben. Wenn es sich jedoch um ein Erkundungsprojekt handelt, können Sie das Spektrum des Signals verwenden (geschätzt im Wesentlichen anhand der FFT der Autokorrelation von das Signal.)
Hier ist ein großartiges Papier, in dem verschiedene Methoden zur Peakerkennung besprochen werden - dies wäre ein guter Anfang.
-Paul
quelle
mit BioSPPY
Eine T-Wellen-Analyse ist derzeit nicht möglich, da sie derzeit nur eine R-Wellen-Analyse enthält. zB Tstart Tpeak Tend
werden nicht automatisch implementiert
man müsste seine eigene Analyse verwenden.
Mein Vorschlag wäre, die folgende Methode zu implementieren
http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3201026/
Das ist eine, die ich kürzlich entdeckt und als sehr interessant empfunden habe
Die andere T-Wellen-Analysemethode, die es wert ist, betrachtet zu werden, ist die des ECGlib-Teams
http://ieeexplore.ieee.org/document/6713536/
hoffe das hilft
quelle
Ich habe die Antwort des anderen nicht gründlich gelesen, aber ich habe sie gescannt und festgestellt, dass niemand empfohlen hat, die Fourier-Transformation zu betrachten, um diese Wellen zu segmentieren.
Für mich scheint es eine klare Anwendung der harmonischen Analyse in der Mathematik zu sein. Es kann einige subtile Punkte geben, die mir fehlen könnten.
Das diskrete Fourier-Transformation geben Ihnen die Amplitude und Phase der verschiedenen sinusförmigen Komponenten an, aus denen Ihr diskretes Zeitsignal besteht. Dies ist im Wesentlichen das, was Ihr Problem angibt, das Sie finden möchten.
Möglicherweise fehlt mir hier etwas ...
quelle
Erstens können die verschiedenen Komponenten der Standard-Elektrokardiogrammwelle in einem bestimmten Diagramm fehlen. Eine solche Handlung ist im Allgemeinen abnormal und weist normalerweise auf ein Problem hin, aber Sie können nicht versprechen, dass sie vorhanden sind.
Zweitens ist das Erkennen von ihnen ebenso Kunst wie Wissenschaft, insbesondere in den Fällen, in denen etwas schief geht.
Mein Ansatz könnte darin bestehen, ein neuronales Netzwerk zu trainieren, um die Komponenten zu identifizieren. Sie würden ihm die vorherigen 30 Sekunden Daten geben, normalisiert, so dass der niedrigste Punkt bei 0 und der höchste Punkt bei 1,0 lag und es 11 Ausgänge geben würde. Die Ausgaben, bei denen es sich nicht um Abnormalitätsbewertungen handelte, wurden in den letzten 10 Sekunden gewichtet. Eine 0,0 wäre -10 Sekunden von der Gegenwart entfernt, und eine 1,0 würde jetzt bedeuten. Die Ausgaben wären:
Ich könnte dies mit einigen der anderen vorgeschlagenen Analysetypen überprüfen oder diese anderen Analysetypen zusammen mit der Ausgabe des neuronalen Netzwerks verwenden, um Ihnen Ihre Antwort zu geben.
Natürlich sollte diese detaillierte Beschreibung des neuronalen Netzwerks nicht als vorschreibend angesehen werden. Ich bin mir sicher, dass ich nicht unbedingt die optimalsten Ergebnisse ausgewählt habe. Ich habe nur ein paar Ideen darüber geworfen, was sie sein könnten.
quelle