你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G431测试两个常用的FFT运算时间

[复制链接]
数码小叶 发布时间:2020-7-29 09:48
很感谢@STMCU  把论坛bug修复了,自从换了手机号,好几年的时间都不能参加兑换了,一直是手机号格式不合法,虽然以前也反映过多次,不过bug一直存在。这次不但可以参加了,还兑换到了一块G4开发板,原本是想兑换NUCLEO_STM32F446的
G4系列还是第一次接触,看官网介绍,G4系列,处于主流行产品定位。模拟外设资源丰富,更像F3的升级产品。nucleo-G4板最直观的变化就是板载的仿真器从V2版升级到V3版了,之前主控是STM32F103C8,现在居然是高大上的F7了
微信图片_20200729090253.jpg


微信图片_20200729090328.jpg

因为是第一次使用,电脑还需要安装V3版的驱动
Snipaste_2020-07-29_09-19-17.jpg

不论是keil还是cubeMX,在安装的PCK里都有DSP的运算库,可以直接调用

Snipaste_2020-07-28_14-23-01.jpg

Snipaste_2020-07-28_14-22-49.jpg


直接添加相关的文件到工程中去,因为这里是要测试arm_cfft_f32与arm_rfft_fast_f32两个函数,因此添加如下文件
Snipaste_2020-07-28_14-38-32.jpg
其中,在lib目录下,有四个文件
Snipaste_2020-07-28_14-39-50.jpg
其后缀分别是Big endian,Floating Point Unit,Little endian,大端还是小端存储模式,是否支持浮点,因此加入了arm_cortexM4lf_math.lib。

计算FFT要涉及大量的浮点运算,所以首先要打开浮点运算单元,实际在现在的keil版本中,默认都是打开的


Snipaste_2020-07-28_14-27-20.jpg
省去了以前的开启宏定义:__FPU_USED。
要计算FFT,还有定义几个另外的宏
ARM_MATH_CM4,__CC_ARM,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING,__FPU_PRESENT

Snipaste_2020-07-28_14-18-36.jpg

最后包含头文件
  1. #include "arm_math.h"
  2. #include "arm_const_structs.h"
  3. #include "stdio.h"
  4. #include "stdbool.h"
  5. #include <stdlib.h>
复制代码

这里省去了FFT的验证内容,就是生成一个合成波数据,对标准数据进行FFT,验证代码的准确性。验证无误后,进行主要的目的,时间测算。ADC采集数据,进行1024点FFT计算

  1. HAL_GPIO_WritePin(Ceshi_GPIO_Port, Ceshi_Pin, GPIO_PIN_RESET);
  2. HAL_Delay(50);
  3. HAL_GPIO_WritePin(Ceshi_GPIO_Port, Ceshi_Pin, GPIO_PIN_SET);
  4. HAL_Delay(50);
  5. HAL_GPIO_WritePin(Ceshi_GPIO_Port, Ceshi_Pin, GPIO_PIN_RESET);
  6. HAL_TIM_Base_Start_IT(&htim3);
  7. HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_Value_Buff, SIZE);
  8. HAL_TIM_Base_Start(&htim8);

  9. while(Buf_OK!=true);


  10. HAL_GPIO_WritePin(Ceshi_GPIO_Port, Ceshi_Pin, GPIO_PIN_SET);


  11. Buf_OK=false;

  12. arm_rfft_fast_init_f32(&sfft, FFT_LENGTH);
  13. for(i=0;i<FFT_LENGTH;i++)
  14. {
  15. fft_inputbuf[i]=(float)ADC_Value_Buff[j]*33/40960;
  16. j=j+2;
  17. }

  18. HAL_GPIO_WritePin(Ceshi_GPIO_Port, Ceshi_Pin, GPIO_PIN_RESET);

  19. arm_rfft_fast_f32(&sfft,fft_inputbuf,fft_outputbuf,0);

  20. HAL_GPIO_WritePin(Ceshi_GPIO_Port, Ceshi_Pin, GPIO_PIN_SET);

  21. arm_cmplx_mag_f32(fft_outputbuf,fft_outputbuf2,FFT_LENGTH/2);


  22. HAL_GPIO_WritePin(Ceshi_GPIO_Port, Ceshi_Pin, GPIO_PIN_RESET);


  23. for(int i=0;i<FFT_LENGTH/2;i++)
  24. {
  25. if(i!=0)
  26. {
  27. printf("%d: %.2f\r\n",i,fft_outputbuf2[i]*2/1024);
  28. }
  29. else
  30. {
  31. printf("%d: %.2f\r\n",i,fft_outputbuf2[i]/1024);
  32. }        
  33. }

  34. HAL_GPIO_WritePin(Ceshi_GPIO_Port, Ceshi_Pin, GPIO_PIN_SET);


  35. for(int i=0;i<FFT_LENGTH;i++)
  36. {
  37. fft_inputbuf[2*i]=(float)ADC_Value_Buff[j]*33/40960;

  38. fft_inputbuf[2*i+1]=0;
  39. j+=2;
  40. }

  41. HAL_GPIO_WritePin(Ceshi_GPIO_Port, Ceshi_Pin, GPIO_PIN_RESET);


  42. arm_cfft_f32(&arm_cfft_sR_f32_len1024,fft_inputbuf,0,1);

  43. HAL_GPIO_WritePin(Ceshi_GPIO_Port, Ceshi_Pin, GPIO_PIN_SET);



  44. arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,FFT_LENGTH);


  45. HAL_GPIO_WritePin(Ceshi_GPIO_Port, Ceshi_Pin, GPIO_PIN_RESET);
复制代码

arm_cfft_f32与arm_rfft_fast_f32全部用来计算实数,虚数部分程序里做赋0处理。


50ms的启动信号:
Snipaste_2020-07-14_10-03-41.jpg

ADC采集时间:
Snipaste_2020-07-14_10-04-14.jpg

数组赋值:
Snipaste_2020-07-14_10-04-36.jpg

arm_rfft_fast_f32的计算时间,mag_32时间:
Snipaste_2020-07-14_10-05-01.jpg

printf输出:
Snipaste_2020-07-14_10-06-00.jpg


数组赋值:
Snipaste_2020-07-14_10-06-34.jpg

arm_cfft_f32计算时间:
Snipaste_2020-07-14_10-06-43.jpg

mag_32计算时间:
Snipaste_2020-07-14_10-06-54.jpg

缩小验证:
Snipaste_2020-07-14_10-11-48.jpg
示波器测量:
微信图片_20200728162118.jpg

微信图片_20200728162126.jpg

微信图片_20200728162145.jpg

用了好几种方法来测试时间,相互验证,printf函数、RTC函数、定时器、示波器、逻辑分析仪,最后结果统一,说明没问题。可以看出arm_rfft_fast_f32确实要比arm_cfft_f32快很多,对于1024点的计算,一个是434us,一个是710us。
收藏 评论0 发布时间:2020-7-29 09:48

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版