Como o tamanho da janela e a taxa de amostragem influenciam a estimativa do tom da FFT?


8

Estou tentando criar um programa de detecção de afinação que extrai as frequências de picos em um espectro de potência obtido de uma FFT ( fftpack). Estou extraindo as frequências de pico do meu espectro usando o Primeiro Estimador de Quinn para interpolar entre os números dos compartimentos. Esse esquema parece funcionar bem sob certas condições. Por exemplo, usando uma função de janela retangular com um tamanho de janela de 1024 e uma taxa de amostragem de 16000, meu algoritmo identifica corretamente a frequência de um tom A440 purocomo 440.06 com uma segunda frequência parcial de 880.1. No entanto, sob outras condições, produz resultados imprecisos. Se eu alterar a taxa de amostragem (por exemplo, para 8000) ou o tamanho da janela (por exemplo, para 2048), ele ainda identificará corretamente a primeira parcial como 440, mas a segunda parcial será algo em torno de 892. O problema se torna ainda pior para tons inarmônicos como aqueles produzido por um violão ou piano.

Minha pergunta geral é: de que maneira a taxa de amostragem, o tamanho da janela e a função da janela afetam a estimativa de frequência dos picos de FFT? Minha suposição era que o simples aumento da resolução do espectro aumentaria a precisão da estimativa de frequência de pico, mas essa claramente não é minha experiência (o preenchimento zero também não ajuda). Também estou assumindo que a escolha da função da janela não terá muito efeito porque o vazamento espectral não deve alterar a localização do pico (embora, agora que penso nisso, o vazamento espectral possa potencialmente influenciar a estimativa de frequência interpolada se as magnitudes de caixas adjacentes a o pico é artificialmente aumentado pelo vazamento de outros picos ...).

Alguma ideia?

Respostas:


8
  1. Use uma janela gaussiana - a transformada de Fourier de um gaussiano é uma gaussiana
  2. Escala logarítmica do espectro para enfatizar picos e transformar os picos gaussianos em picos parabólicos
  3. Use a interpolação parabólica para encontrar os picos verdadeiros.

Observe que, como mencionado em §D.1, a magnitude da transformação da janela gaussiana é precisamente uma parábola em uma escala de dB. Como resultado, a interpolação quadrática de pico espectral é exata sob a janela gaussiana. Certamente, devemos de alguma forma remover as caudas infinitamente longas da janela gaussiana na prática, mas isso não causa muito desvio de uma parábola, como mostra a Fig.3.30.

https://ccrma.stanford.edu/~jos/sasp/Quadratic_Interpolation_Spectral_Peaks.html

insira a descrição da imagem aqui

Estimo 1000.000004 Hz para uma forma de onda de 1000 Hz desta maneira: https://gist.github.com/255291#file_parabolic.py

Se estiver com problemas, trace o espectro e use os olhos para ver por que não está funcionando.


2
Obrigado! Isso faz todo o sentido. O log de um gaussiano é uma parábola; portanto, a interpolação parabólica dos picos em um espectro de log com janelas gaussianas é quase exata. Depois de implementar isso, estou obtendo estimativas consistentes de frequência de pico da FFT em diferentes taxas de amostra e tamanhos de janela. Huzzah!
willpett

@ will.pett: Então, talvez o problema tenha sido causado pelo "Primeiro Estimador de Quinn" mais do que pela FFT?
endolith

Eu não acho que o método de interpolação tenha sido o culpado porque a interpolação quadrática também me deu resultados ruins com certas funções da janela e taxas de amostragem. Eu acho que foi a combinação dos parâmetros acima que foi importante. Eu não estava usando a função apropriada da janela e não havia transformado meu espectro em log. Aposto que a coisa mais importante foi a transformação de log. Provavelmente protocolo padrão que eu desconhecia.
91111 willpett

@endolith, graças, entendeu (perguntas podem seguir)
denis

3

Primeiro, a estimativa da frequência de pico e a estimativa do tom são duas coisas diferentes. A afinação é um fenômeno psicoacústico. As pessoas podem ouvir um tom mesmo com a frequência fundamental completamente ausente, ou relativamente fraca em comparação com a maioria dos outros picos, como nas notas baixas produzidas por alguns instrumentos.

Segundo, não usar janela em uma FFT é equivalente a usar uma janela retangular, que envolve seu espectro com a função Sinc. A função Sinc tem muitos húmus espalhados longe do pico, que aparecerão para todas as frequências que não sejam exatamente periódicas no comprimento da FFT (também conhecido como "vazamento espectral"). Todo esse vazamento de energia de uma frequência forte interferirá na estimativa de posição de outros picos de frequência. Portanto, uma função de janela mais adequada (Hamming ou von Hann) pode ajudar a reduzir essa interferência entre picos.

Uma FFT mais longa reduzirá a frequência delta entre os centros de bin, o que deve aumentar a interpolação e, portanto, a precisão da estimativa de frequência para espectros estacionários. No entanto, se a FFT for tão longa que o espectro mudar dentro da janela da FFT, todas as frequências alteradas serão borradas juntas em uma FFT mais longa.


1

Você definitivamente precisa de uma função de janela adequada - os efeitos do vazamento espectral variam significativamente, dependendo de como o período de afinação e o comprimento da janela da FFT - se você obtiver um grande transiente entre a última e a primeira amostra da janela da FFT, isso produzirá muito desagradável mancha do espectro, enquanto que se você tiver sorte e essa descontinuidade for pequena, o espectro resultante será muito mais limpo. Provavelmente, é por isso que você vê inconsistências ao alterar qualquer parâmetro, como tamanho da FFT. Com uma função de janela adequada, você obtém um espectro consistente à medida que o tom muda.


Agora, tentei diferentes funções de janela (Hamming, Blackman-Harris, Gauss, Weedon-Gauss) e todas elas me deram resultados imprecisos sob quaisquer condições de taxa de amostra / tamanho da janela (por exemplo, estimar a primeira frequência parcial em 460, 488 e outras). Somente uma janela retangular foi capaz de identificar corretamente um pico a 440 Hz. Curiosamente, esse pico é amplamente invariável com diferentes combinações de taxa de amostragem / tamanho de janela em uma janela retangular, embora a segunda parcial ainda seja variável. Como conciliar esses resultados com seus conselhos?

Como uma observação lateral, também estou usando um algoritmo de autocorrelação para comparar com a FFT. Este método (que é independente da função da janela) fornece ~ 440,4 Hz para o tom da wikipedia, enquanto o método FFT fornece quase exatamente 440 sem uma função da janela. Percebo que a autocorrelação não estima diretamente a primeira frequência parcial, mas sim o "tom" psicoacústico, mas ainda é interessante comparar. Ao experimentar sons de piano, notei que o método de autocorrelação constantemente superestima a primeira frequência parcial em comparação com o método FFT.

11
É difícil adivinhar quais seriam os problemas sem ver o código etc. Você já tentou plotar o espectro de potência para ver como os picos realmente se parecem com / sem uma função de janela? Isso não deve apenas dizer se o seu windowing / FFT / etc está se comportando corretamente, mas também pode lhe dar algumas dicas sobre o motivo pelo qual a sua estimativa de pitch está dando os resultados obtidos.
Paul R

É estranho, porque as funções da janela realmente produzem espectros de aparência mais limpa, com poucas manchas. No entanto, as estimativas das frequências de pico não estão corretas. Quando uso as configurações que me dão 440 Hz sem janelas, depois alterno para uma janela Hamming, recebo 444,6 Hz. Com uma janela Blackman-Harris, recebo 460,9 Hz, e com uma janela gaussiana, recebo 446,4 Hz. É possível que os métodos de interpolação de pico façam suposições implícitas sobre a função da janela que eu possa estar violando?
7118 willpett

Eu não estou realmente familiarizado com os métodos de interpolação no artigo ao qual você vincula - eles parecem estar usando informações de magnitude e de fase, e não apenas de magnitude, mas eu não pensaria que a janelação teria um impacto significativo na fase.
Paul R
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.