¿Estimando el tiempo de inicio de una explosión de tono en ruido?

14

¿Qué técnicas se podrían usar para estimar el tiempo de inicio de una explosión de tono sinusoidal en una señal ruidosa?

Suponga que la ráfaga de tonos tiene una frecuencia fija conocida (pero una fase desconocida) y un tiempo de subida muy agudo, y que el objetivo es estimar el tiempo de inicio en un tiempo superior a la mitad del tiempo de subida y / o un período de la frecuencia del tono. , si es posible. ¿Cómo podrían cambiar las técnicas de estimación si la relación S / N es muy baja (mucho menos de 1)?

Agregado: Suponga que la ráfaga de tonos es de duración desconocida, pero más larga que un pequeño múltiplo del tiempo de subida y el período de frecuencia.

Agregado: un DFT / FFT muestra la existencia muy probable de un tono. El problema es averiguar exactamente con precisión dónde en la ventana FFT el tono (o quizás múltiples ráfagas de tonos de la misma frecuencia) puede haber comenzado dentro de la ventana FFT, o determinar si el tono actual comenzó fuera de esa ventana DFT, siempre que tenga todo eso Datos de dominio de tiempo adicional.

La precisión de detección de pulso de radar está más cerca de la resolución que necesito, excepto que solo tengo un borde, ya que el tono es de longitud desconocida y, aparte de un tiempo de aumento conocido, no modulado. Los filtros de paso de banda estrecha distorsionan el tiempo de subida y, por lo tanto, matan la resolución de estimación de llegada de borde.

hotpaw2
fuente
1
¿Podemos suponer algo sobre el ruido? ¿Es estacionario? ¿Sigue algún tipo de distribución?
Phonon
2
¿Son indeseables las falsas alarmas de su detector? ¿Tiene una especificación sobre la probabilidad de detectar correctamente cada pulso? Esto es muy similar al (una versión simplificada de) el procesamiento de señal de radar frontal; localizar pulsos (posiblemente modulados) incrustados en el ruido y estimar sus parámetros.
Jason R
1
¿Necesita hacer esto en tiempo real o es un análisis fuera de línea?
nibot
2
@ hotpaw2: ¿Qué no le gustó del algoritmo de Goertzel según esta respuesta SO ?
Peter K.
1
El algoritmo de Goertzel se usa para la detección de tonos, que parece ser lo que buscas. La salida del filtro es una estimación de la "potencia" de la señal a la frecuencia para la que se sintoniza. Elige un umbral. Si la salida del filtro está por encima de esto, ha detectado un tono. Establezca su umbral adecuadamente y podrá detectar la aparición del tono antes (y también será más propenso a falsas alarmas).
Peter K.

Respuestas:

6

Como hemos estado discutiendo en los comentarios, el algoritmo de Goertzel es la forma habitual de detectar un tono en el ruido. Después de la discusión, no estoy seguro de que sea lo que buscas (quieres el tiempo de inicio ), pero parecía haber confusión sobre cómo el algoritmo de Goertzel podría aplicarse a tu problema, así que pensé en escribirlo. aquí.

Algoritmo de Goertzel

El algoritmo de Goertzel es bueno para usar si conoce la frecuencia del tono que está buscando (llámelo ) y si tiene una idea razonable del nivel de ruido para poder seleccionar un umbral de detección adecuado.Fsol

Se puede pensar que el algoritmo de Goertzel siempre calcula la salida de ONE FFT bin:

y(norte)=miȷ2πFsolnortek=0 0norteX(norte)mi-ȷ2πFsolk

donde es la frecuencia que estás buscando.Fsol

La página de Wikipedia tiene una mejor manera de calcular esto.

Aquí hay un intento (débil) de Scilab para implementarlo:

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=pecado(2πFnorte+ϕ)+ϵ(norte)

ϵ(norte)

En este ejemplo, el tono comienza un tercio del camino hacia la señal en el índice 1001.

Fsol=F-0.001

Fsol=F

Los cuatro rastros son:

  • XyFsol=0.0229074
  • rmistultr2+rmistultyo2
  • XyFsol=0.0239074
  • rmistultr2+rmistultyo2

Como puede ver, el caso en que el tono que nos interesa está presente alcanza su punto máximo en aproximadamente 250. Si establecemos el umbral de detección en aproximadamente la mitad de este valor (125), entonces se produce la detección (el valor de raíz cuadrada es mayor que 125 ) a aproximadamente el índice 1450 --- 450 muestras después de que comenzó el tono.

Este umbral (125) no causará una detección en el otro caso (para esta ejecución, de todos modos), pero el valor máximo de esa salida es 115.24, no podemos reducir demasiado el umbral sin obtener una detección falsa.

Reducir el umbral a 116 causará la detección en el caso verdadero (para esta ejecución) en el índice 1401 ... pero corremos el riesgo de más falsas alarmas.

ingrese la descripción de la imagen aquí

Peter K.
fuente
Un filtro Goertzel en ejecución es más adecuado si solo se busca una estimación de existencia dentro de una ventana de longitud fija. Un Goertzel en ejecución sin un término de pérdida / descomposición cambia su ancho de banda a lo largo de su longitud, y el ancho de banda más estrecho más adelante en el tiempo proporciona una estimación del tiempo de llegada que empeora, más sensible al ruido y a los errores de umbral.
hotpaw2
@ hotpaw2: Correcto. Puede introducir un "factor de olvido" para mantener Goertzel en funcionamiento, pero de lo contrario recuerda todo.
Peter K.
¿Recuerdas todo? Es un FIR que se puede implementar en forma recursiva. ¿Qué me he perdido aquí?
Oliver Charlesworth
@Oli: Si nos fijamos en la ecuación para y(norte)arriba, notarás que no termina. Sí, está estimando un coeficiente DFT (a escala), pero definitivamente no es FIR.
Peter K.