Estimer le temps de début d'une salve de tonalité dans le bruit?


14

Quelles techniques peut-on utiliser pour estimer le temps d'apparition d'un éclat sinusoïdal dans un signal bruyant?

Supposons que la rafale de tonalité ait une fréquence fixe connue (mais une phase inconnue) et un temps de montée très brusque, et que le but est d'estimer le temps de début dans moins de la moitié du temps de montée, et / ou une période de la fréquence de la tonalité , si possible. Comment les techniques d'estimation pourraient-elles changer si le rapport S / B est très faible (bien inférieur à 1)?

Ajouté: Supposons que la rafale de tonalité soit de longueur inconnue, mais plus longue qu'un petit multiple du temps de montée et de la période de fréquence.

Ajouté: Un DFT / FFT montre l'existence très probable d'une tonalité. Le problème est de savoir exactement où la tonalité (ou peut-être plusieurs salves de même fréquence) peut avoir commencé dans la fenêtre FFT, ou de déterminer si la tonalité actuelle a commencé en dehors de cette fenêtre DFT, à condition que j'aie tout cela données supplémentaires dans le domaine temporel.

La précision de détection des impulsions radar est plus proche de la résolution dont j'ai besoin, sauf que je n'ai qu'un bord, car la tonalité est de longueur inconnue et, à part un temps de montée connu, non modulée. Les filtres passe-bande étroits déforment le temps de montée et tuent ainsi la résolution d'estimation de l'arrivée des bords.


1
Pouvons-nous supposer quelque chose sur le bruit? Est-ce stationnaire? Suit-il une sorte de distribution?
Phonon

2
Les fausses alarmes de votre détecteur sont-elles indésirables? Avez-vous une spécification sur la probabilité de détecter correctement chaque impulsion? Ceci est très similaire à (une version simplifiée du) traitement du signal radar frontal; localiser des impulsions (éventuellement modulées) intégrées dans le bruit et estimer leurs paramètres.
Jason R

1
Avez-vous besoin de le faire en temps réel ou s'agit-il d'une analyse hors ligne?
nibot

2
@ hotpaw2: Qu'est-ce que vous n'avez pas aimé dans l' algorithme de Goertzel selon cette réponse SO ?
Peter K.

1
L'algorithme Goertzel est utilisé pour la détection de tonalité, ce qui semble être ce que vous recherchez. La sortie du filtre est une estimation de la "puissance" du signal à la fréquence pour laquelle il est accordé. Choisissez un seuil. Si la sortie du filtre est supérieure à cela, vous avez détecté une tonalité. Réglez votre seuil de manière appropriée et vous pourrez détecter le début de la tonalité plus tôt (et également être plus sujet aux fausses alarmes).
Peter K.

Réponses:


6

Comme nous en avons discuté dans les commentaires, l' algorithme de Goertzel est le moyen habituel de détecter une tonalité dans le bruit. Après la discussion, je ne suis pas sûr que ce soit exactement ce que vous recherchez (vous voulez le temps de début ), mais il semblait y avoir une confusion sur la façon dont l'algorithme de Goertzel pourrait être appliqué à votre problème, alors j'ai pensé l'écrire ici.

Algorithme de Goertzel

Fg

L'algorithme de Goertzel peut être considéré comme calculant toujours la sortie de ONE FFT bin:

y(n)=eȷ2πFgnk=0nX(n)e-ȷ2πFgk

Fg

La page Wikipedia a une meilleure façon de calculer cela.

Voici une (faible) tentative Scilab de l'implémenter:

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=péché(2πFn+ϕ)+ϵ(n)

ϵ(n)

Dans cet exemple, la tonalité commence au tiers du signal dans l'indice 1001.

Fg=F-0,001

Fg=F

Les quatre traces sont:

  • XyFg=0,0229074
  • resultr2+resultje2
  • XyFg=0,0239074
  • resultr2+resultje2

Comme vous pouvez le voir, le cas où la tonalité qui nous intéresse est présente des pics à environ 250. Si nous fixons le seuil de détection à environ la moitié de cette valeur (125), alors la détection se produit (la valeur en racine carrée est supérieure à 125 ) à environ 1450 --- 450 échantillons après le début de la tonalité.

Ce seuil (125) n'entraînera pas de détection dans l'autre cas (pour cette course de toute façon), mais la valeur maximale de cette sortie est de 115.24, nous ne pouvons pas trop réduire le seuil sans obtenir une fausse détection.

Réduire le seuil à 116 entraînera une détection dans le vrai cas (pour cette course) à l'index 1401 ... mais nous courons le risque de plus de fausses alarmes.

entrez la description de l'image ici


Un filtre Goertzel en cours d'exécution est plus approprié si l'on ne recherche qu'une estimation d'existence dans une fenêtre de longueur fixe. Un Goertzel en cours d'exécution sans terme de perte / désintégration modifie sa bande passante sur sa longueur, et la bande passante plus étroite plus tard fournit une estimation de l'heure d'arrivée qui s'aggrave, plus sensible au bruit et aux erreurs de seuil.
hotpaw2

@ hotpaw2: correct. Vous pouvez introduire un "facteur d'oubli" pour que Goertzel continue de fonctionner, mais sinon, il se souvient de tout.
Peter K.

Se souvient de tout? C'est une FIR qui peut être implémentée sous forme récursive. Qu'est-ce que j'ai raté ici?
Oliver Charlesworth

y(n)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.