Estou tentando implementar um FFT para entender como ele funciona. Estou usando um arquivo de som aleatório (portanto, não consigo controlar o tamanho do sinal), com uma frequência de amostragem de 44.1 KHz. Estou usando esta biblioteca

https://www.nayuki.io/res/free-small-fft-in-multiple-languages/Fft.java

O objetivo é aplicar esta fórmula a obtenha a frequência: F = n * Fs / N

Com n número de caixas. Fs frequência de amostragem e N tamanho do FFT

1) Um Fft deve ter um comprimento, a maioria deles usa uma potência de 2 radix. Mas como posso saber o comprimento do FFT se aplicá-lo a uma matriz inteira de dados? é o tamanho dessa matriz?

2) Eu não entendo os bins, como é processado? Eu sei que o FFT funciona com blocos de dados, mas se eu fornecer um array completo de dados, como os bins são “criados”.

Comentários

  • Essas perguntas podem ser respondidas com apenas um pouco de pesquisa e leitura na Internet. Também recomendo que você comece sua codificação com construção matemática sinais de duração razoavelmente curta, aplique seu software FFT a eles e examine os resultados.
  • Na verdade, pesquisei muito, mas não ' entender, mas talvez i ' m muito lento. obrigado por sua preocupação.
  • Tente pesquisar em " Transformada discreta de Fourier " ou " como funciona um DFT " em vez de " como funciona uma FFT ". Uma Transformada Rápida de Fourier é um atalho computacional de uma Trans Discreta de Fourier Formato. Com a última pesquisa, é mais provável que você encontre informações sobre a eficiência computacional em vez do processo subjacente. Não ' não vejo como você pode esperar que alguém explique os fundamentos melhor em uma resposta rápida do fórum do que um monte de sites dedicados a fazer exatamente isso. Os primeiros quatro artigos do meu blog também devem ser úteis para você. Comece com dsprelated.com/showarticle/754.php .

Resposta

Pergunta 1

Se você aplicá-lo em todo o comprimento do array, o comprimento do FFT será o comprimento do array. Mas, o FFT é mais eficiente se o comprimento for uma potência de dois, então é comum preencher 0 “s no final do sinal até que seu comprimento seja uma potência de 2.

Exemplo excessivamente simples …

x = [3.4, 2.56, 1.3]

x tem um comprimento de 3, a próxima potência de 2 depois de 3 é 4, então mudamos x para ser

x = [3.4, 2.56, 1.3, 0]

e aplique um FFT com comprimento 4.

Outro grande MAS! Se o seu sinal for longo, torna-se extremamente ineficiente para fazer tudo de uma vez. Você não gostaria de tentar fazer um FFT em um arquivo de áudio do tamanho de uma música curta. Nesse caso, dividimos o sinal em pedaços de algum tamanho razoável, execute um FFT em cada um e calcule a média dos resultados.

Há boas chances de que o que você realmente deseja fazer com seus dados não seja apenas um FFT padrão, mas o processo de média que descrevi acima. Google Bartlett e Welch métodos para mais d etails.

Pergunta 2

Não estou 100% certo do que você está perguntando aqui. Vou interpretá-lo como você quer saber como a largura dos bins de frequência são determinados e executados com isso.

A largura de cada bins de frequência é determinada apenas pela taxa em que o sinal foi amostrado e o comprimento do FFT. A largura de cada compartimento é a frequência de amostragem dividida pelo número de amostras em seu FFT.

df = fs / N

Os bins de frequência começam em -fs/2 e vão até fs/2. Isso significa que se amostrados a 100 Hz para 100 samples, os bins de frequência terão largura 1 Hz. Se você tomar 200 amostras, terá agora 2x mais bins de frequência e a largura deles será de 1/2 Hz cada.

Comentários

  • Muito obrigado, era tudo que eu não ' não entendia.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *