Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print

SOFTWARES => Outros => Tópico iniciado por: tiagolimame em 31 de Agosto de 2015, 18:36

Título: Analisador de espectro de áudio
Enviado por: tiagolimame em 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!!
Título: Re:Analisador de espectro de áudio
Enviado por: minilathe em 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://paulbourke.net/miscellaneous/dft/)
http://web.mit.edu/~emin/Desktop/ref_to_emin/www.old/source_code/fft/index.html (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 (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.
Título: Re:Analisador de espectro de áudio
Enviado por: minilathe em 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://wiki.openmusiclabs.com/wiki/ArduinoFHT)
http://www.alglib.net/fasttransforms/fht.php (http://www.alglib.net/fasttransforms/fht.php)
http://www.dtic.mil/dtic/tr/fulltext/u2/a212493.pdf (http://www.dtic.mil/dtic/tr/fulltext/u2/a212493.pdf)
https://en.wikipedia.org/wiki/Discrete_Hartley_transform (https://en.wikipedia.org/wiki/Discrete_Hartley_transform)
https://pt.wikipedia.org/wiki/Transformada_discreta_de_Hartley (https://pt.wikipedia.org/wiki/Transformada_discreta_de_Hartley)
http://www.fftw.org/doc/The-Discrete-Hartley-Transform.html#The-Discrete-Hartley-Transform (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.