專利名稱:一種覆蓋全圓周角度的單精度浮點(diǎn)三角函數(shù)的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)字信號(hào)處理領(lǐng)域,具體涉及一種小面積單精度浮點(diǎn)三角函數(shù)的實(shí)現(xiàn)方法。
背景技術(shù):
現(xiàn)代數(shù)字信號(hào)處理對(duì)運(yùn)算的精度以及動(dòng)態(tài)范圍提出了越來(lái)越高的要求,單精度浮點(diǎn)三角函數(shù)運(yùn)算也被越來(lái)越多的使用。坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算(CORDIC)從運(yùn)算本身入手,將復(fù)雜的三角函數(shù)運(yùn)算分解為簡(jiǎn)單的加減法和移位運(yùn)算,使得三角函數(shù)運(yùn)算很容易在硬件上實(shí)現(xiàn)。目前,國(guó)內(nèi)外對(duì)單精度浮點(diǎn)三角函數(shù)的實(shí)現(xiàn)也做很多的研究,在經(jīng)典CORDIC算法的基礎(chǔ)上根據(jù)自己的需要進(jìn)行了一些改進(jìn),并將其運(yùn)用到實(shí)際運(yùn)算中。然而針對(duì)單精度浮點(diǎn)三角函數(shù),其在應(yīng)用中主要存在兩個(gè)缺點(diǎn),一是經(jīng)典CORDIC算法的角度覆蓋范圍不夠,只能達(dá)到[-99.88°,99.88° ];二是基于浮點(diǎn)運(yùn)算單元的CORDIC算法會(huì)占用很多的邏輯資源,占用面積大、工作頻率不高。因此如何使得CORDIC算法能夠適用于任意輸入的角度值,并且改進(jìn)計(jì)算過(guò)程中出現(xiàn)的占用面積較大的缺點(diǎn)是亟待解決的問(wèn)題。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種小面積單精度浮點(diǎn)三角函數(shù)的實(shí)現(xiàn)方法,解決了經(jīng)典CORDIC算法的角度覆蓋范圍不夠和邏輯資源占用過(guò)多的問(wèn)題,擴(kuò)大了角度覆蓋范圍,有效的縮減了邏輯資源, 提高了工作頻率。為達(dá)到上述發(fā)明目的,本發(fā)明的技術(shù)方案為:包括如下步驟:步驟一、預(yù)處理模塊C0RDIC_PRE接收輸入的單精度浮點(diǎn)數(shù)據(jù),采用如下方法將單精度浮點(diǎn)數(shù)據(jù)轉(zhuǎn)換到[-η 4,π 4]范圍內(nèi),并轉(zhuǎn)換為高精度定點(diǎn)數(shù)據(jù),將得到的高精度定點(diǎn)數(shù)據(jù)輸入至迭代運(yùn)算模塊C0RDIC_C0RE ;若輸入數(shù)據(jù)為任意范圍的單精度浮點(diǎn)數(shù)據(jù)格式的角度值Θ,分如下兩種情況進(jìn)行角度范圍轉(zhuǎn)換,并將轉(zhuǎn)換后的Θ通過(guò)將單精度浮點(diǎn)數(shù)據(jù)轉(zhuǎn)換為高精度定點(diǎn)數(shù)據(jù);若Θ處于[-2 31,2 31]的范圍內(nèi),將Θ以JI/2或31為單位進(jìn)行旋轉(zhuǎn),旋轉(zhuǎn)至[-JI 4,31 4]范圍內(nèi),記錄所旋轉(zhuǎn)的角度;若Θ處于(2 Ji,Co ) U (- Oo ; -2 Ji)范圍內(nèi),則將Θ加上或者減去2η π,n為整數(shù),使0轉(zhuǎn)換至[-2π,23 ]范圍之內(nèi),將轉(zhuǎn)換后的Θ再次以Ji/2或π為單位進(jìn)行旋轉(zhuǎn),旋轉(zhuǎn)至[_π4, π 4]范圍內(nèi),記錄所旋轉(zhuǎn)的角度;若輸入數(shù)據(jù)為任意范圍的向量(x,y),將(x,y)變換到半徑為I的圓周內(nèi),獲得向量,1'),然后將向量,1')旋轉(zhuǎn)至[-H 4,π 4]圓周范圍內(nèi),記錄所旋轉(zhuǎn)的角度;將單精度浮點(diǎn)數(shù)據(jù)轉(zhuǎn)換為高精度定點(diǎn)數(shù)據(jù);步驟二、C0RDIC_C0RE對(duì)輸入其中的數(shù)據(jù)采用高精度定點(diǎn)運(yùn)算完成CORDIC算法迭代運(yùn)算;將結(jié)果輸入至后處理模塊CORDIC_POST ;步驟三、C0RDIC_P0ST針對(duì)對(duì)輸入其中的數(shù)據(jù),按照不同情況進(jìn)行處理:若需要計(jì)算正余弦函數(shù)值,則輸入至C0RDIC_P0ST中的為同一個(gè)角度的正弦值和余弦值,則在C0RDIC_P0ST中依據(jù)C0RDIC_PRE中記錄的所旋轉(zhuǎn)的角度,按照正余弦函數(shù)值的變換關(guān)系進(jìn)行數(shù)據(jù)恢復(fù);其中數(shù)據(jù)恢復(fù)的方法如下:若所記錄的旋轉(zhuǎn)角度為/2,則根據(jù)正余弦函數(shù)變換關(guān)系
權(quán)利要求
1.一種覆蓋全圓周角度的單精度浮點(diǎn)三角函數(shù)的實(shí)現(xiàn)方法,其特征在于,包括如下步驟: 步驟一、預(yù)處理模塊CORDIC_PRE接收輸入的單精度浮點(diǎn)數(shù)據(jù),采用如下方法將單精度浮點(diǎn)數(shù)據(jù)轉(zhuǎn)換到[-η/4,π/4]范圍內(nèi),并轉(zhuǎn)換為高精度定點(diǎn)數(shù)據(jù),將得到的高精度定點(diǎn)數(shù)據(jù)輸入至迭代運(yùn)算模塊CORDIC_CORE ; 若輸入數(shù)據(jù)為任意范圍的單精度浮點(diǎn)數(shù)據(jù)格式的角度值Θ,分如下兩種情況進(jìn)行角度范圍轉(zhuǎn)換,并將轉(zhuǎn)換后的Θ通過(guò)將單精度浮點(diǎn)數(shù)據(jù)的指數(shù)部分指定為127實(shí)現(xiàn)單精度浮點(diǎn)數(shù)據(jù)到高精度定點(diǎn)數(shù)據(jù)的轉(zhuǎn)換; 若Θ處于[-2 π,2 π ]的范圍內(nèi),將Θ以Ji /2或π為單位進(jìn)行旋轉(zhuǎn),旋轉(zhuǎn)至[-π/4,Jr/4]范圍內(nèi),記錄所旋轉(zhuǎn)的角度; 若Θ處于(2 31,OO ) U (_ °°,-2 31)范圍內(nèi),則將Θ加上或者減去2η 31,η為整數(shù),使0轉(zhuǎn)換至[-2π,23 ]范圍之內(nèi),將轉(zhuǎn)換后的Θ再次以Ji/2或π為單位進(jìn)行旋轉(zhuǎn),旋轉(zhuǎn)至[-π/4, 31/4]范圍內(nèi),記錄所旋轉(zhuǎn)的角度; 若輸入數(shù)據(jù)為任意范圍的向量(x,y),將(x,y)變換到半徑為I的圓周內(nèi),獲得向量U' ,Y'),然后將向量,1')旋轉(zhuǎn)至[-H/4,π/4]圓周范圍內(nèi),記錄所旋轉(zhuǎn)的角度;將單精度浮點(diǎn)數(shù)據(jù)轉(zhuǎn)換為高精度定點(diǎn)數(shù)據(jù); 步驟二、C0RDIC_C0RE對(duì)輸入其中的數(shù)據(jù)采用高精度定點(diǎn)運(yùn)算完成CORDIC算法迭代運(yùn)算;將結(jié)果輸入至后處理模塊C0RDIC_P0ST ; 步驟三、C0RDIC_P0ST針對(duì)對(duì)輸入其中的數(shù)據(jù),按照不同情況進(jìn)行處理: 若需要計(jì)算正余弦函數(shù)值,則輸入至C0RDIC_P0ST中的為同一個(gè)角度的正弦值和余弦值,則在C0RDIC_P0ST中依據(jù)CORDIC_PRE中記錄的所旋轉(zhuǎn)的角度,按照正余弦函數(shù)值的變換關(guān)系進(jìn)行數(shù)據(jù)恢復(fù); 所述數(shù)據(jù)恢復(fù)的方法如下: 若所記錄的旋轉(zhuǎn)角度為-η/2,則根據(jù)正余弦函數(shù)變換關(guān)系
2.如權(quán)利要求1所述的一種覆蓋全圓周角度的單精度浮點(diǎn)三角函數(shù)的實(shí)現(xiàn)方法,其特征在于,在步驟一中,所述記錄所旋轉(zhuǎn)的角度的具體方法為: 按如下方式劃分角度區(qū)間:[-π/4,31/4]作為第一區(qū)間,(π/4,3 π/4]為第二區(qū)間,(3 π /4,-3 π /4]為第三區(qū)間,(_3 π /4:,-π /4)為第四區(qū)間 若輸入數(shù)據(jù)為任意范圍的單精度浮點(diǎn)數(shù)據(jù)格式的角度值Θ,將不屬于[_2π,2π]的范圍內(nèi)的Θ轉(zhuǎn)換至[-2 31,2 31 ]范圍內(nèi),則對(duì)于Θ處于[-2 31,2 31 ]的范圍內(nèi)的情況,僅記錄Θ所處的角度區(qū)間即可得到所旋轉(zhuǎn)的角度;同樣若輸入數(shù)據(jù)為任意范圍的向量(x,y),將(x,y)變換到半徑為I的圓周內(nèi),獲得向量,Y'),僅記錄,Y')所處的角度區(qū)間即可得到所旋轉(zhuǎn)的角度; 若角度Θ或者向量(X ' ,yr )處于第一區(qū)間,則所旋轉(zhuǎn)的角度為零; 若角度Θ或者向量(X' ,y')處于第二區(qū)間,則所旋轉(zhuǎn)的角度為-π/2; 若角度Θ或者向量(X ' ,yr )處于第三區(qū)間,則所旋轉(zhuǎn)的角度為土 π ; 若角度Θ或者向量 (X' ,y')處于第四區(qū)間,則所旋轉(zhuǎn)的角度為+π/2。
全文摘要
本發(fā)明公開(kāi)了一種覆蓋全圓周角度的單精度浮點(diǎn)三角函數(shù)的實(shí)現(xiàn)方法,本發(fā)明屬于數(shù)字信號(hào)處理領(lǐng)域。包括如下步驟:一、預(yù)處理模塊CORDIC_PRE接收輸入的單精度浮點(diǎn)數(shù)據(jù),記錄原始數(shù)據(jù)的象限信息,將單精度浮點(diǎn)數(shù)據(jù)轉(zhuǎn)換到設(shè)定角度范圍內(nèi),并轉(zhuǎn)換為高精度定點(diǎn)數(shù)據(jù),將得到的高精度定點(diǎn)數(shù)據(jù)輸入至迭代運(yùn)算模塊CORDIC_CORE;二、CORDIC_CORE對(duì)輸入其中的數(shù)據(jù)采用高精度定點(diǎn)運(yùn)算完成CORDIC算法迭代運(yùn)算;將結(jié)果輸入至后處理模塊CORDIC_POST;三、CORDIC_POST針對(duì)對(duì)輸入其中的數(shù)據(jù),依據(jù)CORDIC_PRE中記錄的象限信息,對(duì)所要求計(jì)算的正余弦函數(shù)值或者角度值進(jìn)行象限恢復(fù);將恢復(fù)后的數(shù)據(jù)轉(zhuǎn)換成精度浮點(diǎn)數(shù)據(jù)并輸出。本發(fā)明適用于CORDIC算法的實(shí)際運(yùn)算。
文檔編號(hào)G06F7/544GK103150137SQ20131006587
公開(kāi)日2013年6月12日 申請(qǐng)日期2013年3月1日 優(yōu)先權(quán)日2013年3月1日
發(fā)明者陳禾, 陳冬, 于文月, 謝宜壯, 曾濤, 龍騰 申請(qǐng)人:北京理工大學(xué)