¿Existe un algoritmo para encontrar una frecuencia sin DFT o FFT?


34

Estaba buscando en la tienda de aplicaciones de Android un afinador de guitarra. Encontré una aplicación de sintonizador que decía que era más rápida que otras aplicaciones. Afirmó que podía encontrar la frecuencia sin usar el DFT (ojalá todavía tuviera la URL para esta especificación).

Nunca he oído hablar de esto. ¿Se puede adquirir una señal de audio y calcular la frecuencia sin usar el algoritmo DFT o FFT?

Respuestas:


29

FFT en realidad no es una excelente forma de hacer un sintonizador. FFT tiene inherentemente una resolución de frecuencia finita y no es fácil detectar cambios de frecuencia muy pequeños sin hacer que la ventana de tiempo sea extremadamente larga, lo que la hace difícil de manejar y lenta.

Las mejores soluciones se pueden basar en bucles de fase bloqueada , bucles de bloqueo retardado , correlación automática, detección y seguimiento de cruce por cero, detección y seguimiento máximo o mínimo y ciertamente combinación inteligente de estos métodos.

El preprocesamiento siempre ayuda.


55
Si una FFT puede detectar pequeños cambios de frecuencia no es inherente a su longitud, sino que depende de la relación señal / ruido. Dado que el ruido y la interferencia son lo suficientemente bajos, la interpolación de los resultados de FFT puede producir fácilmente una resolución de frecuencia única sub-bin.
hotpaw2

Alguien me puede ayudar con esto: - stackoverflow.com/questions/42359344/...
dreamBegin

12

Un FFT informa sobre los picos o picos de frecuencia del espectro (cuantificados por el tamaño del contenedor FFT), que es diferente del tono musical. Es posible que la frecuencia de tono percibida falte por completo en un espectro FFT.

Algunos de los afinadores de guitarra más simples simplemente usaron filtros de paso bajo o paso de banda y midieron el tiempo entre cruces por cero. El recíproco da una estimación de frecuencia.

La autocorrelación es otro método común de estimación de tono; y la correlación deslizante u otras medidas de auto-similitud tienen muchas variaciones, como ASDF deslizante (diferencia cuadrática), AMDF (diferencia de medias), patrones no lineales, verificación adaptativa solo para un rango limitado de retrasos, interpolación de retardo, ventanas y selección de ventana adaptativa, varias ponderaciones o uso de la teoría de la decisión para seleccionar entre múltiples secuencias potenciales del historial de retraso, etc. Un problema con la mayoría de las medidas de auto-similitud es elegir la octava apropiada, ya que una sub-octava puede mostrar casi la misma similitud.

Otras posibilidades incluyen el uso de PLL, demoduladores de cuadratura filtrada, transformadas de Hilbert filtradas, etc.

Pero tenga en cuenta que algunos métodos de filtrado y demodulación DSP son computacionalmente casi equivalentes a hacer 1 bin de un DFT en ventana, que puede o no encajar como respuesta a su pregunta.


8

La detección de tono se puede hacer de muchas formas versátiles y curiosas. Una forma de hacerlo es mediante autocorrelación . Este documento da un ejemplo de cómo se puede usar. La autocorrelación se puede hacer ridículamente simple mediante el uso de un correlacionador de 1 bit (por alguna razón no pude encontrar documentos decentes sobre eso). Entonces, teóricamente, el tono se puede detectar más rápido que con FFT, pero dudo que sea mucho más preciso sin un procesamiento previo realmente inteligente.


Creo que el enlace está roto? ...
Spacey

No, todo funciona. Lo acabo de comprobar.
Phonon

7

También eche un vistazo a la relativamente nueva transformación algorítmica de Hilbert-Huang (HHT). Puede manejar señales no estacionarias no lineales que pueden ser relevantes para su aplicación.


Esto fue una verdadera joya cuando lo encontré, aunque no te da la descomposición de Fourier, sino la descomposición instantánea de la frecuencia.
Spacey

La mayoría de las señales de la vida real son algo no estacionarias, es decir, varían ligeramente en amplitud y frecuencia. El HHT es menos sensible a estas variaciones y, por lo tanto, descompone tales señales de una manera más natural, donde las partes están más estrechamente relacionadas con los fenómenos físicos subyacentes.
Nordlöw



2

En realidad, puede calcular la frecuencia de una señal utilizando su pseudo espectro, que observa los vectores propios de su matriz de autocorrelación. Básicamente descompone su señal en ruido y subespacios de señal. A partir de ahí, puedes encontrar su espectro. (También puede limitarlo y darle un rango de frecuencias para verificar). También es bastante inmune al ruido. Por supuesto, este es un método paramétrico, no paramétrico como DFT.


¿Aparentemente esto usa la FFT? mathworks.com/help/toolbox/signal/ref/peig.html
endolith

1
@endolith Puede calcularlo sin ninguna FFT involucrada. De la matriz de correlación, obtienes los vectores propios, y luego el subespacio de ruido. Luego puede construir su propio vector de frecuencia para proyectar, de modo que no se utilicen FFT.
Spacey

1

Todo depende de la plataforma que desee procesar, si necesita un circuito simple, sugiero emitir la señal con ganancia y convertirla en una onda cuadrada y medir el período con un microcontrolador usando el temporizador.

Pero si quieres ponerte elegante con el procesamiento de señales, mira el método MUSIC:

http://en.wikipedia.org/wiki/Multiple_signal_classification

Espero eso ayude


0

Existen muchos métodos de estimación de tono sin usar DFT / FFT, algunos de ellos, incluido el método MUSIC, se enumeran en este documento: https://ieeexplore.ieee.org/abstract/document/6521410/ Los resultados de la simulación en este documento indican que cuando la frecuencia fundamental es muy baja, el método NLS exacto supera a otros entre los enumerados.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.