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?
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.
fonte
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.
fonte