Schätzen der Einschaltzeit eines Tonausbruchs im Rauschen?

14

Mit welchen Techniken kann man die Einschaltzeit eines Sinustonbursts in einem verrauschten Signal abschätzen?

Angenommen, der Tonimpuls hat eine bekannte feste Frequenz (aber eine unbekannte Phase) und eine sehr scharfe Anstiegszeit, und das Ziel besteht darin, die Einschaltzeit innerhalb von besser als der Hälfte der Anstiegszeit und / oder einer Periode der Frequenz des Tons abzuschätzen , wenn möglich. Wie können sich die Schätztechniken ändern, wenn das S / N-Verhältnis sehr niedrig ist (viel weniger als 1)?

Hinzugefügt: Angenommen, der Tonimpuls hat eine unbekannte Länge, ist aber länger als ein kleines Vielfaches der Anstiegszeit und der Frequenzperiode.

Hinzugefügt: Eine DFT / FFT zeigt die sehr wahrscheinliche Existenz eines Tons. Das Problem besteht darin, genau herauszufinden, wo im FFT-Fenster der Ton (oder möglicherweise mehrere Tonbursts mit der gleichen Frequenz) im FFT-Fenster begonnen hat, oder zu bestimmen, ob der aktuelle Ton außerhalb dieses DFT-Fensters begonnen hat, vorausgesetzt, ich habe alles zusätzliche Zeitbereichsdaten.

Die Genauigkeit der Radarimpulserkennung ist näher an der von mir benötigten Auflösung, außer dass ich nur eine Flanke habe, da der Ton eine unbekannte Länge hat und, abgesehen von einer bekannten Anstiegszeit, nicht moduliert ist. Schmalbandpassfilter verzerren die Anstiegszeit und töten somit die Auflösung der Kantenankunftsschätzung.

hotpaw2
quelle
1
Können wir etwas über den Lärm annehmen? Ist es stationär? Folgt es irgendeiner Verteilung?
Phonon
2
Sind Fehlalarme von Ihrem Melder unerwünscht? Haben Sie Angaben zur Wahrscheinlichkeit, dass jeder Puls korrekt erfasst wird? Dies ist der (vereinfachten) Front-End-Radarsignalverarbeitung sehr ähnlich. Lokalisieren (möglicherweise modulierter) Impulse, die in Rauschen eingebettet sind, und Schätzen ihrer Parameter.
Jason R
1
Müssen Sie dies in Echtzeit tun oder handelt es sich um eine Offline-Analyse?
Nibot
2
@ hotpaw2: Was hat dir an dem Goertzel-Algorithmus nach dieser SO-Antwort nicht gefallen ?
Peter K.
1
Der Goertzel-Algorithmus wird für die Tonerkennung verwendet. Die Ausgabe des Filters ist eine Schätzung der "Leistung" des Signals bei der Frequenz, für die es abgestimmt ist. Wählen Sie einen Schwellenwert. Liegt der Filterausgang darüber, haben Sie einen Ton festgestellt. Stellen Sie Ihren Schwellenwert entsprechend ein, und Sie können das Einsetzen des Tons früher erkennen (und sind außerdem anfälliger für Fehlalarme).
Peter K.

Antworten:

6

Wie wir in den Kommentaren besprochen haben, ist der Goertzel-Algorithmus die übliche Methode, um einen Rauschton zu erkennen. Nach der Diskussion bin ich mir nicht sicher, ob es wirklich das ist, wonach Sie suchen (Sie wollen die Startzeit ), aber es schien Verwirrung darüber zu geben, wie der Goertzel-Algorithmus auf Ihr Problem angewendet werden könnte, und deshalb dachte ich, ich würde es aufschreiben Hier.

Goertzel-Algorithmus

Der Goertzel-Algorithmus ist gut zu verwenden, wenn Sie die Frequenz des gesuchten Tons kennen (nennen Sie ihn ) und wenn Sie eine vernünftige Vorstellung vom Geräuschpegel haben, so dass Sie eine geeignete Erkennungsschwelle auswählen können.fg

Man kann sich vorstellen, dass der Goertzel-Algorithmus immer die Ausgabe von EINEM FFT-Bin berechnet:

y(n)=eȷ2πfgnk=0nx(n)eȷ2πfgk

fg ist die Frequenz, die Sie suchen.

Die Wikipedia-Seite bietet eine bessere Möglichkeit, dies zu berechnen.

Hier ist ein (schwacher) Scilab- Versuch, es zu implementieren:

function [y,resultr,resulti] = goertzel(f_goertzel,x)
realW = 2.0*cos(2.0*%pi*f_goertzel);
imagW = sin(2.0*%pi*f_goertzel);

d1 = 0;
d2 = 0;

for n = 0:length(x)-1,
    y(n+1) = x(n+1) + realW*d1 - d2;
    d2 = d1;
    d1 = y(n+1);
    resultr(n+1) = 0.5*realW*d1 - d2;
    resulti(n+1) = imagW*d1;
end
endfunction

f=0.0239074ϕ=4.4318752

x=sin(2πfn+ϕ)+ϵ(n)

wo ϵ(n) der Mittelwert Null ist, Einheitsvarianz Gaußsches weißes Rauschen.

In diesem Beispiel beginnt der Ton bei Index 1001 zu einem Drittel im Signal.

Wenn wir den Goertzel-Algorithmus mit ausführenfg=f0.001 wir die ersten beiden Spuren der Figur.

Wenn wir den Goertzel-Algorithmus darauf mit ausführen fg=f wir die beiden unteren Spuren der Figur.

Die vier Spuren sind:

  • xyfg=0.0229074
  • resultr2+resulti2
  • xyfg=0.0239074
  • resultr2+resulti2

Wie Sie sehen, liegt der Spitzenwert für den Ton, an dem wir interessiert sind, bei etwa 250. Wenn wir die Erkennungsschwelle auf etwa die Hälfte dieses Wertes (125) einstellen, erfolgt die Erkennung (der Quadratwurzelwert ist größer als 125) ) bei ungefähr Index 1450 --- 450 Abtastungen, nachdem der Ton begonnen hatte.

Diese Schwelle (125) wird im anderen Fall keine Erkennung auslösen (für diesen Lauf jedenfalls), aber der Maximalwert dieser Ausgabe beträgt 115,24. Wir können die Schwelle nicht zu stark reduzieren, ohne eine falsche Erkennung zu erhalten.

Das Verringern des Schwellenwerts auf 116 führt im zutreffenden Fall (für diesen Lauf) zu einer Erkennung bei Index 1401. Es besteht jedoch die Gefahr, dass weitere Fehlalarme auftreten.

Bildbeschreibung hier eingeben

Peter K.
quelle
Ein laufender Goertzel-Filter ist besser geeignet, wenn man nur eine Existenzschätzung innerhalb eines Fensters fester Länge sucht. Ein laufender Goertzel ohne Verlust- / Abfallterm ändert seine Bandbreite über seine Länge, und die geringere Bandbreite zu einem späteren Zeitpunkt liefert eine sich verschlechternde Schätzung der Ankunftszeit, die empfindlicher für Rauschen und Schwellenwertfehler ist.
hotpaw2
@ hotpaw2: Richtig. Sie können einen "Vergessensfaktor" einführen, um Goertzel am Laufen zu halten, ansonsten merkt er sich alles.
Peter K.
Erinnert sich alles? Es ist eine FIR, die in rekursiver Form implementiert werden kann. Was habe ich hier vermisst?
Oliver Charlesworth
@Oli: Wenn du dir die Gleichung für ansiehst y(n)oben werden Sie feststellen, dass es nicht endet. Ja, es wird ein (skalierter) DFT-Koeffizient geschätzt, aber es ist definitiv nicht FIR.
Peter K.