我试图在STM32F407G中使用rfft功能,当我将其与online fft calculator 进行比较时,我得到的结果是错误的。我给出了一个样本输入为{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}。我使用在线计算器的结果如下 -
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
但使用我的代码的结果完全不同。我得到以下结果 -
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
这是我的代码 -
#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 */
有什么问题?我无法弄明白,如果有人可以提供帮助,那就太棒了。
答案 0 :(得分:0)
我认为你的bitReverse配置正好与你想要的相反。
试试uint32_t doBitReverse = 1;
因此Bitreverse被激活(这意味着没有反转位) 我知道这似乎很混乱。