¿Cuáles son algunos métodos para detectar una sinusoide en ruido?

7

Estoy buscando una clasificación amplia sobre los tipos de técnicas disponibles. Algo que puedo usar para comenzar una encuesta de literatura.

Algunos detalles:

  1. debería ser factible para la implementación en tiempo real.

  2. Decisión binaria, debería poder ingresar la señal continuamente, y el algoritmo debe detectar los tiempos de inicio y parada de la sinusoide en la forma de onda.

  3. No hay otra señal, es decir, si la sinusoide no está presente, solo habrá ruido

  4. la entrada está limitada en la banda, y la sinusoide, si está presente, se asegura de estar dentro de esa banda.

  5. Las compensaciones son entre velocidad (qué tan pronto después de la aparición de la sinusoide puede el algo detectar su presencia) y falsos positivos (debe ser mínimo)

  6. No puedo proporcionar números exactos sobre medidas de rendimiento aceptables, porque no estoy seguro de mí mismo. Tengo la intención de implementar todas sus sugerencias para mi aplicación y descubrirlo por mí mismo. Solo estoy buscando las técnicas "estándar" para abordar este problema.

Más detalles:

  1. La entrada es la salida de un filtro de paso de banda, por lo que el ruido también es significativo solo en la banda de paso.

  2. No hay certeza de cuándo puede aparecer la sinusoide. La duración de la sinusoide está en el rango de 50-100 ms. Las amplitudes de la sinusoide fluctuarán.

ankit
fuente
1
Probablemente un analizador de Fourier con ventana deslizante (o andante) haría el trabajo. Se necesitan más detalles: ¿el ruido también está limitado en la banda? ¿Hay un tiempo de ajuste garantizado cuando solo hay ruido presente en la entrada? ¿El ruido y la amplitud sinusoidal son estables en el tiempo?
mbaitoff
Según tengo entendido, detectará pitidos en un canal ruidoso. Luego debe especificar un umbral de amplitud (energía) que distinga un pitido entre el ruido. También mencionas el límite de banda del pitido. ¿Eso significa que un espectro de pitido es de banda ancha o que un espectro de pitido es estrecho pero en cualquier lugar dentro de la banda? También debe especificar cómo se percibe un pitido: si es como un tono de subida / bajada rápido o lento, si va acompañado de un clic de encendido / apagado, y qué tan cortos / largos podrían ser en relación con la ventana de escaneo.
mbaitoff
¡Gracias! Eso proporciona MUCHA más información sobre el problema.
Peter K.
¿Sabes algo sobre la distribución del ruido? Además, ¿con qué precisión conoce la frecuencia de la sinusoide a priori (si es que la tiene)?
Jason R
@ Jason R el ruido es gaussiano. La frecuencia de la sinusoide no se conoce. Solo se garantiza que esté en el rango de 80-250 Hz. Diferentes "pitidos" estarán en la misma frecuencia central, pero las amplitudes pueden variar.
Ankit

Respuestas:

2

Dependiendo de la frecuencia de muestreo, funcionará una FFT (Transformada rápida de Fourier). Por ejemplo, si su frecuencia de muestreo es solo una vez cada 20 ms, solo obtendrá algunas muestras de la sinusoide, pero si está muestreando cada 0.5 ms, obtendrá muchas más muestras. Los FFT generalmente funcionan mejor con una gran cantidad de muestras para promediar. En ese caso, incluso si su señal es la suma de algunas sinusoides, se pueden determinar con precisión.

Alternativamente, puede echar un vistazo al algoritmo MUSIC . No estoy muy seguro de los detalles de cómo se implementa, pero se ha implementado en varios escenarios de detección en tiempo real. Una alternativa a MUSIC es el algoritmo Esprit .

Aún así, si el tamaño de su muestra es lo suficientemente grande y el ruido no inunda la señal por completo, entonces un FFT será (en promedio) la opción más rápida.

Kitchi
fuente
2
Implementación acortada de MUSIC: PMUSIC(ω)=1eHPne dónde Pn=EnEnH y eH=[0,ejω,...,e(N1)ω]. En es una matriz NxP donde las columnas son los vectores propios correspondientes a los valores propios P ​​más pequeños de la matriz de autocorrelación, Rxx. Determinar cuál debería ser P no es trivial y está cubierto por Wax y Kailath (1985), aunque a veces se puede hacer una estimación del "globo ocular" para determinar los valores propios de la señal frente a los valores propios del ruido.
Dave C
2

Una forma de detectar una sinusoide es usar el algoritmo de Goertzel . Rick Lyons da una buena reseña aquí sobre cómo usarlo para la detección .

Ese segundo enlace tiene esta ecuación para filtrar su señal entrante y calcular la "estadística de decisión":

ingrese la descripción de la imagen aquí

Peter K.
fuente
El algoritmo de Goertzel parece ser un detector resonante monofrecuencia. ¿Cómo funciona esto para los tonos de banda ancha en la tarea de póster original?
mbaitoff
El OP parece querer "ilimitado de banda", no "banda ancha". Si elige bien la longitud de Goertzel, debería ser capaz de hacer frente a sinusoides "sin límite de banda". Estoy de acuerdo en que hay una compensación: una sinusoide precisamente en la frecuencia central de Goertzel dará una lectura más alta que una de la misma amplitud a una frecuencia diferente. La mayoría de los enfoques basados ​​en FFT tienen el mismo problema. Siempre puede ejecutar uno o dos detectores Goertzel con diferentes frecuencias centrales si esto es un problema.
Peter K.
@PeterK, ¿por qué uno no usaría simplemente una familia de complejos tonos DFT para mezclar? (En otras palabras, ¿qué ventaja tiene la AG sobre la técnica anterior?). Interesante respuesta por cierto.
Spacey
@Mohammad: Una familia de tonos DFT complejos es justo lo que está implementando el algoritmo de Goertzel (si implementa varios filtros Goertzel con desplazamiento de frecuencia).
Peter K.
1
La familia de algoritmos de Goertzel puede considerarse simplemente como la fusión computacional de un generador exponencial / sinusoidal complejo más un producto de puntos vectoriales, idéntico a obtener la magnitud de una mezcla descendente compleja utilizando el mismo generador de funciones trigonométricas (excepto posiblemente por la estabilidad numérica y dinámica problemas de alcance).
hotpaw2
2

Todo depende de SNR. Cuanto más baja sea la SNR, más procesamiento tendrá que hacer para separar la señal del ruido. He resuelto un problema similar en el pasado, donde estaba buscando una señal sinusoidal intermitente y baja SNR en un rango bastante amplio de frecuencias. Esto es lo que funcionó para mí:

  1. Realice una caracterización fuera de línea del ruido de su sistema (en el dominio de la frecuencia). Si el nivel de ruido ambiental cambia con el tiempo, actualice periódicamente este nivel de ruido en línea cuando el algoritmo tenga una alta confianza de que la señal de interés no está presente. Si el ruido no es muy estacionario, entonces esto podría no ayudar mucho (y podría doler).
  2. Realice un FFT deslizante en ventanas de tiempo discreto. Busque frecuencias con energías que estén a un umbral por encima del ruido de fondo. Obtenga una lista de candidatos "picos" que podrían ser la señal de interés. Opté por mantener un búfer circular de datos que incluye muestras de ventanas de tiempo anteriores para que la FFT tuviera una mejor resolución de frecuencia.
  3. Construya filtros coincidentes sinusoidales para las frecuencias pico de interés identificadas en la FFT. Busque respuestas por encima de algún umbral. El filtro de coincidencia (también conocido como la función de autocorrelación) puede atenuar el ruido realmente bien y en mi sistema fue bastante bueno para extraer detecciones de lo que a primera vista parecían datos sin esperanza. Como filtro de dominio de tiempo, el filtro coincidente también puede decirle cuándo aparece la señal y cuándo desaparece.

Como otros han recomendado, experimenté con el algoritmo MUSIC para separar la señal del ruido. Para mi problema, fue ligeramente mejor para encontrar señales candidatas de SNR bajas que la FFT, pero dado que la carga computacional era mucho más alta (y mi algoritmo se estaba ejecutando en un DSP de punto fijo débil) opté por no usarlo. Era más fácil simplemente establecer el umbral de detección más bajo con la FFT, detectar picos más espurios y eliminarlos en la etapa de filtrado coincidente. La detección de baja SNR puede ser un poco oscura, pero si conoce lo suficiente sobre su sistema, puede detectar de manera confiable señales con una amplitud más baja que los niveles de ruido ambiental. Todo depende de la información que conozca sobre su sistema que pueda explotar.

Bob D'Agostino
fuente
"La detección baja de SNR puede ser un poco un arte oscuro" Muy cierto. Tengo curiosidad, obtienes un pico espurio en la FFT, construyes un filtro coincidente (¿cómo elegiste la longitud?), Y luego haces una correlación cruzada, y luego a veces rechazas la respuesta. ¿Cómo pudiste haber tenido un pico espurio en primer lugar entonces?
Spacey
Obtiene la longitud del filtro coincidente al conocer su frecuencia de muestreo y la frecuencia de los picos candidatos. Construye una onda sinusoidal completa y verifica la correlación de la onda sinusoidal construida sobre la ventana actual de datos de dominio de tiempo. Pero solo construye los filtros coincidentes a frecuencias que se han determinado como picos candidatos en la FFT. El filtro adaptado es más capaz de encontrar detecciones de baja SNR que el FFT y sirve como validación. Si tiene una SNR alta, los picos de FFT no necesitan ninguna validación adicional, pero si la SNR es baja, la FFT tiende a dar picos falsos.
Bob D'Agostino
Bob, ya veo. ¿Y cómo decides que existe un pico en la FFT inicialmente? (¿Qué métrica usas para calcular eso?) ¿Algo como max over mean?
Spacey
@ BobD'Agostino: El DFT puede verse como un banco de filtros críticamente muestreados, cada uno con una respuesta de impulso que es una función exponencial compleja. No está claro cómo esto sería muy diferente del enfoque que está sugiriendo, a menos que sus "frecuencias máximas de interés" se midan en compensaciones fraccionales de bin DFT, permitiendo así que el filtro se centre mejor en el tono de interés. Sin embargo, a una SNR baja, puede ser difícil ubicar las ubicaciones precisas de los picos.
Jason R
0

Propondría lo siguiente:
1. Organice una ventana deslizante que sea lo suficientemente ancha como para contener toda la banda de la señal (al menos varios períodos de la señal de frecuencia más baja)
2. Realice una FFT de muestras que están actualmente dentro de una ventana, obtenga Un espectro de potencia de él.
3. Recorte el espectro con los límites de banda conocidos.
4. Clasifique los valores restantes del espectro de potencia en orden decreciente. Como el ruido es gaussiano, el espectro de ruido sería medio plano dentro de la banda, y si el pitido monotónico estuviera presente en la ventana, produciría la (s) espiga (s).
5. Identifique el ancho de banda de pico típico. Tome las muestras de mayor amplitud de un espectro de potencia recortado, obtenga un promedio. Esa sería la energía potencial "bip".
6. También obtenga un promedio de las muestras de banda restantes, que sería la energía del ruido.
7. Calcule una relación de energías obtenidas en (5) y (6). Si la proporción excede el umbral dado, establezca el indicador que indica que se encuentra el pitido. Si no, establezca la bandera de que actualmente no hay pitido.
8. Deslice la ventana al siguiente cuadro (muestra por muestra o por algún paso más grande).

mbaitoff
fuente
Creo que esto es interesante, pero me perdiste en la parte de promedio y clasificación. ¿Podría por favor aclarar sus pasos? Gracias.
Spacey
En realidad, no es necesario clasificar las muestras de potencia, solo puede buscar picos de frecuencia y tomar algunas muestras alrededor del pico y promediarlas. Probablemente no sea necesario ordenar aquí a menos que vaya a buscar la mediana.
mbaitoff
0

Este es un problema de estadísticas. Si puede caracterizar el ruido, puede buscar características particulares de su señal de interés cuya probabilidad esté por debajo de alguna probabilidad (su tasa de error falso positivo requerida) para aparecer aleatoriamente en el ruido.

Si conoce la duración mínima de su sinusoide de interés (digamos 50 mS), puede intentar ventanas FFT deslizantes superpuestas de la duración de esa duración y buscar picos espectrales por encima de un umbral calculado al caracterizar el ruido. Si el mismo pico sobre el piso de ruido aparece en múltiples ventanas FFT sucesivas, entonces la longitud de la sinusoide podría corresponder más, dependiendo de la longitud y superposición de su marco FFT.

hotpaw2
fuente