测试函数
arm_cfft_radix2_f32(&scfft,fft_inputbuf);
arm_cfft_radix4_f32(&scfft,fft_inputbuf);
float fft_inputbuf[FFT_LENGTH*2]; //FFT输入数组
float fft_outputbuf[FFT_LENGTH]; //FFT输出数组
int main(void)
{
/* USER CODE BEGIN 1 */
uint16_t i;
arm_cfft_radix2_instance_f32 scfft;
Cache_Enable(); //打开L1-Cache
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART3_UART_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim3); //使能定时�????3和定时器3更新中断:TIM_IT_UPDATE
arm_cfft_radix2_init_f32(&scfft,FFT_LENGTH,0,1);//初始化scfft结构体,设定FFT相关参数
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
for(i=0;i<FFT_LENGTH;i++)//生成信号序列
{
fft_inputbuf[2*i]=100+
10*arm_sin_f32(2*PI*i/FFT_LENGTH)+
30*arm_sin_f32(2*PI*i*4/FFT_LENGTH)+
50*arm_cos_f32(2*PI*i*8/FFT_LENGTH); //生成输入信号实部
fft_inputbuf[2*i+1]=0;//虚部全部�????0
}
// arm_cfft_f32(&arm_cfft_sR_f32_len4096, fft_Input_f32, ifftFlag, doBitReverse);
// data = arm_sin_f32(3.1415926/6); //对sin(PI/6 = 30�???????????)正弦值,求浮点�?�,理论上应为:1/2�???????????0.5
// printf("sin=%.2f\r\n",data);
__HAL_TIM_SET_COUNTER(&htim3,0);//重设TIM3定时器的计数器�??
timeout=0;
arm_cfft_radix2_f32(&scfft,fft_inputbuf); //FFT计算(基4�????
arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,FFT_LENGTH); //把运算结果复数求模得幅�??
//temp = ADC1247_Read();
time=__HAL_TIM_GET_COUNTER(&htim3)+(uint32_t)timeout*50000;//计算�????????用时�????????
printf("time = %0.3fms\r\n",((float)time*10)/1000);
}
}
总结:
1,主频越高,运算速度越快,功耗也越大。
2,打开Cache提速明显,但功耗略有增加。
3,基4比基2快不少。
4,点数增加一倍,运算时间大概增加一倍。
仅作笔记,不对欢迎指正