wenyangzeng 发表于 2018-1-2 20:44:39

Nucleo-L4R5ZI评测4 浮点运算能力

Nucleo-L4R5ZI评测4 浮点运算能力

    STM32L4R5具有浮点运算和DSP指令运算能力的芯片,本次评测就让STM32L4R5进行1024点的傅里叶运算。模拟一个采样信号的直流分量为100,外加2个正弦信号和一个余弦信号的波形。

1、在STM32CubeMX中配置芯片时钟,生成MDK5工程,主频120MHZ。




2、MDK5工程中加载DSP库





3、使能浮点运算



4、FFT函数代码
static void FFT_read(void)
{uint16_t i;
arm_cfft_radix4_instance_f32 scfft;
arm_cfft_radix4_init_f32(&scfft,BUFFER_SIZE,0,1);      
   for(i=0;i<BUFFER_SIZE;i++)                                                      
   {
   inputbuf=100+10*arm_sin_f32(2*PI*i/BUFFER_SIZE)+30*arm_sin_f32(2*PI*i*40/BUFFER_SIZE)+50*arm_cos_f32(2*PI*i*80/BUFFER_SIZE);
          inputbuf=0;                                                                        
             }
   arm_cfft_radix4_f32(&scfft,inputbuf);                     
   arm_cmplx_mag_f32(inputbuf,outputbuf,BUFFER_SIZE);
}

int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
                FFT_read();
                GPIOC->ODR ^=0x0100;

}
6、GPIO预先配置PC8为输出,每完成1次FFT运算改变PC8输出状态,在示波器上观察PC8高低电平就能得到FFT运算时间。



测试结果:
STM32L4R5每作一次1024点的傅里叶运算大概需要24mS。
笔者之前曾经对不同芯片进行同样的测试:
STM32F412:18mS
STM32F446:4mS
STM32F767:1.5mS

可见:虽然STM32L4R5是一款主推低功耗的芯片,但是其浮点运算能力还是非常优秀的。



ALTIUM2 发表于 2018-1-2 21:51:37

:loveliness: 学习了,有理有据 感谢分享啊!

wenyangzeng 发表于 2018-1-2 21:59:11

ALTIUM2 发表于 2018-1-2 21:51
学习了,有理有据 感谢分享啊!

多谢支持

zhjb1 发表于 2018-1-3 06:56:17

不错不错,学习了。实验设计的很有意思。

pythonworld 发表于 2018-1-3 08:58:30

包括计算波形的时间啊,真正一次FFT时间要短的多吧?

whtt 发表于 2018-1-3 09:29:03

M4核是单精度浮点单元,所以进行运算时候数据是要转换为单精度的。我不知道楼主的数据是否是单精度,f4和f7的fft差那么多,我觉得原因是F767是双精度的浮点单元,数据有可能也是双精度的。希望楼主继续深入测试

toofree 发表于 2018-1-3 09:45:34

观摩学习:)

wenyangzeng 发表于 2018-1-3 09:52:44

本帖最后由 wenyangzeng 于 2018-1-3 09:56 编辑

whtt 发表于 2018-1-3 09:29
M4核是单精度浮点单元,所以进行运算时候数据是要转换为单精度的。我不知道楼主的数据是否是单精度,f4和f7 ...
应该只是单精度的。F7本身运行的速度快多了。

wenyangzeng 发表于 2018-1-3 09:53:37

pythonworld 发表于 2018-1-3 08:58
包括计算波形的时间啊,真正一次FFT时间要短的多吧?

FFT_read()函数的耗时。

samhong 发表于 2019-1-30 01:32:13

好测评,谢谢分享!
页: [1]
查看完整版本: Nucleo-L4R5ZI评测4 浮点运算能力