Was sind einige Methoden zum Erkennen einer Sinuskurve im Rauschen?

7

Ich suche nach einer umfassenden Klassifizierung der verfügbaren Techniken. Etwas, mit dem ich eine Literaturübersicht beginnen kann.

Ein paar Details:

  1. sollte für die Echtzeitimplementierung machbar sein.

  2. 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.

  3. Es gibt kein anderes Signal, dh wenn die Sinuskurve nicht vorhanden ist, tritt nur Rauschen auf

  4. Der Eingang ist bandbegrenzt, und es wird sichergestellt, dass sich die Sinuskurve, falls vorhanden, innerhalb dieses Bandes befindet.

  5. Kompromisse bestehen zwischen Geschwindigkeit (wie schnell nach dem Auftreten der Sinuskurve kann das Algo seine Anwesenheit erkennen) und falsch positiven Ergebnissen (sollte minimal sein)

  6. 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:

  1. Der Eingang ist der Ausgang eines Bandpassfilters, daher ist das Rauschen auch nur im Passband signifikant.

  2. 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.

Ankit
quelle
1
Wahrscheinlich würde ein Fourier-Analysator mit Schiebefenster (oder zu Fuß) die Arbeit erledigen. Es sind noch einige Details erforderlich: Ist das Rauschen auch bandbegrenzt? Gibt es eine garantierte Abstimmzeit, wenn nur Rauschen im Eingang vorhanden ist? Sind Rauschen und Sinusamplitude über die Zeit stabil?
Mbaitoff
Soweit ich verstanden habe, werden Sie über einen lauten Kanal Pieptöne erkennen. Sie sollten dann einen Amplituden- (Energie-) Schwellenwert angeben, der einen Piepton unter dem Rauschen erkennen lässt. Sie erwähnen auch die Bandgrenze des Pieptons. Bedeutet das, dass ein Piepton-Spektrum breitbandig ist oder dass ein Piepton-Spektrum schmal ist, aber irgendwo innerhalb des Bandes. Sie sollten auch angeben, wie ein Piepton wahrgenommen wird - ist er wie ein schneller oder langsam steigender / fallender Ton, wird er von einem Ein- / Ausschaltklick begleitet und wie kurz / lang können sie relativ zum Scanfenster sein?
Mbaitoff
Vielen Dank! Das gibt VIEL mehr Informationen über das Problem.
Peter K.
Wissen Sie etwas über die Verteilung des Geräusches? Wie genau kennen Sie die Frequenz der Sinuskurve a priori (wenn überhaupt)?
Jason R
@ Jason R das Rauschen ist Gauß. Die Frequenz der Sinuskurve ist nicht bekannt. Es wird nur garantiert, dass es im Bereich von 80-250 Hz liegt. Verschiedene "Pieptöne" haben dieselbe Mittenfrequenz, die Amplituden können jedoch variieren.
Ankit

Antworten:

2

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.

Kitchi
quelle
2
Verkürzte MUSIC-Implementierung: wobei und . ist eine NxP-Matrix, wobei die Spalten die Eigenvektoren sind, die den P kleinsten Eigenwerten der Autokorrelationsmatrix . Das Bestimmen, was P sein sollte, ist nicht trivial und wird von Wax und Kailath (1985) abgedeckt, obwohl Sie manchmal eine "Augapfel" -Schätzung durchführen können, um Signaleigenwerte gegenüber Rauscheigenwerten zu bestimmen. PMUSIC(ω)=1eHPnePn=EnEnHeH=[0,ejω,...,e(N1)ω]EnRxx
Dave C
2

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":

Geben Sie hier die Bildbeschreibung ein

Peter K.
quelle
Der Goertzel-Algorithmus scheint ein Monofrequenz-Resonanzdetektor zu sein. Wie funktioniert dies für Breitbandtöne in der Originalplakataufgabe?
Mbaitoff
Das OP scheint "bandbegrenzt" und nicht "breitbandig" zu wollen. Wenn Sie die Goertzel-Länge gut wählen, sollte sie mit "bandbegrenzten" Sinuskurven umgehen können. Ich stimme zu, dass es einen Kompromiss gibt: Eine Sinuskurve genau auf der Goertzel-Mittenfrequenz liefert einen höheren Messwert als eine gleiche Amplitude bei einer anderen Frequenz. Die meisten FFT-basierten Ansätze haben das gleiche Problem. Sie können jederzeit zwei oder drei Goertzel-Detektoren mit unterschiedlichen Mittenfrequenzen betreiben, wenn dies ein Problem darstellt.
Peter K.
@PeterK, warum sollte man nicht einfach eine Familie komplexer DFT-Töne zum Downmischen verwenden? (Mit anderen Worten, welchen Vorteil hat die GA gegenüber der früheren Technik?) Interessante Antwort übrigens.
Spacey
@Mohammad: Eine Familie komplexer DFT-Töne ist genau das, was der Goertzel-Algorithmus implementiert (wenn Sie mehrere Goertzel-Filter mit Frequenzversatz implementieren).
Peter K.
1
Die Familie der Goertzel-Algorithmen kann einfach als rechnerische Fusion eines komplexen Exponential- / Sinuswellengenerators plus eines Vektorpunktprodukts betrachtet werden, die mit der Ermittlung der Größe eines komplexen Downmix mit demselben Triggerfunktionsgenerator identisch ist (außer möglicherweise hinsichtlich numerischer Stabilität und Dynamik) Reichweitenprobleme).
hotpaw2
2

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:

  1. Führen Sie eine Offline-Charakterisierung des Rauschens Ihres Systems (im Frequenzbereich) durch. Wenn sich der Umgebungsgeräuschpegel im Laufe der Zeit ändert, aktualisieren Sie diesen Geräuschpegel regelmäßig online, wenn der Algorithmus ein hohes Vertrauen hat, dass das interessierende Signal nicht vorhanden ist. Wenn das Geräusch nicht sehr stationär ist, hilft dies möglicherweise nicht viel (und kann weh tun).
  2. Führen Sie eine verschiebbare FFT in diskreten Zeitfenstern durch. Suchen Sie nach Frequenzen mit Energien, die einen Schwellenwert über dem Hintergrundrauschen liegen. Holen Sie sich eine Liste der Kandidaten-Peaks, die das Signal von Interesse sein könnten. Ich entschied mich dafür, einen zirkulären Datenpuffer mit Abtastwerten aus früheren Zeitfenstern zu behalten, damit die FFT eine bessere Frequenzauflösung hatte.
  3. Erstellen Sie sinusförmig angepasste Filter für die in der FFT identifizierten Spitzenfrequenzen. Suchen Sie nach Antworten über einem bestimmten Schwellenwert. Der Übereinstimmungsfilter (auch bekannt als Autokorrelationsfunktion) kann Rauschen sehr gut dämpfen, und in meinem System war es ziemlich gut, Erkennungen aus scheinbar auf den ersten Blick hoffnungslosen Daten zu ziehen. Als Zeitbereichsfilter kann der übereinstimmende Filter auch anzeigen, wann das Signal erscheint und wann es verschwindet.

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.

Bob D'Agostino
quelle
"Die Erkennung eines niedrigen SNR kann eine dunkle Kunst sein" Sehr wahr. Ich bin neugierig, Sie erhalten einen falschen Peak in der FFT, konstruieren einen angepassten Filter (wie haben Sie die Länge ausgewählt) und korrelieren dann kreuzkorreliert und lehnen dann manchmal die Antwort ab? Wie konnten Sie dann überhaupt einen falschen Höhepunkt gehabt haben?
Spacey
Die Länge des angepassten Filters erhalten Sie, wenn Sie Ihre Abtastrate und die Häufigkeit der Kandidatenspitzen kennen. Sie konstruieren eine vollständige Sinuswelle und überprüfen die Korrelation der konstruierten Sinuswelle über das aktuelle Fenster der Zeitbereichsdaten. Sie konstruieren die angepassten Filter jedoch nur bei Frequenzen, die als Kandidatenspitzen in der FFT bestimmt wurden. Das angepasste Filter kann Erkennungen mit niedrigem SNR besser finden als das FFT und dient als Validierung. Wenn Sie ein hohes SNR haben, benötigen FFT-Peaks keine zusätzliche Validierung. Wenn das SNR jedoch niedrig ist, führt die FFT tendenziell zu falschen Peaks.
Bob D'Agostino
Bob, ich verstehe. Und wie entscheiden Sie, dass zunächst ein Peak in der FFT vorhanden ist? (Mit welcher Metrik berechnen Sie das?) So etwas wie max over mean?
Spacey
@ BobD'Agostino: Die DFT kann als eine Bank von kritisch abgetasteten Filtern angesehen werden, die jeweils eine Impulsantwort haben, die eine komplexe Exponentialfunktion darstellt. Es ist nicht klar, wie sich dies stark von dem von Ihnen vorgeschlagenen Ansatz unterscheiden würde, es sei denn, Ihre "interessierenden Spitzenfrequenzen" werden bei gebrochenen DFT-Bin-Offsets gemessen, wodurch der Filter besser auf den interessierenden Ton zentriert werden kann. Bei niedrigem SNR kann es jedoch schwierig sein, die genauen Spitzenorte zu lokalisieren.
Jason R
0

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).

mbaitoff
quelle
Ich denke, das ist interessant, aber Sie haben mich beim Mittelwertbildung und Sortieren verloren. Könnten Sie bitte Ihre Schritte klären? Vielen Dank.
Spacey
Tatsächlich ist es nicht erforderlich, die Leistungsabtastwerte zu sortieren. Sie können einfach nach Frequenzspitzen suchen und einige Abtastwerte um die Spitze herum nehmen und diese mitteln. Wahrscheinlich ist hier nicht einmal eine Sortierung erforderlich, es sei denn, Sie suchen nach dem Median.
Mbaitoff
0

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.

hotpaw2
quelle