你(们)好
我尝试在 MCU 上实施 RFFT、但在处理数据以及使用我从 Matlab 获得的结果检查结果时、有很大差异... FFT 的代码如下所示:
bool FFT (uint32_t FFT_size、float32_t * input_data、float32_t * output_data) { FFT_don=0; arm_status; arm_rfft_instance_f32 S; arm_CFFT_radx4_instance_f32 S_CFFT; status = arm_math 成功; /*初始化 RFFT/RIFFT 模块 ARM_STATUS ARM_rfft_init_F32 ( ARM_rfft_instance_F32 * S、 ARM_CFFT_radx4_instance_F32 * S_CFFT、 UINT32_t fftLeniffal、 U&32_t RevertFlagR、 UINT32_t FSIT_S 、UINT32_t FSIZE = TRFSIFSIZE *、UINT32_TRIFT_TRIFT_TRIFT/ TRIFT_TRIFT/ TRFSIZE = RIT_TRIFT/ TRIFT/ TRIFT/ TRIFT* TRIFT_ /*通过 CFFT/CIFFT 模块处理数据*/ arm_rfft_F32 (&S、input_data、output_data); /*通过复数幅度模块处理数据,以 计算每个 bin 的幅度*/* void arm_cmplx_mag_F32 ( pSrat32_t *、 atat_t_float_t_t* 、mag_out_t_outputs *、num_t_t_t_t_num_translift_t_translation_t_int_outputs);* if (status!= ARM_MATH_SUCCESS) { while (1); } if (FFT_input==3) FFT_DONE = 1; return FFT_DONE; }
我上传用于调用函数的代码
if (FFT_INPUT=0) { DATA_COUNT=0; m_COUNT=0;//;order_filter; DO{ mulcate_data1[data_count]=mulc_dfiltered [m_count]; data_count++; m_count++; } while (data_countnthnel注意 事项<fft_Size_1_2);//sizeof(muscle_data1)); fft(fft_Size_1_2, muscle_data1, fft_output1); fft_input++; } if (FFT_input=1) { data_count=0; do{ must_data2[data_count]=mcus_filtered [m_count]; m_count++; data_count++; }while (<fft_Size_1_2);//sizeof(muscle_data2)); ) FFT (FFT_SIZE_1_2、Muscum_data2、FFT_output2); FFT_INPUT++; } if (FFT_INPUT=2) { DATA_COUNT=0; do{ must_data3[data_count]=mcus_filter[m_count]; m_count++; data_count+ ;while (countines+<fft_Size_3_4);//sizeof(muscle_data2)); ) FFT (FFT_SIZE_3_4、Muscum_data3、FFT_output3); FFT_INPUT++; } if (FFT_INPUT=3) { DATA_COUNT=0; DO{ Muscum_data4[DATA_COUNT]=Muscum_filtered [m_count]; m_count++; data_count+;while (count+)
以及包含以下变量的代码:
/*---------------------------------- * FFT 的全局变量 *------------------------------------------------------- /static uint32_t FFT_size_1_2 = 2048; static uint32_t FFT_size_3_4 = 512; static uint32_t FFT_size_total = 5120; char FFT_input; bool FFT_done; static uint32_t floutflagR = 0; static uint32_t traduint32_t statust = 2048;static uint32_t_t statuint32_t /t statuint32_t statut /t statuint32_t /t statut /t statuint32_t /t /t statuintut /t /t statuint32_t /t statuintut /t /t statuint32_t statut /t float32_t Muscle data3[512]; float32_t Muscle data4[512]; float32_t FFT_output1[4096]; float32_t FFT_output2[4096]; float32_t FFT_output3[1024]; float32_t FFT_output4[1024]; float32_t Musce_FFT_out[5120];
我不n´t 发生了什么... 我是不是给 rfft init 调用了错误的、还是缺少了什么??
谢谢!!