DSP视频教程第13期:汇编浮点库qfplib性能媲美TI的IQmath和硬件FPU,强于C库的math和ARM DSP库,适用于M0和M3(2024-10-12)

视频教程汇总帖:https://www.armbbs.cn/forum.php?mod=viewthread&tid=110519


 

本期专题视频给大家分享一个qfplib浮点库,这个库早期周报给大家分享过,后来部分网友测试非常给力,所以我们DSP视频教程也给大家分享一期

【视频】

https://www.bilibili.com/video/BV1Te2DY1Edx/


【简介】

代码采用汇编实现,qflib的性能媲美TI的IQmath和硬件FPU,强于C库的math和ARM DSP库。并且易于使用,不需要用户手动做浮点转定点,定点转浮点之类的操作。

1、ARM DSP库的三角函数浮点是直接调用的C库实现,所以性能一般,并没有加速作用。
2、M3的qfplib和MDK的C库,IAR的C库以及GoFast库的比较,可以看到速度优势比较明显。单位时钟周期数

3、M0的qflib库和TI IQmath的浮点运算比较

如果是单纯的qflib浮点和IQmath定点比较,IQmath有优势,如果是直接操作浮点数值,IQmath就没有优势了(甚至强于IQmath,后面专门实测下),因为要做浮点转定点,定点转浮点处理函数,时间就比较长了。

而且从应用的角度来说,使用浮点库qflib操作更加便捷,不需要额外调用API做定点转浮点和浮点转定点,用户全程浮点数据操作即可

X = _IQ24(1.0f);
Y = _IQ24(1.0f);
Z = _IQ24atan2(Y, X);
 
W = _IQ24toF(Z);

4、从时钟周期上来看,媲美硬件FPU浮点计算

5、同时还提供了一个M0 tiny版的库,适合Flash容量比较小的M0内核芯片使用


【移植】

1、这个库只有一个.h头文件和一个.s汇编文件。所以移植比较简单,添加工程工程即可。
2、有问题的地方是汇编库的兼容问题,这个汇编库在GCC上使用直接添加就可以正常编译,如果是MDK上使用,请使用AC6,并在汇编Option的ASM汇编选项里面设置选择ARMCLANG AUTO


【参考资料】

1、参考案例下载
注:这里提供的例子是采用我们H7板子关闭硬件FPU使用,这种情况可以使用M3的库测试,否则运算不正确
V7-Qfplib template.7z (1.31MB)

2、源代码库下载
M0 tiny版 qfplib-m0-tiny-20200617.7z (18.04KB)
M0 全功能版 qfplib-m0-full-20240105.7z (27.49KB)
M3版 qfplib-m3-20160408.7z (23.49KB)

3、官方地址
https://www.quinapalus.com/qfplib.html

4、DSP视频教程第12期:TI开源分享IQmath DSP源码,适用于所有Cortex-M内核,本期教程做个手把手移植
https://www.armbbs.cn/forum.php?mod=viewthread&tid=119296

5、DSP视频教程第8期:DSP库三角函数,C库三角函数和硬件三角函数的性能比较,以及与Matlab的精度比较
https://www.armbbs.cn/forum.php?mod=viewthread&tid=112675

posted @ 2024-10-14 16:59  硬汉嵌入式  阅读(42)  评论(0编辑  收藏  举报