TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: franco en 05 de Octubre de 2006, 21:37:46

Título: AYUDA URGENTE TRANSFORMADA FFT PARA REALIZAR EL PROGRAMA
Publicado por: franco 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);
}
Título: Re: AYUDA URGENTE TRANSFORMADA FFT PARA REALIZAR EL PROGRAMA
Publicado por: Rocketer 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



Título: Re: AYUDA URGENTE TRANSFORMADA FFT PARA REALIZAR EL PROGRAMA
Publicado por: franco en 08 de Diciembre de 2006, 20:09:09
ok gracias por tu ayuda


vamos a probarlo y checar los resultados