Oszacowanie czasu rozpoczęcia wybuchu tonu w hałasie?

14

Jakich technik można użyć do oszacowania czasu rozpoczęcia wybuchu sinusoidalnego tonu w głośnym sygnale?

Załóżmy, że impuls tonowy ma znaną stałą częstotliwość (ale nieznaną fazę) i bardzo ostry czas narastania, a celem jest oszacowanie czasu rozpoczęcia w czasie lepszym niż połowa czasu narastania i / lub jednego okresu częstotliwości tonu , Jeśli to możliwe. W jaki sposób techniki szacowania mogą się zmienić, jeśli stosunek S / N jest bardzo niski (znacznie mniejszy niż 1)?

Dodano: Załóżmy, że seria tonów ma nieznaną długość, ale dłuższą niż niewielka wielokrotność czasu narastania i okresu częstotliwości.

Dodano: DFT / FFT pokazuje bardzo prawdopodobne istnienie tonu. Problem polega na dokładnym ustaleniu, gdzie w oknie FFT ton (lub być może wielu impulsach o tej samej częstotliwości) mógł zacząć się w oknie FFT, lub ustaleniu, czy bieżący ton zaczął się poza tym oknem DFT, pod warunkiem, że mam to wszystko dodatkowe dane w dziedzinie czasu.

Radarowa dokładność detekcji impulsu jest bliższa rozdzielczości, której potrzebuję, z wyjątkiem tego, że mam tylko krawędź, ponieważ ton ma nieznaną długość i, poza znanym czasem narastania, niemodulowany. Filtry wąskopasmowe zniekształcają czas narastania, a tym samym zabijają rozdzielczość oszacowania przybycia krawędzi.

hotpaw2
źródło
1
Czy możemy coś założyć na temat hałasu? Czy to jest stacjonarne? Czy następuje jakaś dystrybucja?
Phonon
2
Czy fałszywe alarmy z detektora są niepożądane? Czy masz specyfikację dotyczącą prawdopodobieństwa prawidłowego wykrycia każdego impulsu? Jest to bardzo podobne do (uproszczonej wersji) przetwarzania sygnałów radaru z przodu; lokalizowanie (ewentualnie modulowane) impulsów osadzonych w hałasie i szacowanie ich parametrów.
Jason R
1
Czy musisz to robić w czasie rzeczywistym, czy jest to analiza offline?
nibot
2
@ hotpaw2: Co ci się nie podobało w algorytmie Goertzela według tej odpowiedzi SO ?
Peter K.
1
Algorytm Goertzela służy do wykrywania tonu, który wydaje się być tym, czego szukasz. Sygnał wyjściowy filtra jest oszacowaniem „mocy” sygnału przy częstotliwości, dla której jest dostrojony. Wybierz próg. Jeśli moc wyjściowa filtra jest powyżej tego, wykryto dźwięk. Ustaw odpowiednio próg, aby wcześniej wykryć początek tonu (a także być bardziej podatny na fałszywe alarmy).
Peter K.

Odpowiedzi:

6

Jak dyskutowaliśmy w komentarzach, algorytm Goertzela jest zwykłym sposobem wykrywania tonu w hałasie. Po dyskusji nie jestem pewien, czy jest to dokładnie to, czego szukasz (chcesz mieć początek) ), ale wydawało się, że istniało zamieszanie, w jaki sposób algorytm Goertzela może być zastosowany do twojego problemu, więc pomyślałem, że to opiszę tutaj.

Algorytm Goertzela

fg ) i jeśli masz rozsądne pojęcie o poziomie hałasu, abyś mógł wybrać odpowiedni próg detekcji.

Algorytm Goertzela można uznać za zawsze obliczający dane wyjściowe JEDNEGO bin FFT:

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

fg

Strona Wikipedii ma lepszy sposób na obliczenie tego.

Oto (słaba) próba wdrożenia Scilab :

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)

ϵ(n) jest średnią zero, wariancja jednostkowa białego szumu gaussowskiego.

W tym przykładzie ton zaczyna się jedną trzecią drogi do sygnału o indeksie 1001.

fg=f0.001 , otrzymamy dwa pierwsze ślady liczby.

fg=f , otrzymamy dwa dolne ślady figury.

Cztery ślady to:

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

Jak widać, przypadek, w którym interesujący nas ton jest obecny, osiąga wartość szczytową około 250. Jeśli ustawimy próg detekcji na około połowę tej wartości (125), nastąpi wykrycie (wartość zrootowana kwadratowa jest większa niż 125 ) o indeksie około 1450 --- 450 próbek po rozpoczęciu tonu.

Ten próg (125) nie spowoduje wykrycia w innym przypadku (w każdym razie dla tego przebiegu), ale maksymalna wartość tego wyjścia wynosi 115,24, nie możemy zbytnio obniżyć progu bez uzyskania fałszywego wykrycia.

Zmniejszenie progu do 116 spowoduje wykrycie w prawdziwym przypadku (dla tego przebiegu) przy indeksie 1401 ... ale ryzykujemy więcej fałszywych alarmów.

wprowadź opis zdjęcia tutaj

Peter K.
źródło
Działający filtr Goertzela jest bardziej odpowiedni, jeśli szuka się tylko oszacowania istnienia w oknie o stałej długości. Działający Goertzel bez okresu utraty / zaniku zmienia swoją szerokość pasma na swojej długości, a węższa przepustowość w późniejszym czasie zapewnia pogorszenie szacowanego czasu przybycia, bardziej wrażliwego na szumy i błędy progowe.
hotpaw2
@ hotpaw2: Poprawnie. Możesz wprowadzić „czynnik zapominający”, aby Goertzel działał, ale w przeciwnym razie pamięta wszystko.
Peter K.
Pamięta wszystko? Jest to FIR, który można wdrożyć w formie rekurencyjnej. Czego tu brakuje?
Oliver Charlesworth,
y(n)