Aquí las instrucciones para usar la FFT en C# y cómo escalar sus valores.
Fuente: Exocortex.DSP
http://www.exocortex.org/dsp/+ Hay que descargar el archivo Exocortex.DSP v2.0 (150kB)
+ Los archivos de interés son...
- Fourier.cs, Complex.cs, ComplexF.cs, ComplexArray.cs, FourierDirection.cs
+ Incluirlos a nuestro proyecto en el IDE de C#
Requerimientos de la FFT
- El arreglo Complex debe ser una potencia de 2, pudiendo rellenar las muestras faltantes con ceros
- La propiedad Im debe ir a ceros y Re debe contar con la señal muestreada
- El resultado de la FFT queda en Re e Im por lo que es recomendable copiar los vectores de entrada
double frec = 200;
double amplitud = 1D;
int fmuestreo = 1024;
int muestras = 32768;
Complex[] signal = new Complex[muestras];
//Senoidal
for (int i = 0; i < muestras; ++i)
signal[i].Re = amplitud * Math.Sin(2D * Math.PI * frec * i / fmuestreo);
Fourier.FFT(signal, muestras, FourierDirection.Forward);
Para escalar la señal resultante solo hay que seguir estas instrucciones...
http://www.mathworks.com/support/tech-notes/1700/1702.htmlY listo, tenemos una FFT eficiente lista para usar en C#.
http://img204.imageshack.us/img204/5913/fft.png
Se me ocurre que este código puede modificarse para un PIC pero es bastante lento y puede que no convenga emplearlo. Si llego a adaptarlo les digo si conviene o no.
