Ich habe einige Mikroskopiedaten, die durch ein Herzschlagartefakt kontaminiert sind, das ich entfernen möchte. Die Daten bestehen aus einer großen Zeitreihe von Bildern, die mit ~ 60 Hz aufgenommen wurden.
Hier ist ein kleiner Beispielclip in GIF-Form:
Ich habe die durchschnittliche Pixelintensität über die Zeit genommen und das Periodogramm nach der Methode von Welch berechnet:
Wie Sie sehen können, gibt es bei ~ 1,8 Hz einen scharfen Peak, der wahrscheinlich der Herzfrequenz entspricht (~ 108 Schläge / min). Es gibt auch eine Reihe von harmonischen Spitzen bei ganzzahligen Vielfachen von 1,8 Hz. Die genaue Herzfrequenz variiert wahrscheinlich von Datensatz zu Datensatz, aber ich kann einen biologisch plausiblen Bereich angeben, der durch den schattierten Bereich im Periodogramm angezeigt wird.
Was ich tun möchte, ist:
- Ermittelt automatisch die Grundfrequenz, die dem Herzschlag entspricht, und alle seine Harmonischen
- Filtern Sie die Daten, um die Grundwelle und alle Harmonischen zu entfernen.
Im Moment kann ich Punkt 1 sehr grob lösen, indem ich den größten Peak im Periodogramm finde und ihn dann mit multipliziere wo ist die geschätzte Anzahl harmonischer Peaks, aber ich bin sicher, dass es eine bessere Methode als diesen Hack geben muss.
In Bezug auf Punkt 2 bin ich auf diese Frage gestoßen, in der die Verwendung eines Kammfilters zum Entfernen einer Grundwelle und aller ihrer Harmonischen erwähnt wird. Ist dies die beste Methode? Eine wichtige Überlegung ist, dass ich den Filter auf jede Pixel-Zeitreihe in einem großen Array anwenden muss, so dass eine rechnerisch effiziente Methode sehr wünschenswert wäre.
Beispieldaten
quelle
Antworten:
Ihre Methode ist für einen ersten Versuch nicht so schlecht.
Die folgende Methode funktioniert jedoch tendenziell besser:
Der Hauptgrund dafür, dass dies besser funktioniert, ist Schritt 4. Jede falsche Hypothese für eine Grundfrequenz wird schrecklich scheitern, wenn Sie versuchen, Spitzen um den Ort der vorhergesagten Harmonischen anzupassen. Angenommen, Sie haben eine Spitze bei 2 Hz. Dies kann die Grundfrequenz oder eine erste Harmonische sein. Wenn Sie die "Hypothese der ersten Harmonischen" testen, dh ob die Grundfrequenz tatsächlich 1 Hz beträgt, passen Sie Parabeln an die Daten um 1,2,3,4,5 ... Hz an. Wenn diese Hypothese falsch ist, erhalten Sie Müll um 1,3,5 Hz. Wenn es richtig ist, finden Sie möglicherweise Spitzen in der Nähe von 1,1 Hz, 2,2, 3,3, 4,4 und 5,6 - was darauf hindeutet, dass die tatsächliche Grundfrequenz 1,12 Hz beträgt.
quelle
Sie suchen nach iterativer spektraler Subtraktion . Hier einige allgemeine Informationen aus einem Buch zur Inhaltsanalyse von Alexander Lerch.
quelle
Ich würde eine Autokorrelation für Ihr Periodogramm empfehlen. Sie können Kerb- oder negative Peaking-Filter basierend auf Vielfachen der Grundfrequenz konstruieren, die die Korrelation ergibt.
Dieser Code hat mir geholfen, ein gutes Autokorrelationsdiagramm zu erstellen (Cepstrum ist eine weitere gute Methode, wenn die Harmonischen mehr Leistung als die Grundwelle haben). Http://note.sonots.com/SciSoftware/Pitch.html
quelle
Sie können einen lokalen Durchschnitt über die DFT nehmen, um die Herzschläge zu finden. Wenn ein bestimmter Punkt in dieser Gruppe größer als
threshold
und der größte Wert in einem Bereich um ihn herum ist, ist dies ein Herzschlag oder eine Harmonische.Sie können einfach die zuvor lokalisierten Herzschlagindizes verwenden und linear darüber sticken. Wenn dir das nicht zu grob ist.
Was ist der Zweck dieses Teils der Operation? Ist dies eine medizinische Analyse, bei der kein Herzschlag erforderlich ist, um nach anderen (möglicherweise) versteckten Daten zu suchen? Oder ist das nur für die Ästhetik?
Ich stelle mir vor, dass ein Kammfilter etwas unkontrollierbar sein wird. Der Rückkopplungsparameter muss sorgfältig eingestellt werden. Es könnte lebensfähig sein.
EDIT: Sie benötigen einen Pitch-Erkennungsalgorithmus? Ich habe eines davon vor einigen Jahren geschrieben, indem ich die (fast) DC-Begriffe ignoriert und das erste lokale Maximum gefunden habe. Wenn ich dann die Bins auf beiden Seiten verwende, könnte ich eine quadratische Interpolation verwenden und den Ort der maximalen Frequenz genauer finden als die Auflösung, die die Frequenzen der Bins selbst zulassen.
Wäre es genauer, Oberschwingungen zu verwenden? Es würde wahrscheinlich nur eine Möglichkeit für Fehler hinzufügen. Sie können jedoch versuchen, mit dieser Methode einen Wert für das Fundament zu ermitteln, das Maximum bei Doppel, Dreifach usw. zu ermitteln und dann eine ähnliche Methode wie zuvor zu verwenden:
Wenn Sie gegen den quadratischen Schritt ein Veto einlegen und nur das lokale Maximum nehmen, erhalten Sie keine genaue Frequenz, und es würde helfen, die Harmonischen nach oben zu bewegen.
quelle
.gif
("klein" ist hier ein relativer Begriff!).