Ich suche nach einer umfassenden Klassifizierung der verfügbaren Techniken. Etwas, mit dem ich eine Literaturübersicht beginnen kann.
Ein paar Details:
sollte für die Echtzeitimplementierung machbar sein.
Binäre Entscheidung, ich sollte in der Lage sein, das Signal kontinuierlich einzugeben, und der Algo muss die Start- und Stoppzeiten der Sinuskurve in der Wellenform erfassen.
Es gibt kein anderes Signal, dh wenn die Sinuskurve nicht vorhanden ist, tritt nur Rauschen auf
Der Eingang ist bandbegrenzt, und es wird sichergestellt, dass sich die Sinuskurve, falls vorhanden, innerhalb dieses Bandes befindet.
Kompromisse bestehen zwischen Geschwindigkeit (wie schnell nach dem Auftreten der Sinuskurve kann das Algo seine Anwesenheit erkennen) und falsch positiven Ergebnissen (sollte minimal sein)
- Ich kann keine genauen Zahlen zu akzeptablen Leistungsmaßstäben angeben, da ich mir selbst nicht sicher bin. Ich beabsichtige, alle Ihre Vorschläge für meine Anwendung umzusetzen und mich selbst herauszufinden. Ich suche nur nach den "Standard" -Techniken, um dieses Problem anzugehen.
Weitere Details:
Der Eingang ist der Ausgang eines Bandpassfilters, daher ist das Rauschen auch nur im Passband signifikant.
Es gibt keine Sicherheit, wann die Sinuskurve auftreten kann. Die Dauer der Sinuskurve liegt im Bereich von 50-100 ms. Die Amplituden der Sinuskurve schwanken.
Antworten:
Abhängig von der Häufigkeit der Abtastung funktioniert eine FFT (Fast Fourier Transform). Wenn Ihre Abtastrate beispielsweise nur einmal alle 20 ms beträgt, erhalten Sie nur wenige Abtastungen der Sinuskurve. Wenn Sie jedoch alle 0,5 ms abtasten, erhalten Sie viel mehr Abtastwerte. FFTs funktionieren normalerweise am besten mit einer großen Anzahl von Stichproben, über die gemittelt werden kann. Selbst wenn Ihr Signal die Summe einiger Sinuskurven ist, können sie in diesem Fall genau bestimmt werden.
Alternativ können Sie sich auch den MUSIC- Algorithmus ansehen . Ich bin mir nicht sicher, wie es implementiert wird, aber es wurde in mehreren Echtzeit-Erkennungsszenarien implementiert. Eine Alternative zu MUSIC ist der Esprit- Algorithmus.
Wenn Ihre Stichprobengröße jedoch groß genug ist und das Rauschen das Signal nicht vollständig überschwemmt, ist eine FFT (im Durchschnitt) die schnellste Option.
quelle
Eine Möglichkeit, eine Sinuskurve zu erkennen, ist die Verwendung des Goertzel-Algorithmus . Rick Lyons gibt hier einen schönen Überblick darüber, wie man es zur Erkennung verwendet .
Dieser zweite Link enthält diese Gleichung zum Filtern Ihres eingehenden Signals und zum Berechnen der "Entscheidungsstatistik":
quelle
Alles hängt vom SNR ab. Je niedriger das SNR, desto mehr Verarbeitung müssen Sie durchführen, um das Signal vom Rauschen zu trennen. Ich habe in der Vergangenheit ein ähnliches Problem gelöst, bei dem ich nach einem intermittierenden sinusförmigen Signal mit niedrigem SNR über einen ziemlich breiten Frequenzbereich gesucht habe. Das hat bei mir funktioniert:
Wie andere empfohlen haben, habe ich mit dem MUSIC-Algorithmus experimentiert, um das Signal vom Rauschen zu trennen. Für mein Problem war es etwas besser, Kandidatensignale mit niedrigem SNR zu finden als die FFT, aber da der Rechenaufwand so viel höher war (und mein Algorithmus auf einem schwachen Festpunkt-DSP lief), entschied ich mich, ihn nicht zu verwenden. Es war einfacher, die Erkennungsschwelle mit der FFT niedriger einzustellen, mehr Störspitzen zu erkennen und diese in der angepassten Filterstufe zu eliminieren. Die Erkennung eines niedrigen SNR kann etwas dunkel sein, aber wenn Sie genug über Ihr System wissen, können Sie Signale mit einer niedrigeren Amplitude als Umgebungsgeräuschpegel zuverlässig erkennen. Es hängt alles davon ab, welche Informationen Sie über Ihr System wissen, die Sie nutzen können.
quelle
Ich würde Folgendes vorschlagen:
1. Organisieren Sie ein Schiebefenster, das breit genug ist, um das gesamte Band des Signals aufzunehmen (mindestens mehrere Perioden des Signals mit der niedrigsten Frequenz).
2. Führen Sie eine FFT von Abtastwerten durch, die sich derzeit in einem Fenster befinden ein Leistungsspektrum daraus.
3. Schneiden Sie das Spektrum mit den bekannten Bandgrenzen zu.
4. Sortieren Sie die verbleibenden Leistungsspektrumwerte in absteigender Reihenfolge. Da das Rauschen Gauß'sch ist, wäre das Rauschspektrum innerhalb des Bandes durchschnittlich flach, und wenn der monotonische Piepton im Fenster vorhanden wäre, würde es die Spitze (n) erzeugen.
5. Identifizieren Sie die typische Spike-Bandbreite. Nehmen Sie die Proben mit der höchsten Amplitude aus einem abgeschnittenen Leistungsspektrum und erhalten Sie einen Durchschnitt. Das wäre die potentielle "Piepton" -Energie.
6. Erhalten Sie auch einen Durchschnitt der verbleibenden Bandabtastwerte, dh die Rauschenergie.
7. Berechnen Sie ein Verhältnis der in (5) und (6) erhaltenen Energien. Wenn das Verhältnis den angegebenen Schwellenwert überschreitet, setzen Sie das Flag, das angibt, dass der Piepton gefunden wurde. Wenn nicht, setzen Sie das Flag, dass derzeit kein Piepton zu hören ist.
8. Schieben Sie das Fenster zum nächsten Bild (entweder Sample für Sample oder in einem größeren Schritt).
quelle
Dies ist ein Statistikproblem. Wenn Sie das Rauschen charakterisieren können, können Sie nach bestimmten Merkmalen Ihres interessierenden Signals suchen, deren Wahrscheinlichkeit unter einer gewissen Wahrscheinlichkeit (Ihrer erforderlichen falsch positiven Fehlerrate) liegt, nur zufällig im Rauschen zu erscheinen.
Wenn Sie die Mindestdauer Ihrer interessierenden Sinuskurve kennen (z. B. 50 mS), können Sie überlappende FFT-Schiebefenster über die Dauer dieser Dauer versuchen und nach Spektralspitzen oberhalb eines Schwellenwerts suchen, der durch Charakterisierung des Rauschens berechnet wird. Wenn derselbe Peak über dem Grundrauschen in mehreren aufeinanderfolgenden FFT-Fenstern auftritt, ist die Länge der Sinuskurve möglicherweise länger, abhängig von der Länge und Überlappung Ihres FFT-Rahmens.
quelle