控制/MCU
一、前言
在ARM单片机开发中,有CMSIS中提供的DSP数字信号处理函数库。这个函数库中包括有基本的数据函数、快速数学运算、复数运算、滤波器、矩阵、变换、点击控制、统计、支持函数,以及插值函数等,涵盖了大多数工程应用中的算法。
我有一个疑问,使用CMSIS中的DSP函数,与普通的数学库中的函数,究竟能够有多大的提速空间?
下面,就对比一下开方运算以及sine三角函数的运算速度,这样便能够将来在不同场合下选择使用不同的数学库。
二、测试方法
测试硬件平台是昨天制作的STM32F103单片机,这是M3内核的ARM单片机。这个单片机比较简单和流行,看一下它的数学计算速度,利用一个端口输出高低电平表示计算所需要的时间。
为了使用DSP数据库,需要在IAR开发环境中,对工程文件选项General中的连接库设置中,选择CMSIS DSP。在程序中增加arm math头文件即可。测试程序大循环中,执行普通的sine三角函数计算,前后设置LED输出管脚电平,因此输出高电平脉冲宽度表示sine函数计算时间。中间相隔1ms之后,再执行DSP中的sine函数,也使用LED管脚的高电平指示执行时间。后面通过示波器,便可直观对比两个函数执行速度的差异性了。
三、测试结果
使用示波器,测量LED管脚的波形,可以看到前后两个脉冲信号。前面的信号是普通数学库中的sine函数,时间较长,后面是DSP库中的sine函数,明显时间短。这说明了对于M3内核的单片机,使用DSP数学库的效率还是非常高的。
需要说明的是,此时单片机系统时钟为64MHz。为了更加精确的对比两个数学库执行时间,将波形展开。利用示波器的光标测量功能,测试脉冲的时间宽度。普通sine函数,计算时间为41.7微秒,测量DSP sine函数,执行时间只有10微秒,通过对比可以知道,对于三角函数sine计算,DSP算法库比起普通的数学函数要快四倍左右。
● sine运算对比:
math:41.7us
DSP:10us
▲计算sine函数对比普通数学库与DSP库的执行速度 下面,再对比一下浮点开方数学运算,使用的方法是一样的,通过示波器测量 普通数学库函数和DSP数学库函数之间的差别。普通的数学库,计算一个浮点数开方需要12.52微秒,DSP数学库中的开方运算,只需要4.9微秒,比普通的数学库增加了不到3倍。这说明不同的数学运算,DSP提速不一样。
● 开方运算对比:
math:12.52us
DSP:4.9us
▲对比开方运算算法函数速度的差异 最后,对比一下普通的整数位移操作。对128个数字中的整型数往左位移,对比普通的C语言位移所需要的时间以及DSP库中位移函数运算时间。C语言位移消耗了大约24微秒,DSP库函数消耗了16.65微秒,速度大约快了三分之一左右。
▲位移操作
● 位移两位对比:
C:24us
DSP:16.65us
四、总结 本文对比了CMSIS DSP数学库中的部分函数速度,都比使用普通的C语言以及math库中函数速度有所提高,三角函数提高了四倍左右,普通的位移操作只提高了三分之左右。
审核编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !