陳彥來(lái)
(船舶重工集團(tuán)公司723所,揚(yáng)州 225001)
在雷達(dá)數(shù)據(jù)處理信號(hào)模擬器中,目標(biāo)的初始位置、速度、加速度等信息通常是以球面坐標(biāo)形式給出的,而目標(biāo)位置的外推需要在直角坐標(biāo)系中進(jìn)行,因此需要將目標(biāo)初始位置、速度、加速度等信息從球面坐標(biāo)系變換到直角坐標(biāo)系,也就是將初始位置、速度、加速度矢量在直角坐標(biāo)系中進(jìn)行分解,得到其在X軸、Y軸、Z軸上的坐標(biāo),然后按照經(jīng)典運(yùn)動(dòng)學(xué)公式進(jìn)行外推;在得到目標(biāo)下一時(shí)刻X、Y、Z坐標(biāo)后,通常還要將其轉(zhuǎn)換成相應(yīng)的距離、方位角、俯仰角信息,也就是進(jìn)行直角坐標(biāo)系到球面坐標(biāo)系的變換?,F(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)以其高速性和靈活性在現(xiàn)今的雷達(dá)數(shù)據(jù)處理領(lǐng)域已經(jīng)得到了廣泛的應(yīng)用,但如果處理算法中需要計(jì)算超越函數(shù),例如 sinθ,cosθ,arcsinx,arccosx,xn等,通常采用查表法和泰勒級(jí)數(shù)展開(kāi)法。使用有限的FPGA面積設(shè)計(jì)高精度的數(shù)據(jù)表格,特別是在需要多張數(shù)據(jù)表格的情況下,其設(shè)計(jì)有一定難度。泰勒級(jí)數(shù)展開(kāi)法可以將復(fù)雜的函數(shù)分解為一系列的乘方和加減法運(yùn)算,解決計(jì)算精度的問(wèn)題,但乘方運(yùn)算需要消耗過(guò)多的FPGA硬件資源;另外還有些超越函數(shù)的泰勒級(jí)數(shù)展開(kāi)式本身就不存在(例如反三角函數(shù)等),因此泰勒級(jí)數(shù)展開(kāi)法在坐標(biāo)轉(zhuǎn)換電路中也存在一定的局限性。有礙于FPGA器件面積消耗和計(jì)算精度、速度之間的矛盾,直角坐標(biāo)與球面坐標(biāo)變換電路不得不考慮其他實(shí)現(xiàn)方法。CORDIC算法能夠方便地計(jì)算正余弦、反正余弦、乘方、開(kāi)方等運(yùn)算,并且在實(shí)現(xiàn)過(guò)程中僅用到加法器和移位器,與FPGA的特點(diǎn)完全吻合,能夠完成直角坐標(biāo)與球面坐標(biāo)變換電路設(shè)計(jì)。
CORDIC算法最初由Volder于1959年提出,其基本數(shù)學(xué)思想是通過(guò)一系列固定的、與運(yùn)算基數(shù)相關(guān)的角度的不斷旋轉(zhuǎn)、累加而逼近所要旋轉(zhuǎn)的角度。如圖1所示,向量OA繞原點(diǎn)O逆時(shí)針旋轉(zhuǎn)θ角度后到達(dá)向量OB位置,假設(shè)A點(diǎn)坐標(biāo)為(xi,yi),B點(diǎn)坐標(biāo)為(xj,yj),則:
圖1 矢量旋轉(zhuǎn)模型
假設(shè)向量OA逆時(shí)針旋轉(zhuǎn)θ角度是由N次微旋轉(zhuǎn)所構(gòu)成的,由式(1)可知:向量OA的第n+1次微旋轉(zhuǎn)可表示為:
式中:n=0,1,…,N-1。
由式(1)、(2),可得:
針對(duì)FPGA的結(jié)構(gòu)特點(diǎn),選取θn=arctan(1/2n),即 tanθn=1/2n。對(duì)式(3)前面的系數(shù)K取極限得:
如果忽略常系數(shù)K,式(2)可表示為:
式中:Si={1,-1},Si=1表示第n+1微旋轉(zhuǎn)方向?yàn)槟鏁r(shí)針,Si=-1表示微旋轉(zhuǎn)方向?yàn)轫槙r(shí)針。
根據(jù)每次微旋轉(zhuǎn)方向的判定準(zhǔn)則,CORDIC算法有旋轉(zhuǎn)模式和矢量模式2種。旋轉(zhuǎn)模式是以角度誤差的符號(hào)作為每次微旋轉(zhuǎn)方向的判斷依據(jù),最終使角度誤差等于零或趨近于零,可用于求正余弦值,適用于球面坐標(biāo)系到直角坐標(biāo)系變換;矢量模式是以每次微旋轉(zhuǎn)后旋轉(zhuǎn)矢量Y軸坐標(biāo)的符號(hào)作為下次微旋轉(zhuǎn)方向的判斷依據(jù),最終使旋轉(zhuǎn)矢量與X軸重合或趨近重合,可用于求極徑和極角,適用于直角坐標(biāo)系到球面坐標(biāo)系變換。
假定起始向量為OA,其中A點(diǎn)坐標(biāo)為(1,0),經(jīng)過(guò)N次微旋轉(zhuǎn)后到達(dá)終止向量OB的位置,B點(diǎn)坐標(biāo)為(x,y)。從起始向量到終止向量旋轉(zhuǎn)的角度為θ,則B點(diǎn)坐標(biāo)為(cosθ,sinθ),也就說(shuō)通過(guò)矢量旋轉(zhuǎn)得到了θ角度的正余弦值。為了通過(guò)若干次的微旋轉(zhuǎn)等于或逼近旋轉(zhuǎn)角度θ,則需要按照式(6)的規(guī)則進(jìn)行每次微旋轉(zhuǎn)旋轉(zhuǎn)方向的判斷。式(6)中θerr_n=θ-θn。
由矢量旋轉(zhuǎn)的幾何關(guān)系可知:N次微旋轉(zhuǎn)后的B點(diǎn)橫坐標(biāo)即為 cosθ,縱坐標(biāo)即為 sinθ,也即利用CORDIC算法巧妙地解決了球面坐標(biāo)系到直角坐標(biāo)系變換過(guò)程中正余弦值的計(jì)算問(wèn)題。
假設(shè)起始向量為OA,點(diǎn)A坐標(biāo)為(xi,yi),旋轉(zhuǎn)終止向量為OB,點(diǎn)B坐標(biāo)為(xj,0)。從OA到OB的旋轉(zhuǎn)過(guò)程可以通過(guò)N次微旋轉(zhuǎn)完成,其每次微旋轉(zhuǎn)方向由式(8)、(9)決定。
若yn>0,則:
由矢量旋轉(zhuǎn)的幾何關(guān)系可知:B點(diǎn)橫坐標(biāo)xj為向量OA的極徑,旋轉(zhuǎn)的角度θ為向量OA的極角。由于arctan(2-n)為一系列常數(shù)值,可以離線計(jì)算,因此平面直角坐標(biāo)系到球面坐標(biāo)系變換過(guò)程中復(fù)雜的平方、開(kāi)方、反三角函數(shù)計(jì)算可以通過(guò)CORDIC算法簡(jiǎn)化為簡(jiǎn)單的移位和加減運(yùn)算。
如圖2所示,假設(shè)任一點(diǎn)A的直角坐標(biāo)為(x,y,z),球面坐標(biāo)為(R,α,β),根據(jù)幾何關(guān)系可知:x=Rcosβcosα,y=Rcosβsinα,z=Rsinβ;依據(jù)式(6)原則,按照CORDIC算法的旋轉(zhuǎn)模式進(jìn)行迭代運(yùn)算 ,可以計(jì)算出 cosβ,sinα,sinβ,再進(jìn)行乘法運(yùn)算即可完成球面坐標(biāo)到直角坐標(biāo)的變換;而直角坐標(biāo)到球面坐標(biāo)變換分為2步進(jìn)行:首先利用CORDIC算法,在XOY平面內(nèi),依據(jù)式(7)、(8)計(jì)算出OB和α;然后再次利用CORDIC算法,在ZOB平面內(nèi),依據(jù)式(7)、(8)計(jì)算出OA和β,至此完成直角坐標(biāo)到球面坐標(biāo)的變換。
直角坐標(biāo)與球面坐標(biāo)變換分為直角坐標(biāo)到球面坐標(biāo)變換和球面坐標(biāo)到直角坐標(biāo)變換2種,下面以直角坐標(biāo)到球面坐標(biāo)變換為例來(lái)說(shuō)明直角坐標(biāo)與球面坐標(biāo)變換電路的FPGA實(shí)現(xiàn)。
圖2 直角坐標(biāo)和球面坐標(biāo)變換
由式(8)、(9)可知,CORDIC算法的絕大部分計(jì)算為迭代運(yùn)算,在FPGA中有2種實(shí)現(xiàn)方案。其一為設(shè)計(jì)一個(gè)有限狀態(tài)機(jī),然后利用其狀態(tài)變化控制每次的迭代運(yùn)算,直至完成一次坐標(biāo)變換;其二為流水方式,構(gòu)造若干個(gè)不同的迭代結(jié)構(gòu),對(duì)其進(jìn)行流水線操作,直至計(jì)算出結(jié)果。前者需要的FPGA資源少,但進(jìn)行一次變換所需時(shí)間長(zhǎng),并且不能進(jìn)行流水線處理,不利于系統(tǒng)的實(shí)時(shí)算法實(shí)現(xiàn);后者對(duì)FPGA的資源要求高,但平均計(jì)算時(shí)間短,在流水的情況下,可以達(dá)到系統(tǒng)頻率,有利于系統(tǒng)的實(shí)時(shí)處理。在本文中采用流水線的處理方式,其單次迭代結(jié)構(gòu)如圖3所示。
圖3 CORDIC算法流水線處理單次迭代結(jié)構(gòu)
在CORDIC算法迭代處理過(guò)程中,假設(shè)每次微旋轉(zhuǎn)均為逆時(shí)針?lè)较?且微旋轉(zhuǎn)次數(shù)為無(wú)窮大,最大可旋轉(zhuǎn)角度為 θmax,則 θmax≈1.743 3。為了使微旋轉(zhuǎn)后的矢量落在X正半軸(或趨于X正半軸),則被旋轉(zhuǎn)的矢量極角θ應(yīng)滿足-θmax≤θ≤θmax;同時(shí)通過(guò)大量仿真實(shí)驗(yàn)發(fā)現(xiàn),當(dāng)被旋轉(zhuǎn)矢量靠近Y軸時(shí),極角θ的計(jì)算誤差較大。
在本文中,為了使旋轉(zhuǎn)矢量極角達(dá)到2π,同時(shí)減少角度計(jì)算誤差,加入了CORDIC算法的預(yù)處理模塊,處理原則為:
(1)如果被旋轉(zhuǎn)矢量在第二象限,則通過(guò)Y軸對(duì)稱(chēng)將其變換到第一象限;如果被旋轉(zhuǎn)矢量在第三象限,則通過(guò)原點(diǎn)對(duì)稱(chēng)將其變換到第一象限;如果被旋轉(zhuǎn)矢量在第四象限,則通過(guò)X軸對(duì)稱(chēng)將其變換到第一象限。
(2)如果被旋轉(zhuǎn)矢量變換后θ>0.25π,則把變換后旋轉(zhuǎn)矢量關(guān)于Y=X的對(duì)稱(chēng)矢量作為最終的旋轉(zhuǎn)矢量。由于在對(duì)被旋轉(zhuǎn)矢量進(jìn)行微旋轉(zhuǎn)前進(jìn)行了對(duì)稱(chēng)變換,必然會(huì)影響到極角的計(jì)算結(jié)果,在CORDIC流水計(jì)算完成后需要對(duì)極角的計(jì)算結(jié)果進(jìn)行修正;而對(duì)于極徑而言,不會(huì)隨對(duì)稱(chēng)變換而發(fā)生變化,因而CORDIC算法計(jì)算出的值即為其真實(shí)值。考慮原則(1)、(2)以及極角計(jì)算結(jié)果的修正,CORDIC算法預(yù)處理模塊計(jì)算規(guī)則和后處理極角修正規(guī)則如表1所示。
利用CORDIC算法實(shí)現(xiàn)直角坐標(biāo)到球面坐標(biāo)變換的后處理模塊主要是實(shí)現(xiàn)極角修正和極徑縮放(乘以式(3)中的常數(shù)K)。其中極角的修正規(guī)律見(jiàn)表1的最后一列;極徑縮放通過(guò)乘以一個(gè)固定的因子來(lái)實(shí)現(xiàn),可以利用FPGA的DSP IP核來(lái)實(shí)現(xiàn),在此不再論述。
根據(jù)前面所述,直角坐標(biāo)到球面坐標(biāo)變換分為兩部分:其一為在XOY平面利用CORDIC算法計(jì)算OB和 α;其二為在ZOB平面內(nèi),再次利用CORDIC算法計(jì)算OA和β,其FPGA電路模塊劃分如圖4所示。
圖4 直角坐標(biāo)到球面坐標(biāo)變換電路的FPGA實(shí)現(xiàn)模塊劃分
其中x0、y0為原始矢量的直角坐標(biāo),x1、y1為進(jìn)行坐標(biāo)對(duì)稱(chēng)變換后的直角坐標(biāo),θ17為CORDIC算法計(jì)算出的極角,θ為其修正值。
在圖4中,clk為時(shí)鐘信號(hào),xyz_inen為輸入使能信號(hào),qiumianzuobiao_outen為輸出使能信號(hào),xin、yin、zin 為直角坐標(biāo)輸入 ,jijing、fangweijiao、yangjiao為球面坐標(biāo)輸出。inst1完成直角坐標(biāo)輸入信號(hào)的鎖存,inst2完成在XOY平面的變換,inst6完成ZOB平面的變換;inst4形成輸出使能信號(hào),inst3,inst5完成數(shù)據(jù)同步。
本文利用Altera公司的QuartusⅡ7.2軟件,采用VHDL硬件描述語(yǔ)言對(duì)直角坐標(biāo)到球面坐標(biāo)變換電路模塊進(jìn)行了功能描述和時(shí)序仿真,待仿真結(jié)果正確后綜合出電路網(wǎng)表,最后下載到Altera公司生產(chǎn)的StratixⅡ器件EP2S90F1020I4中進(jìn)行了試驗(yàn)驗(yàn)證。圖5為時(shí)序仿真波形,其中系統(tǒng)時(shí)鐘clk為40 MHz;xin為xin_0=-500,每個(gè)時(shí)鐘周期增加100的等差數(shù)列;yin為yin_0=200,每個(gè)時(shí)鐘周期遞減50的等差數(shù)列;zin為zin_0=50,每個(gè)時(shí)鐘周期增加10的等差數(shù)列。
圖5 直角坐標(biāo)到球面坐標(biāo)變換電路時(shí)序仿真波形
圖6為通過(guò)QuartusⅡ自帶的在線邏輯分析儀SignalTapⅡ采集到的波形。
圖6 直角坐標(biāo)到球面坐標(biāo)變換電路實(shí)際信號(hào)波形
本文研究了CORDIC算法的基本原理,提出了利用CORDIC算法實(shí)現(xiàn)直角坐標(biāo)與球面坐標(biāo)變換電路的方案,并且進(jìn)行了仿真試驗(yàn)驗(yàn)證。
試驗(yàn)結(jié)果表明,利用CORDIC算法實(shí)現(xiàn)直角坐標(biāo)與球面坐標(biāo)變換電路具有較高的運(yùn)算速度和運(yùn)算精度,并且在FPGA實(shí)現(xiàn)過(guò)程中利用資源少,具有較高的使用價(jià)值。由此可見(jiàn),本文所提出的利用CORDIC算法實(shí)現(xiàn)直角坐標(biāo)與球面坐標(biāo)變換電路的方案是切實(shí)可行的,其具有一定的理論和工程應(yīng)用價(jià)值。
[1] 季中恒,宋博.CORDIC算法及其硬件實(shí)現(xiàn)[J].彈劍與制導(dǎo)學(xué)報(bào),2005,25(3):609-610.
[2] 王智霞,王廣生.CORDIC算法在FPGA中的實(shí)現(xiàn)[J].微處理機(jī),2007,2(1):4-7.
[3] VOLDER J E.The CORDIC trigonometric comphting technique[J].IRE Transactions on Electronic Computers,1959,8(9):330-334.
[4] 楊宏,李國(guó)輝,劉立新.基于FPGA的CORDIC算法的實(shí)現(xiàn)[J].西安郵電學(xué)院學(xué)報(bào),2008,13(1),75-77.
[5] 王誠(chéng),吳繼華,范麗珍,等.Altera FPGA/CPLD設(shè)計(jì)[M].北京:人民郵電出版社,2005.