Autor Tópico: Analisador de espectro de áudio  (Lida 1600 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline tiagolimame

  • Novato
  • *
  • Posts: 4
  • Sexo: Masculino
  • Forum GUIA CNC - A Maior comunidade CNC do Brasil
  • Cidade - UF: pirapozinho SP
  • Nome:: tiago
  • Profissão: estudante
Analisador de espectro de áudio
« Online: 31 de Agosto de 2015, 18:36 »
Ultimamente estive trabalhando em um projeto, um Analisador de espectro de áudio, 20Hz a 20KHz, com display de LED 20 x 20 igual esse monte que tem por ai. Tenho todo o hardware pronto, e software falta o maior detalhe, um bom algoritmo para o calculo da FFT, o que estou usando esta disponível no livro "Numerical Recipes" , porém quando implementei no meu projeto, o mesmo não teve bom desempenho, demora cerca de 120ms para fazer o calculo.
 
Estou utilizando um microcontrolador da ST rodando a 16MHz reais. Um vídeo que vi no Youtube o cara faz o mesmo processo com um  Atmega rodando a 8MHz, diz ele. porém não sei qual algoritmo ele utiliza.
 
Peço a ajuda de vocês porque preciso de um algoritmo para o calculo da FFT ou FHT em linguagem C, alguém tem algo ?
 
Obrigado!!



Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Analisador de espectro de áudio
« Resposta #1 Online: 31 de Agosto de 2015, 18:59 »
Ultimamente estive trabalhando em um projeto, um Analisador de espectro de áudio, 20Hz a 20KHz, com display de LED 20 x 20 igual esse monte que tem por ai. Tenho todo o hardware pronto, e software falta o maior detalhe, um bom algoritmo para o calculo da FFT, o que estou usando esta disponível no livro "Numerical Recipes" , porém quando implementei no meu projeto, o mesmo não teve bom desempenho, demora cerca de 120ms para fazer o calculo.
 
Estou utilizando um microcontrolador da ST rodando a 16MHz reais. Um vídeo que vi no Youtube o cara faz o mesmo processo com um  Atmega rodando a 8MHz, diz ele. porém não sei qual algoritmo ele utiliza.
 
Peço a ajuda de vocês porque preciso de um algoritmo para o calculo da FFT ou FHT em linguagem C, alguém tem algo ?
 
Obrigado!!

Há vasta literatura sobre o assunto, alguns links:
http://paulbourke.net/miscellaneous/dft/
http://web.mit.edu/~emin/Desktop/ref_to_emin/www.old/source_code/fft/index.html
http://www.codeproject.com/Articles/9388/How-to-implement-the-FFT-algorithm

Cabe ressaltar que além da FFT é necessário implementar previamente uma função de janelamento dos dados antes de calcular a FFT. É bom dar uma lida no assunto e entender o que são a FT, FFT, DFT, DTFT, .... Além disso, a precisão esperada deve ser definida (16, 32, 64, ... bits).

Além disso, o programa Matlab possui várias bibliotecas e programas sobre FFT, DFT, DTFT, ....

Esse tipo de analisador é facilmente implementado através de uma boa placa de som e softwares específicos (Audacity, Matlab, ...). Dependendo da qualidade (banda passante) da placa de som, o espectro pode ser maior do que 20 Hz - 20 KHz.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderador
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Analisador de espectro de áudio
« Resposta #2 Online: 31 de Agosto de 2015, 23:44 »
Complementando, para calcular o espectro de frequência de um sinal, além da FFT, há a Transformada de Hartley (FHT), que pode ser um pouco mais rápida em termos de processamento, pois gera saídas reais ao invés da FFT tradicional (a definição matemática tradicional com saída complexa). Cabe mencionar que há versões de algoritmos FFT que calculam apenas a componente real e podem ser tão rápidos quanto a FHT.

Links - Transformada de Hartley (FHT):
http://wiki.openmusiclabs.com/wiki/ArduinoFHT
http://www.alglib.net/fasttransforms/fht.php
http://www.dtic.mil/dtic/tr/fulltext/u2/a212493.pdf
https://en.wikipedia.org/wiki/Discrete_Hartley_transform
https://pt.wikipedia.org/wiki/Transformada_discreta_de_Hartley
http://www.fftw.org/doc/The-Discrete-Hartley-Transform.html#The-Discrete-Hartley-Transform

Se você vai usar a matriz com 20 x 20 LEDs, assumindo que a escala vertical possui 20 LEDs, são necessários 256 níveis. Ou seja, um algoritmo de FFT ou FHT de 16 bits seguido de uma etapa de aproximação de 16 para 8 bits seria mais do que adequado.

Com uma frequência de sinal limitada a 20 KHz, a frequência de amostragem do conversor A/D deveria ser 40 KHz (no mínimo) e um tempo de processamento da ordem de 25 microssegundos, se for calcular a FFT em tempo real a cada nova amostra do conversor A/D.
« Última modificação: 31 de Agosto de 2015, 23:55 por minilathe »