Autor Tema: Transformada rápida de Fourier - C#  (Leído 6932 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8259
    • Sitio de MigSantiago
Transformada rápida de Fourier - C#
« en: 02 de Noviembre de 2009, 11:20:40 »
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

Código: [Seleccionar]
           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.html

Y listo, tenemos una FFT eficiente lista para usar en C#.  :mrgreen:

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.  ;-)
« Última modificación: 02 de Noviembre de 2009, 11:24:28 por migsantiago »