ADSPTigerSHARC中利用查找表快速計(jì)算三角函數(shù)
發(fā)布時(shí)間:2007/4/23 0:00:00 訪問(wèn)次數(shù):2366
摘要:DSP算法中,三角函數(shù)的計(jì)算是一種運(yùn)算量比較大,占用時(shí)間比較長(zhǎng)的運(yùn)算。如果通過(guò)直接調(diào)用DSP生產(chǎn)商或者第三方提供的庫(kù)函數(shù)進(jìn)行運(yùn)算,往往需要占用比較多的時(shí)鐘周期。在實(shí)時(shí)性要求比較高的場(chǎng)合,調(diào)用庫(kù)函數(shù)進(jìn)行三角函數(shù)計(jì)算就不能夠達(dá)到實(shí)時(shí)性的要求。在這種情況下,利用查找表的方法來(lái)得到三角函數(shù)的值就成為一種可行,并能獲得很高實(shí)時(shí)性的計(jì)算方法。本文給出了一種在TS101中利用查找來(lái)實(shí)現(xiàn)三角函數(shù)計(jì)算的方法,并對(duì)這種算法的誤差和運(yùn)算量進(jìn)行了分析,從結(jié)論可以看出,文中提出的通過(guò)查找表計(jì)算三角函數(shù)的方法有效而且運(yùn)行效率比較高。
關(guān)鍵詞:查找表 Tiger SHARC TS101 DSP 實(shí)時(shí)性
1. 概述:
我們知道,在三角函數(shù)的運(yùn)算中,涉及到大量倒數(shù)和平方根的運(yùn)算。TS101的ALU指令中,提供了很方便的求倒數(shù)指令RECIPS和求平方根倒數(shù)指令RSQRTS,在一個(gè)指令周期內(nèi),可以完成求一個(gè)浮點(diǎn)數(shù)的倒數(shù)或者平方根倒數(shù)的運(yùn)算。但是,在TS101中,倒數(shù)和平方根倒數(shù)指令僅僅提供了8位浮點(diǎn)的近似值,特別在小數(shù)點(diǎn)后位數(shù)比較多的情況下,誤差比較大。并且,在很多計(jì)算過(guò)程中,隨著運(yùn)算步驟的增加,其誤差也不斷擴(kuò)大,最終將會(huì)導(dǎo)致運(yùn)算的結(jié)果遠(yuǎn)遠(yuǎn)偏離正常的數(shù)值。如果需要提高倒數(shù)和平方根倒數(shù)的運(yùn)算精度,就需要用到收斂算法,這樣就大大增加了運(yùn)算的周期數(shù),使得運(yùn)算量驟增。在需要大量三角函數(shù)運(yùn)算的場(chǎng)合,這么大的運(yùn)算量就顯得很不合適,大大占用了系統(tǒng)的運(yùn)行時(shí)間。在ADSP的集成開(kāi)發(fā)環(huán)境Visual DSP 3.5++中,生產(chǎn)商雖然提供了進(jìn)行三角函數(shù)計(jì)算的庫(kù)函數(shù),并具可以得到很高的計(jì)算精度,但是它的運(yùn)算周期卻比較長(zhǎng),很多情況下并不能滿足我們的要求。
ADSP TS101中提供了專用的加法器和乘法器,使得高精度的乘加運(yùn)算可以在一個(gè)周期內(nèi)得以完成。如果我們可以利用乘加運(yùn)算代替大運(yùn)算量的求倒數(shù)和求平方根運(yùn)算,那么程序運(yùn)行中就可以大大降低程序的時(shí)間消耗。而且,三角函數(shù)具有一定的周期性,我們可以通過(guò)三角函數(shù)周期性的變換,將角度值變換到一個(gè)周期內(nèi),通過(guò)查表的方式來(lái)獲得三角函數(shù)的數(shù)值。這種方式直接利用了三角函數(shù)的周期性,其誤差大小決定于查找表的大小,也就是對(duì)一個(gè)周期內(nèi)三角函數(shù)的數(shù)值進(jìn)行采樣的密度。在誤差允許的情況下,可以以很高的運(yùn)算速度得到三角函數(shù)的數(shù)值。
2. 算法理論與DSP實(shí)現(xiàn):
(1)DSP算法:正弦和余弦函數(shù)是按照2π為周期周期性變化的函數(shù)。對(duì)于 和 形式的函數(shù),當(dāng)我們知道x的數(shù)值以后,就可以根據(jù)浮點(diǎn)數(shù)x的小數(shù)部分的數(shù)值求得函數(shù)的數(shù)值,而整數(shù)部分可以作為周期循環(huán)的部分不予考慮。所以運(yùn)算的重點(diǎn)在于如何將小數(shù)部分的數(shù)值轉(zhuǎn)變?yōu)椴楸頃r(shí)候所對(duì)應(yīng)的地址單元。我們?nèi)∮嘞液瘮?shù) 區(qū)間上的數(shù)值,在允許的計(jì)算精度范圍內(nèi)首先對(duì)其進(jìn)行采樣。因?yàn)橛嘞液瘮?shù)為偶函數(shù),所以在整個(gè)自變量變化的范圍內(nèi)的三角函數(shù)運(yùn)算都可以轉(zhuǎn)變到 區(qū)間內(nèi)進(jìn)行。
對(duì)于三角函數(shù) 的數(shù)值的計(jì)算,我們將其自變量x的取值區(qū)間以0為中心分為小于零和大于等于零兩部分。對(duì)于小于零的區(qū)間,首先求出x的絕對(duì)值,然后減去0.5,將得到的結(jié)果用fix指令求整,再用float指令將其表示為浮點(diǎn)數(shù),將x的絕對(duì)值與用float指令求得的數(shù)值相減就提取出了數(shù)據(jù)的小數(shù)部分。對(duì)于大于零的區(qū)間,我們不用求其絕對(duì)值就可以直接按照上面的步驟提取出其小數(shù)部分。對(duì)于正弦函數(shù) ,由于正弦函數(shù)是奇函數(shù),情況就相對(duì)比較復(fù)雜一些。這時(shí)需要判斷x的數(shù)值是大于零等于零還是小于零,如果在大于零的情況下,可以直接將小數(shù)部分提取出來(lái),并對(duì)其進(jìn)行查表得到對(duì)應(yīng)的三角函數(shù)的數(shù)值,而在x的數(shù)值小于零的情況下,我們需要將在 區(qū)間內(nèi)查表得到的數(shù)值再對(duì)其取負(fù)才可以得到相應(yīng)的三角函數(shù)的數(shù)值。我們得到小數(shù)部分的數(shù)值以后,將小數(shù)部分的數(shù)值和采樣的樣本點(diǎn)數(shù)進(jìn)行乘法運(yùn)算,就可以得到查表所需要的相對(duì)地址。 查表實(shí)現(xiàn)的簡(jiǎn)單的匯編語(yǔ)言算法實(shí)現(xiàn)如下(未優(yōu)化):
摘要:DSP算法中,三角函數(shù)的計(jì)算是一種運(yùn)算量比較大,占用時(shí)間比較長(zhǎng)的運(yùn)算。如果通過(guò)直接調(diào)用DSP生產(chǎn)商或者第三方提供的庫(kù)函數(shù)進(jìn)行運(yùn)算,往往需要占用比較多的時(shí)鐘周期。在實(shí)時(shí)性要求比較高的場(chǎng)合,調(diào)用庫(kù)函數(shù)進(jìn)行三角函數(shù)計(jì)算就不能夠達(dá)到實(shí)時(shí)性的要求。在這種情況下,利用查找表的方法來(lái)得到三角函數(shù)的值就成為一種可行,并能獲得很高實(shí)時(shí)性的計(jì)算方法。本文給出了一種在TS101中利用查找來(lái)實(shí)現(xiàn)三角函數(shù)計(jì)算的方法,并對(duì)這種算法的誤差和運(yùn)算量進(jìn)行了分析,從結(jié)論可以看出,文中提出的通過(guò)查找表計(jì)算三角函數(shù)的方法有效而且運(yùn)行效率比較高。
關(guān)鍵詞:查找表 Tiger SHARC TS101 DSP 實(shí)時(shí)性
1. 概述:
我們知道,在三角函數(shù)的運(yùn)算中,涉及到大量倒數(shù)和平方根的運(yùn)算。TS101的ALU指令中,提供了很方便的求倒數(shù)指令RECIPS和求平方根倒數(shù)指令RSQRTS,在一個(gè)指令周期內(nèi),可以完成求一個(gè)浮點(diǎn)數(shù)的倒數(shù)或者平方根倒數(shù)的運(yùn)算。但是,在TS101中,倒數(shù)和平方根倒數(shù)指令僅僅提供了8位浮點(diǎn)的近似值,特別在小數(shù)點(diǎn)后位數(shù)比較多的情況下,誤差比較大。并且,在很多計(jì)算過(guò)程中,隨著運(yùn)算步驟的增加,其誤差也不斷擴(kuò)大,最終將會(huì)導(dǎo)致運(yùn)算的結(jié)果遠(yuǎn)遠(yuǎn)偏離正常的數(shù)值。如果需要提高倒數(shù)和平方根倒數(shù)的運(yùn)算精度,就需要用到收斂算法,這樣就大大增加了運(yùn)算的周期數(shù),使得運(yùn)算量驟增。在需要大量三角函數(shù)運(yùn)算的場(chǎng)合,這么大的運(yùn)算量就顯得很不合適,大大占用了系統(tǒng)的運(yùn)行時(shí)間。在ADSP的集成開(kāi)發(fā)環(huán)境Visual DSP 3.5++中,生產(chǎn)商雖然提供了進(jìn)行三角函數(shù)計(jì)算的庫(kù)函數(shù),并具可以得到很高的計(jì)算精度,但是它的運(yùn)算周期卻比較長(zhǎng),很多情況下并不能滿足我們的要求。
ADSP TS101中提供了專用的加法器和乘法器,使得高精度的乘加運(yùn)算可以在一個(gè)周期內(nèi)得以完成。如果我們可以利用乘加運(yùn)算代替大運(yùn)算量的求倒數(shù)和求平方根運(yùn)算,那么程序運(yùn)行中就可以大大降低程序的時(shí)間消耗。而且,三角函數(shù)具有一定的周期性,我們可以通過(guò)三角函數(shù)周期性的變換,將角度值變換到一個(gè)周期內(nèi),通過(guò)查表的方式來(lái)獲得三角函數(shù)的數(shù)值。這種方式直接利用了三角函數(shù)的周期性,其誤差大小決定于查找表的大小,也就是對(duì)一個(gè)周期內(nèi)三角函數(shù)的數(shù)值進(jìn)行采樣的密度。在誤差允許的情況下,可以以很高的運(yùn)算速度得到三角函數(shù)的數(shù)值。
2. 算法理論與DSP實(shí)現(xiàn):
(1)DSP算法:正弦和余弦函數(shù)是按照2π為周期周期性變化的函數(shù)。對(duì)于 和 形式的函數(shù),當(dāng)我們知道x的數(shù)值以后,就可以根據(jù)浮點(diǎn)數(shù)x的小數(shù)部分的數(shù)值求得函數(shù)的數(shù)值,而整數(shù)部分可以作為周期循環(huán)的部分不予考慮。所以運(yùn)算的重點(diǎn)在于如何將小數(shù)部分的數(shù)值轉(zhuǎn)變?yōu)椴楸頃r(shí)候所對(duì)應(yīng)的地址單元。我們?nèi)∮嘞液瘮?shù) 區(qū)間上的數(shù)值,在允許的計(jì)算精度范圍內(nèi)首先對(duì)其進(jìn)行采樣。因?yàn)橛嘞液瘮?shù)為偶函數(shù),所以在整個(gè)自變量變化的范圍內(nèi)的三角函數(shù)運(yùn)算都可以轉(zhuǎn)變到 區(qū)間內(nèi)進(jìn)行。
對(duì)于三角函數(shù) 的數(shù)值的計(jì)算,我們將其自變量x的取值區(qū)間以0為中心分為小于零和大于等于零兩部分。對(duì)于小于零的區(qū)間,首先求出x的絕對(duì)值,然后減去0.5,將得到的結(jié)果用fix指令求整,再用float指令將其表示為浮點(diǎn)數(shù),將x的絕對(duì)值與用float指令求得的數(shù)值相減就提取出了數(shù)據(jù)的小數(shù)部分。對(duì)于大于零的區(qū)間,我們不用求其絕對(duì)值就可以直接按照上面的步驟提取出其小數(shù)部分。對(duì)于正弦函數(shù) ,由于正弦函數(shù)是奇函數(shù),情況就相對(duì)比較復(fù)雜一些。這時(shí)需要判斷x的數(shù)值是大于零等于零還是小于零,如果在大于零的情況下,可以直接將小數(shù)部分提取出來(lái),并對(duì)其進(jìn)行查表得到對(duì)應(yīng)的三角函數(shù)的數(shù)值,而在x的數(shù)值小于零的情況下,我們需要將在 區(qū)間內(nèi)查表得到的數(shù)值再對(duì)其取負(fù)才可以得到相應(yīng)的三角函數(shù)的數(shù)值。我們得到小數(shù)部分的數(shù)值以后,將小數(shù)部分的數(shù)值和采樣的樣本點(diǎn)數(shù)進(jìn)行乘法運(yùn)算,就可以得到查表所需要的相對(duì)地址。 查表實(shí)現(xiàn)的簡(jiǎn)單的匯編語(yǔ)言算法實(shí)現(xiàn)如下(未優(yōu)化):
熱門(mén)點(diǎn)擊
- 為音頻設(shè)備提供高性能的低通30kHz貝塞爾濾
- 帶RF輸出的全數(shù)字調(diào)制器設(shè)計(jì)
- DSP基條碼掃描器
- TMS320VC33并行自舉的兩種巧妙實(shí)現(xiàn)方
- 支持以太網(wǎng)寬帶接入的IP機(jī)頂盒解決方案
- 基于ARM的MPEG4視頻解碼器
- 外掛Flash的TMS320VC5409引導(dǎo)
- 基于DSP的雷達(dá)視頻信號(hào)數(shù)字采集與檢測(cè)
- 基于XC166單片機(jī)的DSP優(yōu)化方法
- VINETIC語(yǔ)音處理器在VoIP解決方案中
推薦技術(shù)資料
- 業(yè)余條件下PCM2702
- PGM2702采用SSOP28封裝,引腳小而密,EP3... [詳細(xì)]
- AMOLED顯示驅(qū)動(dòng)芯片關(guān)鍵技
- CMOS圖像傳感器技術(shù)參數(shù)設(shè)計(jì)
- GB300 超級(jí)芯片應(yīng)用需求分
- 4NP 工藝NVIDIA Bl
- GB300 芯片、NVL72
- 首個(gè)最新高端芯片人工智能服務(wù)器
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究