Resultado de FFT incorrecto al usar la función rfft en STM32F4

0

Estoy tratando de usar la función rfft en STM32F407G y obtengo resultados erróneos cuando lo comparo con una calculadora de pies cuadrados en línea. Doy una entrada de muestra como {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 , 23,24,25,26,27,28,29,30,31,32}. Mis resultados con la calculadora en línea son los siguientes:

1)   528 + 0j 
2)  -16 + 162.450726j
3)  -16 + 80.437432j
4)  -16 + 52.744931j
5)  -16 + 38.627417j
6)  -16 + 29.933895j
7)  -16 + 23.945692j
8)  -16 + 19.496056j
9)  -16 + 16j
10) -16 + 13.130861j
11) -16 + 10.690858j
12) -16 + 8.552178j
13) -16 + 6.627417j
14) -16 + 4.853547j
15) -16 + 3.182598j
16) -16 + 1.575862j
17) -16 + 0j
18) -16 - 1.575862j
19) -16 - 3.182598j
20) -16 - 4.853547j
21) -16 - 6.627417j
22) -16 - 8.552178j
23) -16 - 10.690858j
24) -16 - 13.130861j
25) -16 - 16j
26) -16 - 19.496056j
27) -16 - 23.945692j
28) -16 - 29.933895j
29) -16 - 38.627417j
30) -16 - 52.744931j
31) -16 - 80.437432j
32) -16 - 162.450726j

Pero los resultados usando mi código son completamente diferentes. Obtengo el siguiente resultado -

ffttestop[0]    float32_t   528 
ffttestop[1]    float32_t   -16 
ffttestop[2]    float32_t   -19.6766739 
ffttestop[3]    float32_t   125.12075   
ffttestop[4]    float32_t   -22.83638   
ffttestop[5]    float32_t   46.0686264  
ffttestop[6]    float32_t   -24.1503487 
ffttestop[7]    float32_t   25.8768311  
ffttestop[8]    float32_t   -25.7224121 
ffttestop[9]    float32_t   15.1554413  
ffttestop[10]   float32_t   -28.2019958 
ffttestop[11]   float32_t   7.10556698  
ffttestop[12]   float32_t   -32.8137932 
ffttestop[13]   float32_t   -1.21792603 
ffttestop[14]   float32_t   -43.8981056 
ffttestop[15]   float32_t   -14.4978828 
ffttestop[16]   float32_t   -96.4374313 
ffttestop[17]   float32_t   -64.4374313 
ffttestop[18]   float32_t   26.5798321  
ffttestop[19]   float32_t   48.0752258  
ffttestop[20]   float32_t   6.12293482  
ffttestop[21]   float32_t   25.4729309  
ffttestop[22]   float32_t   -0.353181839    
ffttestop[23]   float32_t   16.9155769  
ffttestop[24]   float32_t   -3.09499454 
ffttestop[25]   float32_t   11.9728451  
ffttestop[26]   float32_t   -3.78621292 
ffttestop[27]   float32_t   8.55855846  
ffttestop[28]   float32_t   -1.21792793 
ffttestop[29]   float32_t   6.12293386  
ffttestop[30]   float32_t   29.4866867  
ffttestop[31]   float32_t   6.05591106  

Aquí está mi código -

#include "stm32f4xx.h"
#include "arm_math.h"
#include "arm_const_structs.h"
#include "core_cm4.h"


#define TEST_LENGTH_SAMPLES 32

/* -------------------------------------------------------------------
*  Input and Output buffer Declarations for FFT
* ------------------------------------------------------------------- */
float32_t ffttestip[TEST_LENGTH_SAMPLES]=
{
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
};
static float32_t ffttestop[TEST_LENGTH_SAMPLES];

/* ------------------------------------------------------------------
* Global variables
* ------------------------------------------------------------------- */
uint16_t fftSize = 32;
uint8_t ifftFlag = 0;
uint32_t doBitReverse = 0;


int main(void)
{
    //arm_cfft_instance_f32 * S;
    //arm_cfft_f32(&arm_cfft_sR_f32_len16, ffttestip, ifftFlag, doBitReverse);
    arm_rfft_fast_instance_f32 S;
    arm_rfft_fast_init_f32  (&S,fftSize);
    arm_rfft_fast_f32(&S,ffttestip,ffttestop,ifftFlag);
    //arm_cmplx_mag_f32(ffttestop,ffttestip,fftSize);


  while(1);
 return 0;
}

 /** \endlink */

¿Cuál es el problema? No puedo resolverlo, por lo que sería fantástico si alguien pudiera ayudar.

    
pregunta user3147192

0 respuestas

Lea otras preguntas en las etiquetas