段素蓉
(西南交通大學(xué)信息科學(xué)與技術(shù)學(xué)院,四川成都 610031)
三角函數(shù)的坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算機(jī)(Coordinate Rotation Digital Computer,CORDIC)算法最早是由Volder于1959年提出,主要應(yīng)用于實(shí)時(shí)導(dǎo)航的數(shù)字處理[1],通過(guò)擴(kuò)展,該方法現(xiàn)已應(yīng)用于眾多領(lǐng)域,如風(fēng)力發(fā)電、航空航天、雷達(dá)信號(hào)處理、圖像處理、數(shù)字濾波以及通信設(shè)備等[2-4].
基本CORDIC算法的思路為:設(shè)定一個(gè)旋轉(zhuǎn)角度,經(jīng)過(guò)多步旋轉(zhuǎn)迭代,最終計(jì)算出三角函數(shù)值.該方法由于迭代公式的選取限制了最大旋轉(zhuǎn)角度,所以旋轉(zhuǎn)角度不能覆蓋整個(gè)周期(-π~+π),導(dǎo)致部分角度計(jì)算出的三角函數(shù)值偏差較大,在應(yīng)用中存在較大誤差[5-8].本文利用三角函數(shù)的對(duì)稱性,對(duì)輸入角度進(jìn)行了預(yù)處理,把角度限制在基本CORDIC算法能正確計(jì)算的范圍內(nèi),再對(duì)迭代結(jié)果進(jìn)行后處理,實(shí)現(xiàn)了完整周期(-π~+π)的三角函數(shù)計(jì)算.算法采用18級(jí)流水線結(jié)構(gòu)實(shí)現(xiàn),具有轉(zhuǎn)換速度快,精度高,占用資源少等特點(diǎn).
假設(shè)在直角坐標(biāo)系下有向量(Xi,Yi),按圖1所示的方向旋轉(zhuǎn)角度θ得到向量(Xj,Yj),則二者關(guān)系為,
圖1 坐標(biāo)旋轉(zhuǎn)圖
使用迭代的方法,坐標(biāo)需要旋轉(zhuǎn)的角度可通過(guò)多步旋轉(zhuǎn)疊加完成(見(jiàn)圖2).根據(jù)多步旋轉(zhuǎn)疊加完成
圖2 多次旋轉(zhuǎn)疊加示意圖
平面坐標(biāo)旋轉(zhuǎn),則式(1)可進(jìn)一步轉(zhuǎn)化為,
假設(shè),tanθn= Sn/22,則,θn= Snarctan(1/2n).這里,Sn={-1;+1},當(dāng)Sn=-1時(shí),表示向量逆時(shí)針旋轉(zhuǎn),否則為順時(shí)針旋轉(zhuǎn).式(2)中的cosθn= cos(arctan(1/2n)).隨著旋轉(zhuǎn)次數(shù)的增加,該式收斂為一個(gè)常數(shù),k≈0.607253.如果令 Y的初始分量為0,X的初始分量為單位1,則有,
當(dāng) n→∞時(shí),CORDIC公式的輸出變?yōu)?
基本CORDIC算法旋轉(zhuǎn)角度總和為,即最大角度覆蓋范圍約為-99.88°≤θ≤99.88°.利用三角函數(shù)的對(duì)稱性,可把輸入角度限制在{-90°~90°},原理如下:
(1)若,θ≥0°,則θ′=θ-90°,否則,θ′=θ+ 90°,所以有,-90°≤θ′≤90°.
(2)根據(jù)三角函數(shù)變換公式,
改進(jìn)CORDIC算法采用18級(jí)流水結(jié)構(gòu),各級(jí)間組合邏輯處理復(fù)雜度適中,處理速度快,能夠滿足風(fēng)力發(fā)電變流器的控制系統(tǒng)坐標(biāo)變換處理實(shí)時(shí)性要求.設(shè)計(jì)分為3個(gè)模塊.
(1)輸入角度預(yù)處理模塊.若輸入角度符號(hào)位為0,則減去90°,否則加上90°.設(shè)計(jì)中采用17 bit有符號(hào)數(shù)表示輸入角度.該模塊使用1級(jí)流水處理.
(2)基本CORDIC迭代模塊.迭代過(guò)程采用15級(jí)流水結(jié)構(gòu)(見(jiàn)圖3),內(nèi)部使用17 bit有符號(hào)變量,保證了運(yùn)算精度高且運(yùn)算過(guò)程不發(fā)生溢出,迭代中的乘法(1/2n)采用移位實(shí)現(xiàn).該模塊使用15級(jí)流水處理.
圖3 CORDIC算法流水線結(jié)構(gòu)框圖
(3)迭代結(jié)果后處理模塊.將輸入角度符號(hào)位延時(shí)16級(jí),與迭代結(jié)果對(duì)齊,根據(jù)延時(shí)后的符號(hào)位及式(6)對(duì)結(jié)果進(jìn)行處理,同時(shí)對(duì)結(jié)果進(jìn)行飽和處理,最后輸出16 bit有符號(hào)的三角函數(shù)值.該模塊使用2級(jí)流水處理.
圖4 改進(jìn)前的CORDIC迭代三角函數(shù)值
(1)改進(jìn)前后三角函數(shù)值仿真對(duì)比(輸入角度為-π~+π).
圖5 改進(jìn)后的CORDIC迭代三角函數(shù)值
CORDIC算法改進(jìn)前后三角函數(shù)值仿真對(duì)比如圖4、圖5所示.從圖4、圖5可以看出,改進(jìn)后的CORDIC算法可以覆蓋完整周期(-π~+π)的三角函數(shù)計(jì)算,從而滿足了信號(hào)處理的需求.
(2)改進(jìn)CORDIC算法精度對(duì)比.
改進(jìn)前后CORDIC算法精度對(duì)比如表1所示.從表1的對(duì)比結(jié)果可以看出,改進(jìn)CORDIC算法采用18級(jí)流水結(jié)構(gòu),內(nèi)部使用17 bit有符號(hào)數(shù)進(jìn)行計(jì)算,得到的結(jié)果精度高,誤差小于0.01%,完全可以滿足風(fēng)力發(fā)電變流器的控制系統(tǒng)坐標(biāo)變換處理的精度要求.
表1 改進(jìn)型CORDIC算法仿真對(duì)照表
改進(jìn)CORDIC算法克服了基本CORDIC算法不能覆蓋完整周期的三角函數(shù)計(jì)算的缺點(diǎn),由于改進(jìn)CORDIC算法采用18級(jí)流水線結(jié)構(gòu),且內(nèi)部采用17 bit有符號(hào)定點(diǎn)數(shù)計(jì)算,保證了轉(zhuǎn)換速度快,運(yùn)算結(jié)果精度高,易于用FPG A實(shí)現(xiàn).仿真測(cè)試表明,改進(jìn)CORDIC算法完全能滿足風(fēng)力發(fā)電變流器系統(tǒng)控制中坐標(biāo)變換處理的精度要求.
[1]Volder J E.The CORDIC Trigonometric Computing Technique [J].IRE Trans Electronic Computers,1959,8(3):330-334.
[2]Walther J S.A Unified Algorithm for Elementary Functions[C]// AFIPS71’Spring Joint Computer Conference.New Y ork:ACM Press,1971:379-385.
[3]徐國(guó)庫(kù),陳禾.基于CORDIC算法的坐標(biāo)變換電路的FPG A實(shí)現(xiàn)[J].微電子技術(shù),2010,39(10):108-110.
[4]陳嫦娥,毛承雄.多相交流系統(tǒng)的PARK變換[J].高電壓技術(shù),2008,34(11):2475-2482.
[5]王敏,薛忠杰.基于改進(jìn)Cordic算法的NCO設(shè)計(jì)[J].電視技術(shù),2011,35(5):30-33.
[6]湯文亮.基于CORDIC算法的高速高精度DDS研究與實(shí)現(xiàn)[J].制造業(yè)自動(dòng)化,2011,33(3):104-106.
[7]文婧媛,徐欣峰.基于CORDIC算法的高速可配置FFT的FPG A實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2010,27(3):24-28.
[8]何曉華,謝建精,郭洪志,等.基于擴(kuò)展收斂域CORDIC算法的FM信號(hào)數(shù)字化解調(diào)實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2010, 36(1)53-56.