Pergunta

Quero fazer um programa que grave dados de áudio usando o Portaudio (eu fiz essa parte) e, em seguida, exibirá as informações de frequência desse áudio gravado (por enquanto, gostaria de exibir a frequência média de cada grupo de amostras quando eles entram).

De algumas pesquisas que fiz, sei que preciso fazer uma FFT. Então, pesquisei uma biblioteca para fazer isso, em C, e encontrei o FFTW.

No entanto, agora estou um pouco perdido. O que exatamente devo fazer com as amostras que gravei para extrair algumas informações de frequência deles? Que tipo de FFT devo usar (suponho que precisará de um dados real 1D?)?

E uma vez que eu fiz o FFT, como obtenho as informações de frequência dos dados que isso me fornece?

EDIT: Agora encontrei também o algoritmo de autocorrelação. É melhor? Mais simples?

Muito obrigado antecipadamente, e desculpe, não tenho absolutamente nenhuma experiência se isso. Espero que faça pelo menos um pouco de sentido.

Foi útil?

Solução

Para converter suas amostras de áudio em um espectro de energia:

  • Se seus dados de áudio forem dados inteiros, converta -os em ponto flutuante
  • Escolha um tamanho de FFT (por exemplo, n = 1024)
  • Aplicar um função da janela para n amostras de seus dados (por exemplo Hanning)
  • Use uma FFT real para o complexo de tamanho n para gerar dados de domínio de frequência
  • Calcule a magnitude dos seus dados complexos de domínio de frequência (magnitude = sqrt(re^2 + im^2))
  • Opcionalmente converte magnitude em uma escala de log (dB) (magnitude_dB = 20*log10(magnitude))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top