Transformada discreta de Fourier: ¿encontrar lo fundamental rápidamente?

9

Primero, me disculpo porque soy un desarrollador de software y ha pasado mucho tiempo sin sumergirme en las matemáticas puras, por lo que mi pregunta puede parecer tonta. Espero que no.

El contexto es el reconocimiento de tono en la música.

Si toma una nota musical y le aplica una transformada de Fourier, tendrá una suma infinita de amplitudes para las frecuencias dadas. Por ejemplo, si toco una nota cuyo fundamental es , en cualquier instrumento, después de la transformación de Fourier, tendré armónicos en . Cada frecuencia tendrá una amplitud dada que define el timbre del instrumento (piano, voz, trompeta, ... todos siguen este tono, pero tendrá diferentes amplitudes para cada armónico)FF,2F,3F,,nF

Ahora lo que me gustaría hacer es partir de una señal de audio dada, busque . Solo eso. Es más complicado de lo que parece porque siempre tendrá ruido de fondo, etc. ¡Además, no es necesariamente la frecuencia con la amplitud más alta!FF

Entonces, mi idea para encontrar es aplicar una DFT (bueno, en realidad, una FFT para la velocidad) y encontrar una frencuencia , de modo que sea ​​máxima en la salida de FFT.FFF+2F+3F++nF

¿Crees que eso es posible? ¿Crees que eso es posible en muy poco tiempo (digamos <5 milisegundos)?

Dinaiz
fuente
Probablemente esta podría ser una respuesta: edaboard.com/thread197897.html
Bueno, sí, pero ese es un método diferente, ¿no? En mi humilde opinión, es más fácil pero mucho menos confiable porque no puede distinguir entre sonidos armónicos e inarmónicos ...
Dinaiz
relevante dsp.stackexchange.com/a/2524/29
endolith

Respuestas:

6

Lo que está describiendo es muy similar al método Harmonic Product Spectrum de estimación de tono, como se enumera en este documento de Stanford CCRMA .

Una FFT no le proporciona una "suma infinita de amplitudes", sino un número finito de contenedores de resultados dependiendo de la longitud de la FFT.

5 mS es solo 1 período de una nota de 200 Hz, y solo una fracción de un período por debajo de 200 Hz. El reconocimiento de tono musical generalmente requiere escuchar o analizar un número múltiple de períodos de la periodicidad de un sonido de tono. Y mucha música usa notas debajo de G2. Si tiene una longitud de datos suficiente, calcular una estimación de tono a partir de esos datos podría tomar solo el orden de microsegundos en lugar de milisegundos en una PC o dispositivo móvil moderno.

hotpaw2
fuente
Buen punto. Sin embargo, si ya tiene 2F y 3F, realmente no necesita F, ¿verdad? En su ejemplo, 2F = 400hz y 3F = 600hz, por lo que probablemente pueda descubrir que F era 200 incluso sin escuchar suficiente sonido para tener un período de 5 ms, ¿no? También escuché sobre wavelet transform. ¿Crees que es un mejor método para hacer esto?
Dinaiz
@Dinaiz: Depende de la fuente del sonido de tono y de si esos fragmentos de frecuencias de armónicos son realmente estacionarios o no. Las wavelets son una pregunta completamente separada.
hotpaw2
Por lo tanto, este método no es adecuado para encontrar f0 en "casi en tiempo real". En el estado actual del arte, ¿es posible encontrar f0, en menos de unos pocos milisegundos, con algún instrumento, o es una causa perdida y debería abandonar mi búsqueda? : D
Dinaiz