【摘 要】在現(xiàn)今DSP軟件工程設(shè)計(jì)中,廣泛采用高級(jí)語(yǔ)言(如C語(yǔ)言)直接調(diào)用三角函數(shù)進(jìn)行計(jì)算。然而,匯編語(yǔ)言的穩(wěn)定性、可讀性和執(zhí)行效率均優(yōu)于高級(jí)語(yǔ)言,因缺少可供直接調(diào)用的三角函數(shù)庫(kù),其開(kāi)發(fā)周期長(zhǎng),且計(jì)算精度難以保證,在工程中推廣較少。本文就基于DSP匯編語(yǔ)言,提出一種高精度三角函數(shù)算法。
【關(guān)鍵詞】三角函數(shù) 傳統(tǒng)查表法 線性查表法 MATLAB仿真
一、引言
隨著現(xiàn)代科技的高速發(fā)展,帶三角函數(shù)的大型DSP復(fù)雜算法被廣泛應(yīng)用于各個(gè)領(lǐng)域,高級(jí)語(yǔ)言(如C語(yǔ)言)編程實(shí)現(xiàn)時(shí),其穩(wěn)定性、可讀性、執(zhí)行效率均不及匯編語(yǔ)言。然而,匯編算法沒(méi)有標(biāo)準(zhǔn)的三角函數(shù)庫(kù),需軟件開(kāi)發(fā)人員自己編寫,這就延長(zhǎng)了軟件的開(kāi)發(fā)周期,同時(shí),其計(jì)算精度難以得到保證。本文就基于DSP匯編語(yǔ)言,提出一種占用資源低且精度較高的線性查表法,實(shí)現(xiàn)三角函數(shù),并通過(guò)MATLAB仿真與傳統(tǒng)查表法進(jìn)行對(duì)比分析。
二、查找表建模
假設(shè)以等步長(zhǎng)step定義了點(diǎn)數(shù)為N的三角函數(shù)查找表,表中地址n處的值為(x0,y0),若要計(jì)算某x處的三角函數(shù)值y,用傳統(tǒng)查找表實(shí)現(xiàn),即近似于地址n處的查表值y0。其查找生成方式為:TAB_X(n)=Fx(n*step),n=0,1,2……N-1。其中TAB_X為三角函數(shù)表,F(xiàn)x代表相應(yīng)的標(biāo)準(zhǔn)三角函數(shù)。
而用線性查找表實(shí)現(xiàn),即近似于(x0,y0)點(diǎn)切線上x(chóng)處所對(duì)應(yīng)的值y’。設(shè)切線的斜率為C,則用公式可表示為:
y≈y’=y0+C×=y0+C*(x-x0)
由公式可知,線性查找表需要包含x0處的三角函數(shù)值y0和切線斜率C,因此,采取y0值與C值交替存放方式,即為:TAB_X(n)=Fx(n*step),n=0,2,4……N-2;TAB_X(n)=Fc(n*step),n=1,3,5……N-1。其中Fc代表斜率函數(shù),其對(duì)應(yīng)關(guān)系見(jiàn)表1。
三、工程實(shí)現(xiàn)方法
對(duì)正弦和余弦函數(shù),其函數(shù)本身與切線斜率正好互補(bǔ),因此可共用一張查找表。此外,因正弦和余弦函數(shù)互余,可通過(guò)或?qū)⑵涠x域映射到0~/4。對(duì)反三角函數(shù),其計(jì)算的值域范圍為0~/2,隨著x0值的增加,其斜率值單調(diào)遞增,這將會(huì)導(dǎo)致圖1中的y’值逐漸偏離y值,增大誤差。因此,采取將反三角函數(shù)/4~/2的值域映射到/4~0的值域中進(jìn)行計(jì)算。其中,反正弦、反余弦、反正切函數(shù)分別通過(guò)、、進(jìn)行映射,這樣,反正弦和反余弦函數(shù)的定義域范圍為0~0.707,反正切函數(shù)的定義域范圍為0~1。以正弦函數(shù)查找表為列,其實(shí)現(xiàn)算法如下:
從表2中看出,相同點(diǎn)數(shù)時(shí)的線性查表法計(jì)算精度要比傳統(tǒng)查表法高出2個(gè)數(shù)量級(jí)以上。隨著查找表點(diǎn)數(shù)的增加,線性查表法的計(jì)算精度將會(huì)越來(lái)越優(yōu)于非線性查表法。
五、結(jié)論
線性查表法與傳統(tǒng)查表法相比,其計(jì)算精度高,且正、余弦函數(shù)可共用查找表,資源占用少。在工程實(shí)現(xiàn)中,其匯編代碼實(shí)現(xiàn)簡(jiǎn)單、可讀性強(qiáng),易于在工程中推廣。
參考文獻(xiàn):
[1] 高等數(shù)學(xué),楊海濤等,2006,同濟(jì)大學(xué)出版社
[2] MATLAB仿真技術(shù)與應(yīng)用,張葛祥 李娜,2003,清華大學(xué)出版社