01 DSP算法庫(kù)
一、前言
在ARM單片機(jī)開(kāi)發(fā)中,有 CMSIS 中提供的 DSP 數(shù)字信號(hào)處理函數(shù)庫(kù)。這個(gè)函數(shù)庫(kù)中包括有基本的數(shù)據(jù)函數(shù),快速數(shù)學(xué)運(yùn)算,復(fù)數(shù)運(yùn)算,濾波器,矩陣,變換,點(diǎn)擊控制,統(tǒng)計(jì),支持函數(shù)以及插值函數(shù)等等。涵蓋了大多數(shù)工程應(yīng)用中的算法。下面,我有一個(gè)疑問(wèn),使用CMSIS 中的 DSP函數(shù),與普通的數(shù)學(xué)庫(kù)中的函數(shù),究竟能夠有多大的提速空間?下面,就對(duì)比一下開(kāi)方運(yùn)算以及sine三角函數(shù)的運(yùn)算速度。這樣,便能夠?qū)?lái)在不同場(chǎng)合選擇使用不同的數(shù)學(xué)庫(kù)。
二、測(cè)試方法
測(cè)試硬件平臺(tái)是昨天制作的 STM32F103單片機(jī),這是 M3內(nèi)核的 ARM 單片機(jī)。這個(gè)單片機(jī)比較簡(jiǎn)單和流行,看一下它的數(shù)學(xué)計(jì)算速度。利用一個(gè)端口輸出高低電平表示計(jì)算所需要的時(shí)間。
為了使用 DSP數(shù)據(jù)庫(kù),需要在 IAR 開(kāi)發(fā)環(huán)境中,對(duì) 工程文件選項(xiàng) General ?中的 連接庫(kù)設(shè)置中,選擇 CMSIS DSP。在程序中增加 arm math 頭文件即可。測(cè)試程序大循環(huán)中,執(zhí)行普通的 sine 三角函數(shù)計(jì)算,前后設(shè)置 LED 輸出管腳電平,因此輸出高電平脈沖寬度表示sine 函數(shù)計(jì)算時(shí)間。中間相隔1ms之后,再執(zhí)行 DSP中的sine 函數(shù),也使用 LED 管腳的高電平指示執(zhí)行時(shí)間。后面通過(guò)示波器便可以直觀的對(duì)比兩個(gè)函數(shù)執(zhí)行速度的差異性了。
三、測(cè)試結(jié)果
使用示波器,測(cè)量 LED 管腳的波形,可以看到前后兩個(gè)脈沖信號(hào)。前面的信號(hào)是普通數(shù)學(xué)庫(kù)中的 sine 函數(shù),時(shí)間較長(zhǎng),后面是 DSP庫(kù)中的 sine 函數(shù),明顯時(shí)間短。這說(shuō)明了對(duì)于 M3 內(nèi)核的 單片機(jī),使用 DSP數(shù)學(xué)庫(kù)的效率還是非常高的。需要說(shuō)明的是,此時(shí) 單片機(jī)系統(tǒng)時(shí)鐘為 64MHz。為了更加精確的對(duì)比兩個(gè)數(shù)學(xué)庫(kù)執(zhí)行時(shí)間,將波形展開(kāi)。利用示波器的光標(biāo)測(cè)量功能,測(cè)試脈沖的時(shí)間寬度。普通sine 函數(shù),計(jì)算時(shí)間為 41.7微秒,測(cè)量 DSP sine 函數(shù),執(zhí)行時(shí)間只有10微秒,通過(guò)對(duì)比可以知道,對(duì)于 三角函數(shù) sine計(jì)算,DSP算法庫(kù)比起普通的數(shù)學(xué)函數(shù)要快四倍左右。
● ?sine運(yùn)算對(duì)比:
math
:41.7us
DSP
:10us
▲ 圖1.3.1 計(jì)算sine函數(shù)對(duì)比普通數(shù)學(xué)庫(kù)與DSP庫(kù)的執(zhí)行速度
??下面再對(duì)比一下浮點(diǎn)開(kāi)方數(shù)學(xué)運(yùn)算。使用的方法是一樣的。通過(guò)示波器測(cè)量 普通數(shù)學(xué)庫(kù)函數(shù)和 DSP數(shù)學(xué)庫(kù)函數(shù)之間的差別。普通的數(shù)學(xué)庫(kù),計(jì)算一個(gè)浮點(diǎn)數(shù)開(kāi)方需要 12.52 微秒,DSP數(shù)學(xué)庫(kù)中的開(kāi)方運(yùn)算,只需要 4.9微秒。比普通的數(shù)學(xué)庫(kù)增加了不到 3倍。這說(shuō)明不同的數(shù)學(xué)運(yùn)算,DSP提速不一樣。
● ?開(kāi)方運(yùn)算對(duì)比:
math
:12.52us
DSP
:4.9us
▲ 圖1.3.2 對(duì)比開(kāi)方運(yùn)算算法函數(shù)速度的差異
??最后對(duì)比一下普通的整數(shù)位移操作。對(duì)128個(gè)數(shù)字中的整型數(shù)往左位移,對(duì)比普通的 C 語(yǔ)言位移所需要的時(shí)間以及DSP 庫(kù)中位移函數(shù)運(yùn)算時(shí)間。C語(yǔ)言位移消耗了大約 24微秒,DSP 庫(kù)函數(shù)消耗了 16.65微秒,速度大約快了 三分之一左右。
▲ 圖1.3.3 位移操作
? ● ?位移兩位對(duì)比:
C
:24us
DSP
:16.65us
※ 總??結(jié) ※
本文對(duì)比了 CMSIS DSP數(shù)學(xué)庫(kù)中的部分函數(shù)速度,都比使用普通的C語(yǔ)言以及math 庫(kù)中函數(shù)速度有所提高,三角函數(shù)提高了四倍左右,普通的位移操作只提高了三分之左右。