Autor Tema: AYUDA URGENTE TRANSFORMADA FFT PARA REALIZAR EL PROGRAMA  (Leído 3919 veces)

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

Desconectado franco

  • PIC10
  • *
  • Mensajes: 12
AYUDA URGENTE TRANSFORMADA FFT PARA REALIZAR EL PROGRAMA
« en: 05 de Octubre de 2006, 21:37:46 »
kiubole  kiero acer un proyecto con el dspic 2010 para realizar una FFT a una señal de entrada   y me estoi basando en el programa ke viene de ejemplo en MPLAB pero en ese prog  viene simulada la entrada y kiero ver komo lleno el arreglo de entradas reales y komo sako la FFT para el resultado de la transfromada en un osciloscopio

este es mi prog:  SI AI OTRO PROGRAMA MAS SENCILLO O KOMO SEA PERO KE FUNCIONE LES AGRADECERIA KE ME LO PASARAN

#include <p30f2010.h>
#include <stdio.h>
#include <dsp.h>

#include "fft1.h"
#define ENTRADA     PORTBbits.RB0  /****** aki es donde kiero ke este la señal de entrada*/
#define SALIDA      PORTEbits.RE0  

_FOSC(CSW_FSCM_OFF & XT);                
_FWDT(WDT_OFF);                          
_FBORPOR(PBOR_ON & MCLR_DIS);            
_FGS(CODE_PROT_OFF);                    


   

   fractcomplex ENTRADAS[MUESTRAS]__attribute__ ((section (".ydata, data, ymemory"),aligned (MUESTRAS * 2 *2)));         
   
   #ifndef TABLA_DE_COEFICIENTES
     fractcomplex COEFICIENTES[MUESTRAS/2] __attribute__ ((section (".xbss, bss, xmemory"), aligned (MUESTRAS*2)));
   #else
     extern const fractcomplex COEFICIENTES[MUESTRAS/2]__attribute__ ((space(auto_psv), aligned (MUESTRAS*2)));
   #endif


   int   peakFrequencyBin = 0;            
   unsigned long peakFrequency = 0;         


    int main(void)
   {

   int i = 0;
   fractional *p_real = &ENTRADAS[0].real ;
   fractcomplex *p_cmpx = &ENTRADAS[0] ;
    
   TRISB=0XFFFF;   /****no se si esten bien estas abilitaciones
                TRISE=0X0000;
   ADPCFG=0xFFFF;

    #ifndef TABLA_DE_COEFICIENTES               
   TwidFactorInit (LOG2_MUESTRAS, &COEFICIENTES[0], 0);   
     #endif


   for ( i = 0; i < MUESTRAS; i++ )                
     {               
      *p_real = ENTRADA >>1 ;   
      *p_real++;         
     }   
        
        p_real = &ENTRADAS[(MUESTRAS/2)-1].real ;   
       p_cmpx = &ENTRADAS[MUESTRAS-1];
   
   for ( i = MUESTRAS; i > 0; i-- )        
   {               
      (*p_cmpx).real = (*p_real--);   
      (*p_cmpx--).imag = 0x0000;   
   }
   
#ifndef TABLA_DE_COEFICIENTES
   FFTComplexIP (LOG2_MUESTRAS, &ENTRADAS[0], &COEFICIENTES[0], COEFFS_IN_DATA);
#else
   FFTComplexIP (LOG2_MUESTRAS, &ENTRADAS[0], (fractcomplex *) __builtin_psvoffset(&COEFICIENTES[0]), (int) __builtin_psvpage(&COEFICIENTES[0]));
#endif

   BitReverseComplex (LOG2_MUESTRAS, &ENTRADAS[0]);
   SquareMagnitudeCplx(MUESTRAS, &ENTRADAS[0], &ENTRADAS[0].real);
   VectorMax(MUESTRAS/2, &ENTRADAS[0].real, &peakFrequencyBin);
   peakFrequency = peakFrequencyBin*(SAMPLING_RATE/MUESTRAS);
      

                *p_real = &ENTRADAS[0].real ;
   *p_cmpx = &ENTRADAS[0] ;

   
for ( i = 0; i < MUESTRAS; i++ )                /* SEGUN IO AKI SAKO EL RESULTADO DE LA ffT */
     {               
      SALIDA = *p_real >>1 ;   
      *p_real++;         
     }   

for
   while(1);
}

Desconectado Rocketer

  • PIC10
  • *
  • Mensajes: 1
Re: AYUDA URGENTE TRANSFORMADA FFT PARA REALIZAR EL PROGRAMA
« Respuesta #1 en: 22 de Noviembre de 2006, 14:55:54 »
Hola franco, podrías poner cual es el problema que tienes con la compilación del programa?.

Uno de los detalles que debes de tomar en cuenta es que el dsPIC30F2010 tiene tan solo 512 bytes de memoria, por lo tanto, solo podría realizar una FFT para 64 muestras a lo más. El programa original esta hecho para hacer un calculo de 256 muestras pensado para ser ejecutado en el dsPIC30F6014, el cual contiene 4Kbytes de memoria. El numero de muestras, las cambias en el archivo fft.h incluido en el proyecto.


Por otra parte en el código:

for ( i = 0; i < MUESTRAS; i++ )                /* SEGUN IO AKI SAKO EL RESULTADO DE LA ffT */
     {               
      SALIDA = *p_real >>1 ;   //.... en esta linea equivale a dividir el numero apuntado por *p_real entre 2.
                                            //... el ejemplo lo incluye porque la biblioteca de la FFTcomplexIP recomienda que los
                                            //... de entrada esten dentro del rango [-0.5:0.5].
      *p_real++;         
     }   

Cambia la linea 3, por
      SALIDA = *p_real << 1 ; //... aqui multiplicas el resultado por 2




Desconectado franco

  • PIC10
  • *
  • Mensajes: 12
Re: AYUDA URGENTE TRANSFORMADA FFT PARA REALIZAR EL PROGRAMA
« Respuesta #2 en: 08 de Diciembre de 2006, 20:09:09 »
ok gracias por tu ayuda


vamos a probarlo y checar los resultados





 

anything