La Beagel board, o similares (como la IGEP) llevan un ARM grande con DSP incluido. El funcionamiento interno del DSP viene que ni al pelo para los algoritmos típicos de FFT.
Por otro lado, estoy haciendo testeo de sonido con FFT's sobre 8196 puntos con un PC, y necesito dicha resolución para calcular con precisión la frecuencia de los picos. Pero para la representación gráfica, con 1024 puntos tenemos una escala de 512 frecuencias, que ya ocupa una buena parte de la pantalla de un monitor normal.
Una buena lectura es el 'numerical c receipes', gratuito en inglés por la red, donde hay implementaciones de FFT en C, aunque no me acaban de convencer. El algoritmo en sí no es excesivamente complicado, pero tiene muchos cálculos a realizar dentro de un bucle, y eso es algo que suele enlentecer mucho las rutinas, ya que los micros habituales no están muy pensados para este tipo de operaciones.
Aún así, para el manejo real de la FFT, hace falta algo más de procesado sobre los resultados de la FFT pura. Ésta devuelve números complejos que generalmente se suelen convertir a módulo (lo normal es expresarlo en dB) y fase (grados). Eso implica el uso de logaritmos y arcotangentes, ambos cálculos muy pesados para la CPU. Además, según mi experiencia, un filtrado mínimo sobre el resultado es importante para una buena reproducción gráfica, así como para cierto tipo de trabajo/procesado.
En mi caso, uso una ventana de Hamming sobre los datos en bruto, y un filtrado del módulo por Savitzky-Golay. 16 bits, ya que 8 no son suficientes. Representación en dB.
De todo ello, rápidamente deducí que hace falta un micro de 16 o más bits para poder trabajar cómodamente. El uso de múltiples acumuladores para mantener el índice, los contadores y los demás valores dentro del micro sin acceder a RAM acelera el proceso. Unidades MAC son fenomenales y aún más ventajosas.
Realizar un documento es español con todas esta partes claramente separadas y explicadas puede ser interesante y formativo.