Wie kann ich eine Grundfrequenz und alle ihre Harmonischen automatisch identifizieren und entfernen?


7

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:

gif

Ich habe die durchschnittliche Pixelintensität über die Zeit genommen und das Periodogramm nach der Methode von Welch berechnet:

Geben Sie hier die Bildbeschreibung ein

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:

  1. Ermittelt automatisch die Grundfrequenz, die dem Herzschlag entspricht, und alle seine Harmonischen
  2. 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 1,2,...,N. wo N. 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

  • Ich habe eine 1D - Zeitreihe von Beispiel Pixelmittelwert in hochgeladen .csvFormat hier .
  • In einer komprimierten: Ich habe auch eine Stichprobe von 1000 Bildern (1 räumlich dezimierten 2) hinzugefügt .matDatei hier

2
Angenommen, es handelt sich um eine Folge von Mikroskopbildern in Form eines animierten Bildes. Gibt es eine Chance, dieses Material zu sehen? Es kann eine Reihe einfacherer und genauerer Methoden geben, die auf diesem Signal basieren, wenn die Artefakte eine überdurchschnittliche räumliche Kohärenz aufweisen. Das Reduzieren auf die durchschnittlichen Pixelwerte wirft dann wertvolle Informationen weg.
Jazzmaniac

@Jazzmaniac Ich habe ein GIF hinzugefügt, das einen kleinen Clip aus einem Beispieldatensatz zeigt - es gibt definitiv eine lokale räumliche Kohärenz.
Ali_m

@Jazzmaniac Ich habe auch eine Beispiel-Frame-Sequenz hochgeladen - ich kann weitere Beispieldaten bereitstellen, wenn dies hilfreich wäre, aber die Rohstapel selbst sind viel zu groß zum Hochladen.
Ali_m

1
Möglicherweise können Sie eine (musikalische) Tonhöhenerkennungs- / Schätzmethode verwenden, um die Grundfrequenz zu schätzen.
hotpaw2

1
@Jazzmaniac Es ist wahr, dass das Herzschlag-Artefakt für das menschliche Auge subtil ist, aber es interessiert mich nicht so sehr, wie die Frames aussehen - ich bin an viel subtileren lokalen Intensitätsänderungen interessiert, für die der Herzschlag ein Problem darstellt. Die hochfrequente Schwingung, die zu Streifenbildung in Einzelbildern führt, ist ein anderes Problem bei den Aufnahmegeräten, mit denen ich mich separat befassen wollte.
Ali_m

Antworten:


1

Ihre Methode ist für einen ersten Versuch nicht so schlecht.

Die folgende Methode funktioniert jedoch tendenziell besser:

  1. Suche nach lokalen Maxima
  2. Überprüfen Sie, ob Maxima nahe beieinander liegen (Abstand 2 oder 3 Behälter), und führen Sie sie zusammen
  3. Erstellen Sie einige Hypothesen über die Grundfrequenz. Sie gehen derzeit davon aus, dass der höchste Peak die Grundfrequenz ist, was eine Hypothese ist. Sie sollten auch prüfen, ob der höchste Peak die erste Harmonische ist, dh, dass es einen kleineren Peak bei der halben Frequenz des Hauptpeaks gibt. Möglicherweise müssen Sie auch andere Fälle berücksichtigen, indem Sie Ihr Wissen über das vorliegende Problem nutzen (Interferenz? Unregelmäßiger Herzschlag?).
  4. Unter der Annahme jeder dieser Hypothesen finden Sie die Grundfrequenz, indem Sie die Parabel an jeden harmonischen Peak anpassen . Jeder Peak erzeugt aufgrund des Rauschens eine leicht unterschiedliche Schätzung, aber diese Fehler sind nicht korreliert und werden gemittelt. Eine der Hypothesen führt zu viel besseren Anpassungen. Wählen Sie die von dieser Hypothese vorhergesagte Grundfrequenz.
  5. Passen Sie die Parabel um jeden Peak herum an, um die Höhe des Peaks abzuschätzen. Verwenden Sie dabei die in Schritt 4 angegebene Grundfrequenz. Beachten Sie, dass die Spitzen wahrscheinlich zwischen zwei Behältern liegen.
  6. Sie haben jetzt den Ort und die Stärke der Grundwelle und ihrer Harmonischen, aber nicht die Phase. Es ist wahrscheinlich am einfachsten, die Phase der Grundwelle zu finden, diese zu subtrahieren, die Phase der ersten Harmonischen zu finden usw.

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.



0

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


-1
1. Automatically detect the fundamental frequency corresponding to the heartbeat, and all of its harmonics

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 thresholdund der größte Wert in einem Bereich um ihn herum ist, ist dies ein Herzschlag oder eine Harmonische.

2. Filter the data so as to remove the fundamental and all harmonics.

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:

  1. Finden Sie das lokale Maximum 2. Quadratische Interpolation, um den Inter-Bin-Wert für die Frequenz zu finden.

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.


Der erste Teil klingt mehr oder weniger nach dem Ansatz, den ich in meiner Frage vorgeschlagen habe, außer dass Ihre vorgeschlagene Methode die Tatsache nicht berücksichtigt, dass harmonische Frequenzen regelmäßig beabstandet sein sollten. Ich verstehe nicht wirklich, was Sie unter "Verwenden Sie die zuvor lokalisierten Herzschlagindizes und nähen Sie sie linear" verstehen - könnten Sie das näher erläutern? Der Filterungsschritt ist erforderlich, um subtile lokale Intensitätsänderungen über die Zeit zu analysieren, und nicht aus ästhetischen Gründen. Ich habe einen etwas kleineren hochgeladen .gif("klein" ist hier ein relativer Begriff!).
Ali_m

1. Kammfilter sind per Definition: regelmäßig beabstandet. 2. Das Problem ist, dass das adaptive Herausfiltern der Herzschläge mit einem Kammfilter der Grundfrequenz von Hand gewellt wird und das Ergebnis von Hand gewellt wird. Ich glaube also nicht, dass Sie sich an diesen Stellen wirklich zu sehr auf die Daten verlassen können. 3. Können Sie verschiedene Teile des Bildes verwenden und subtrahieren, um den Herzschlag destruktiv aufzuheben, aber die interessierenden Daten beizubehalten?
Andrew Gallasch

1. Mein Punkt war, dass die Positionen der harmonischen Spitzen Informationen enthalten sollten, die zur genaueren Identifizierung der Grundfrequenz verwendet werden könnten. 2. Was genau meinst du mit "handgewellt"? 3. Daran hatte ich nicht gedacht. Mir fällt nichts Offensichtliches ein, aber ich werde noch etwas darüber nachdenken, ob dies möglich wäre.
Ali_m

1. Siehe Bearbeiten. 2. vage und keine robuste oder besonders nützliche Lösung. 3. Weitere Informationen zu Ihren Anforderungen können hilfreich sein. Entschuldigung, Ihre Frage war ein bisschen zweiteilig und ich glaube, ich ging davon aus, dass der einzige Teil, mit dem Sie Probleme hatten, der Endteil war. Entfernen des Herzschlags.
Andrew Gallasch
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.