CMSIS的DSP数字信号处理函数库应用

控制/MCU

1883人已加入

描述

一、前言

在ARM单片机开发中,有CMSIS中提供的DSP数字信号处理函数库。这个函数库中包括有基本的数据函数、快速数学运算、复数运算、滤波器、矩阵、变换、点击控制、统计、支持函数,以及插值函数等,涵盖了大多数工程应用中的算法。

我有一个疑问,使用CMSIS中的DSP函数,与普通的数学库中的函数,究竟能够有多大的提速空间?

下面,就对比一下开方运算以及sine三角函数的运算速度,这样便能够将来在不同场合下选择使用不同的数学库。

二、测试方法

测试硬件平台是昨天制作的STM32F103单片机,这是M3内核的ARM单片机。这个单片机比较简单和流行,看一下它的数学计算速度,利用一个端口输出高低电平表示计算所需要的时间。

led

为了使用DSP数据库,需要在IAR开发环境中,对工程文件选项General中的连接库设置中,选择CMSIS DSP。在程序中增加arm math头文件即可。测试程序大循环中,执行普通的sine三角函数计算,前后设置LED输出管脚电平,因此输出高电平脉冲宽度表示sine函数计算时间。中间相隔1ms之后,再执行DSP中的sine函数,也使用LED管脚的高电平指示执行时间。后面通过示波器,便可直观对比两个函数执行速度的差异性了。

led

led

三、测试结果

使用示波器,测量LED管脚的波形,可以看到前后两个脉冲信号。前面的信号是普通数学库中的sine函数,时间较长,后面是DSP库中的sine函数,明显时间短。这说明了对于M3内核的单片机,使用DSP数学库的效率还是非常高的。

需要说明的是,此时单片机系统时钟为64MHz。为了更加精确的对比两个数学库执行时间,将波形展开。利用示波器的光标测量功能,测试脉冲的时间宽度。普通sine函数,计算时间为41.7微秒,测量DSP sine函数,执行时间只有10微秒,通过对比可以知道,对于三角函数sine计算,DSP算法库比起普通的数学函数要快四倍左右。

●  sine运算对比:
   math:41.7us
   DSP:10us

led

▲计算sine函数对比普通数学库与DSP库的执行速度 下面,再对比一下浮点开方数学运算,使用的方法是一样的,通过示波器测量 普通数学库函数和DSP数学库函数之间的差别。普通的数学库,计算一个浮点数开方需要12.52微秒,DSP数学库中的开方运算,只需要4.9微秒,比普通的数学库增加了不到3倍。这说明不同的数学运算,DSP提速不一样。

led

●  开方运算对比:
   math:12.52us
   DSP:4.9us

led

▲对比开方运算算法函数速度的差异 最后,对比一下普通的整数位移操作。对128个数字中的整型数往左位移,对比普通的C语言位移所需要的时间以及DSP库中位移函数运算时间。C语言位移消耗了大约24微秒,DSP库函数消耗了16.65微秒,速度大约快了三分之一左右。

led

led

▲位移操作

●  位移两位对比:
   C:24us
   DSP:16.65us

四、总结 本文对比了CMSIS DSP数学库中的部分函数速度,都比使用普通的C语言以及math库中函数速度有所提高,三角函数提高了四倍左右,普通的位移操作只提高了三分之左右。

审核编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分