Transformação discreta de Fourier - encontrando o fundamental rapidamente?

9

Primeiro, peço desculpas porque sou desenvolvedor de software e faz muito tempo que não mergulhei na matemática pura, então minha pergunta pode parecer tola. Espero que não.

O contexto é o reconhecimento de pitch na música.

Se você tomar uma nota musical e aplicar uma transformação de Fourier a ela, terá uma soma infinita de amplitudes para determinadas frequências. Por exemplo, se eu tocar uma nota cujo fundamental é , em qualquer instrumento, após a transformação de Fourier, terei harmônicos em . Toda frequência terá uma dada amplitude que define o timbre do instrumento (piano, voz, trompete, ... todos seguem essa lei, mas você terá amplitudes diferentes para cada harmônica)FF,2F,3F,...,nF

Agora, o que eu gostaria de fazer é partir de um determinado sinal de áudio, encontrar . Só isso. É mais complicado do que parece, porque você sempre terá ruído de fundo e assim por diante ... Além disso, F não é necessariamente a frequência com a maior amplitude!FF

Portanto, minha ideia para encontrar é aplicar um DFT (na verdade, um FFT para velocidade) e encontrar uma frenquência F , de modo que F + 2 F + 3 F + + n F seja o máximo na saída da FFT.FFF+2F+3F+...+nF

Você acha que isso é possível? Você acha que isso é possível em um tempo muito curto (digamos <5 milissegundos)?

Dinaiz
fonte
Provavelmente isso poderia ser uma resposta: edaboard.com/thread197897.html
Bem, sim, mas esse é um método diferente, não é? IMHO, é mais fácil, mas muito menos fiável porque não pode distinguir entre sons harmônicos e inarmônicos ...
Dinaiz
relevante dsp.stackexchange.com/a/2524/29
endolith

Respostas:

6

O que você está descrevendo é muito semelhante ao método de estimativa de pitch do Espectro Harmônico do Produto, conforme listado neste artigo da Stanford CCRMA .

Uma FFT não fornece uma "soma infinita de amplitudes", mas um número finito de posições no resultado, dependendo do tamanho da FFT.

5 mS é apenas 1 período de uma nota de 200 Hz e apenas uma fração de um período abaixo de 200 Hz. O reconhecimento de afinação musical geralmente requer ouvir ou analisar um número múltiplo de períodos da periodicidade de um som afinado. E muita música usa notas abaixo do G2. Se você tiver um comprimento suficiente de dados, o cálculo de uma estimativa de afinação a partir desses dados poderá demorar apenas na ordem de microssegundos em vez de milissegundos em um PC ou dispositivo móvel moderno.

hotpaw2
fonte
Bom ponto. No entanto, se você já possui 2F e 3F, não precisa realmente de F, precisa? No seu exemplo, 2F = 400Hz e 3F = 600Hz, então você provavelmente pode descobrir que F era 200 mesmo sem ouvir som suficiente para ter um período de 5 ms, não é? Também ouvi falar sobre transformar wavelet. Você acha que esse é o melhor método para fazer isso?
Dinaiz
@ Dinaiz: Depende da fonte do som agudo e se esses fragmentos de frequências de overtone são realmente estacionários ou não. Wavelets são uma questão completamente separada.
usar o seguinte código
Portanto, esse método não é adequado para encontrar f0 "quase em tempo real". No atual estado da arte, é possível encontrar f0, em menos de alguns milissegundos, com qualquer instrumento, ou é uma causa perdida e devo desistir de minha busca? : D
Dinaiz 04/07/2012