2016-04-11 5 views
3

Ich habe ein analoges Signal und ich möchte Kanten/'Wellenformen' erkennen. Die zu erkennenden Wellenformen sind manchmal so einfach wie im ersten Beispiel (einfache steigende Flanke), aber auch komplexer (wie eine steigende Flanke mit einem vorhergehenden kleineren "Blob"). Das Signal hat Rauschen und unerwünschte kleinere Signale, so dass ein Ausgang wie "passender Grad" von 0.0 bis 1.0 einen Schwellenwert festlegen könnte. Eine weitere Anforderung ist die Detektionszeit: Der Algorithmus muss innerhalb von 1 'Anstiegszeit' auslösen, wie der rote Klecks-Kreis im Bild. So früh wie möglich, aber nicht vor Erreichen des Maximums.Patternmatching zur Erkennung der Signalflanke?

Alles wird auf einem STM32 ARM-Controller ausgeführt, das Signal hat 100 Punkte pro Sekunde. Eine Flankenanstiegsflanke dauert 0,5 bis 2 Sekunden, so dass der Datenbereich, der betrachtet werden soll, bei 250 bis 500 Datenpunkten liegen würde.

Ich habe gelesen über Korrelation und FFTs, aber wenn ich das Thema richtig verstehe, wird dies nur für periodische Wellenformen gelten (wie die FFT wird das Signal in sin/cos Teile zerlegen).

Ist FFT und Korrelation der richtige Weg zu nehmen oder gibt es bessere Methoden für unsere Anforderung? Wenn unser Weg stimmt, gibt es empfohlene Literatur/Suchbegriffe für einen einfachen Einstieg in das Thema?

Edit: Ich habe Beispiele für echte Daten hinzugefügt. In Picture 2 können Sie eine leicht zu erkennende Kante sehen. Wir haben keine Probleme mit diesen Kanten mit einer einfachen Kantenerkennung.

In Picture 3 liegt unser Problem: Unser aktueller Algorithmus erkennt eine Flanke bei 2565s, aber wir wollen eine Erkennung bei 2574s. Der erste 'Blob' erscheint immer mit etwa 40% - 85% des Signalpegels verglichen mit der zu erkennenden Flanke.

Sample waveforms to detect

example of good data

example of bad data

+1

Ein Muss vor dieser Frage kann sinnvoll beantwortet werden: zeigen Sie echte Daten. Ich weiß aus Erfahrung, dass echte Daten * nie * wie OP-Skizzen sind. –

+1

Ich würde vorschlagen, dass Sie eine Wavelet-Paket-Transformation dazu werfen, sehen, was Sie bekommen, und versuchen, Muster in der Ausgabe zu finden. Die Unterseite von https://en.wikipedia.org/wiki/Wavelet_packet_decomposition verweist auf vorhandene Implementierungen in MATLAB, R, C++ und Java, die Sie ausprobieren können. Ich würde empfehlen zu vermeiden, zu glatt zu sein. Ein 4-Tap Daubechies Wavelet wird wahrscheinlich gut funktionieren. (Das Haar Wavelet ist zu grob - es wird nicht die steigende Kante sehr gut darstellen.) – btilly

Antwort

1

Sie sind absolut richtig, dass Fourier-Reihe sind eine schlechte Wahl, weil Sie eine Beschreibung der Daten ohne Kanten aufzuschreiben sind versuchen, und dann entdecken Kanten in dieser Beschreibung. Funktioniert nicht gut.

Ein Ansatz, den Sie machen können, ist, etwas wie Fourier-Serie zu machen, aber mit Beschreibungen, die mehr lokalisiert sind und Dinge enthalten, die wie Kanten aussehen. Google für "Wavelet Edge Detection", um mehr darüber zu erfahren. Dies ermöglicht Ihnen, eine Vielzahl von Formen aus verrauschten Daten zu extrahieren. Zum Beispiel verwenden Menschen dies, um Kanten von Bildern und Phönemen von Audioaufnahmen zu extrahieren. Wavelets sind ein großes Thema, aber Sie können möglicherweise eine Bibliothek finden, die etwas genau das tut, was Sie wollen.

Aber für ein einfaches 1-d-Problem wie dieses können Sie einfach eine Glättung anwenden, dann nach Formen von Interesse suchen. Je besser Ihre Glättung, desto mehr Rauschen können Sie tolerieren, desto schwieriger wird es, Formen zu sehen.

Zum Beispiel könnten Sie exponentielle Dämpfung für die Glättung tun. next_average = 0.9 * average + 0.1 * next_value. (Allgemeiner (1 - x) * average + x * next_value.) Dies macht jeden Punkt in etwas, das dem Durchschnitt eines sich bewegenden Fensters von ungefähr 10 Punkten sehr ähnlich sieht. Vergleichen Sie den Durchschnitt von jetzt mit 100 Punkten, und Sie werden in der Lage sein, einen Anstieg ziemlich zuverlässig zu erkennen. Etwas mehr Herumalbern und Sie könnten andere Kombinationen entdecken.

Sie müssen mit den Gleichungen und Ihren Daten herumspielen, um etwas zu finden, das gut genug für Ihre Zwecke funktioniert.

Verwandte Themen