在DSP或一般單片機(jī)中最常見(jiàn)的運(yùn)算指令是"加"和"乘",而在數(shù)據(jù)處理中,不但有加、減、乘、除等運(yùn)算,還要有一些基本函數(shù)的計(jì)算,如利用正交雙通道零中頻算法測(cè)量信號(hào)相位差或分析信號(hào)倒頻譜時(shí),需要計(jì)算三角函數(shù)、平方根函數(shù)、對(duì)數(shù)函數(shù)等。在DSP上實(shí)現(xiàn)函數(shù)計(jì)算一般可以從數(shù)值精度、時(shí)間效率和空間效率等角度來(lái)衡量各種算法的優(yōu)劣。利用高級(jí)語(yǔ)言庫(kù)函數(shù)求這些基本函數(shù)的運(yùn)算速度比較慢,在許多數(shù)字信號(hào)處理中,一般都有實(shí)時(shí)性的要求,在滿(mǎn)足計(jì)算精度條件下,函數(shù)的運(yùn)算速度尤為重要。對(duì)于空間效率來(lái)講,本文中給出一個(gè)查表電路,其最大特點(diǎn)是不占用DSP的存儲(chǔ)器空間,而只占用他的一個(gè)I/O端口,利用此電路提高了空間利用率,查表時(shí)使用的指令很少,從而提高了函數(shù)值的運(yùn)算速度。
1函數(shù)表電路
函數(shù)表電路如圖1所示,如果系統(tǒng)時(shí)鐘比較快,應(yīng)選擇高速器件。這里以16位定點(diǎn)DSP為例,即數(shù)據(jù)線(xiàn)有16條,則用2片E2PROM 27512分別存儲(chǔ)函數(shù)表的高8位和低8位數(shù)據(jù),若每個(gè)函數(shù)表的容量是4 kB,則此電路可以存儲(chǔ)16個(gè)函數(shù)表,每個(gè)函數(shù)表的空間大小也可以根據(jù)需要來(lái)定。設(shè)函數(shù)表示為:y=f(x) (1)
其中:x是自變量,y是函數(shù)值,x和y都是16位定點(diǎn)數(shù)。查表時(shí)x作為查找存儲(chǔ)在27512存儲(chǔ)單元中函數(shù)值y的地址,經(jīng)兩片74HC574輸出連接到27512的16條地址線(xiàn)上,然后,DSP從兩片74LS244中讀取函數(shù)值y。若查表端口為PA,則查表時(shí)只用兩條指令即可完成,即:
2函數(shù)表的制定
由于使用的是16位定點(diǎn)DSP,因此,各函數(shù)表的函數(shù)值采用16位定點(diǎn)方式,最高位為符號(hào)位,低15位為有效數(shù)字位,即Q15方式。所有的數(shù)都采用小數(shù)形式,即小數(shù)點(diǎn)位于最高位后。每個(gè)函數(shù)表容量為4 096 B,下面分別給出三角函數(shù)表(正弦函數(shù)表和余弦函數(shù)表)、以e為底的自然對(duì)數(shù)表、平方根函數(shù)表的制作方法。
2.1 三角函數(shù)表的制作
將正、余弦函數(shù)1/4周期內(nèi)等間隔取4 096個(gè)值,歸一化后進(jìn)行量化并編碼,分別制成正、余弦函數(shù)表。
在式(2)和式(3)中,n為自然數(shù),取值范圍為0~4 095,函數(shù)int[ ]表示對(duì)括號(hào)中的數(shù)取整數(shù),式中函數(shù)值乘32 768是將小數(shù)變?yōu)檎麛?shù)后再變成Q15方式二進(jìn)制數(shù)。
2.2 自然對(duì)數(shù)表的制作
對(duì)于任意一個(gè)正實(shí)數(shù)x,求其自然對(duì)數(shù)y=ln(x)。若x的浮點(diǎn)數(shù)形式為:
對(duì)于浮點(diǎn)數(shù)a*2b,b為指數(shù),a為正的Q15方式小數(shù),取值范圍為:0.5≤a<1,則1≤2a<2。由于指數(shù)可以在運(yùn)算中求得,從式(5)中得知,求x的自然對(duì)數(shù),只要計(jì)算出2的自然對(duì)數(shù)即可。因?yàn)?≤ln(2a)<1,所以自然對(duì)數(shù)表就是將1~2之間等間隔取4 096個(gè)數(shù),再求其自然對(duì)數(shù)。
自然對(duì)數(shù)表值:
式(6)中,n為自然數(shù),取值范圍為0~4 095。
2.3平方根函數(shù)表的制作
平方根函數(shù)表是將0~1等間隔取4 096個(gè)數(shù),再求平方根,即平方根函數(shù)表值為:
式(7)中,n為自然數(shù),取值范圍為0~4 095。
以上是幾個(gè)基本函數(shù)表值的計(jì)算,最后要將函數(shù)表值變?yōu)槎M(jìn)制數(shù),用程序?qū)懭肫鲗?xiě)人兩片27512中,每個(gè)函數(shù)表分配4 k地址,地址線(xiàn)高4位作為每個(gè)函數(shù)表的段地址,地址線(xiàn)低12位作為函數(shù)查表地址。
3函數(shù)的計(jì)算
3.1正、余弦函數(shù)值的計(jì)算
假設(shè)正、余弦信號(hào)頻率為f,求一個(gè)周期內(nèi)某一時(shí)刻點(diǎn)k的函數(shù)值,其中,k取值范圍為0~N-1,則在計(jì)算cos(2πfk/N)和sin(2πfk/N)時(shí),需要進(jìn)行查表求函數(shù)值,由于在制表過(guò)程中,已將圓周率π考慮進(jìn)去,所以,在計(jì)算角度時(shí)只計(jì)算2fk/N。
假設(shè)λ=2fk/N=2n+φ,其中,n為自然數(shù),φ<2。下面給出cos(λ)和sin(λ)的求解過(guò)程。首先去掉λ中的2n項(xiàng),得到小于2的Q15方式的小數(shù),這里最高位不是符號(hào)位,而代表數(shù)值1或0。實(shí)際上,cos(λ)=cos(φ),sin(λ)=sin(φ)。計(jì)算cos(λ)和sin(λ)的流程圖如圖2所示。
3.2平方根值的計(jì)算
對(duì)于任意一個(gè)正實(shí)數(shù)x,求其平方根值。將x表示成浮點(diǎn)數(shù)形式:
從以上3種情況看,每種情況下只有對(duì)正實(shí)小數(shù)進(jìn)行開(kāi)方運(yùn)算,所以在計(jì)算時(shí),將Q15方式的小數(shù)向右移4位,其高4位為換上開(kāi)方表段地址,即可查表求得
4結(jié) 語(yǔ)
在DSP上實(shí)現(xiàn)基本函數(shù)的計(jì)算方法有多種,這里介紹的方法可以快速計(jì)算函數(shù)值,其實(shí)現(xiàn)電路簡(jiǎn)單,函數(shù)表的空間擴(kuò)展方便,不受DSP存儲(chǔ)空間限制的,我們?cè)跒楹\娧b備修理部研制"DSP-1型聲納電功率測(cè)量?jī)x"中得到應(yīng)用,取得良好效果。
作者:李澤光(大連大學(xué) 信息工程學(xué)院 116622) 來(lái)源:《現(xiàn)代電子技術(shù)》