胡 煜
(桂林電子科技大學(xué)信息與通信學(xué)院,廣西桂林541004)
基于FPGA實現(xiàn)改進CORDIC算法研究*
胡 煜*
(桂林電子科技大學(xué)信息與通信學(xué)院,廣西桂林541004)
傳統(tǒng)的CORDIC算法雖然能提高相位分辨率,但是硬件資源的消耗量很大,為了解決這個問題,對傳統(tǒng)的CORDIC算法進行了改進,主要增加了內(nèi)部相位累加器的位數(shù),同時使用兩位的方向控制因子改進下級流水操作的加減,在同等硬件資源的消耗量的情況下實現(xiàn)了更高相位分辨率的正余弦信號的產(chǎn)生。通過QuartusⅡ和MATLAB驗證了系統(tǒng)的可行性。
CORDIC算法;控制因子;MATLAB;FPGA
CORDIC算法也叫坐標旋轉(zhuǎn)數(shù)字計算機算法,在基本運算領(lǐng)域應(yīng)用非常的廣泛。在高速率運算中優(yōu)勢也非常明顯,因為此算法需要的加法器和移位寄存器數(shù)量很少。目前應(yīng)用最多是在直接數(shù)字頻率合成、快速傅里葉變換等領(lǐng)域。傳統(tǒng)的CORDIC算法具有減少迭代次數(shù)和提高相位分辨率的優(yōu)點,但是同時也有很大的缺點那就是硬件資源的消耗量很大和實現(xiàn)難度大[1-2]。文章提出的基于FPGA改進CORDIC算法是在傳統(tǒng)CORDIC算法上改進而成。經(jīng)過改進的算法在不增加實現(xiàn)復(fù)雜度的基礎(chǔ)上減少迭代次數(shù)和提高了相位分辨率,此改進算法通過了QuartusⅡ和MATLAB的驗證。
CORDIC算法原理圖如圖1所示,設(shè)(xi,yi)為起點,經(jīng)過角度為θ的矢量旋轉(zhuǎn)到達終點(xj,yj)。
由圖1可得式(1):
圖1 CORDIC算法原理圖
從起點到終點如果劃分為若干個小旋轉(zhuǎn)角度則可表示為:
式(2)也可表示為:
設(shè)每次旋轉(zhuǎn)的角度為θn=arctan(1/2n),總的
旋轉(zhuǎn)角度為:
式(4)中di=±1,所以有tanθ=di2-n,代入式(3)可表示為:
當(dāng)N值比較大時:
如果不考慮cosθn可得:
引入角度累加器追蹤累加的旋轉(zhuǎn)角度:
設(shè)旋轉(zhuǎn)方向控制序列為:{dn=±1;n=0,1,2…},旋轉(zhuǎn)角度θ是正角,開始旋轉(zhuǎn)后,如果出現(xiàn)旋轉(zhuǎn)角首次大于θ的情況時,控制因子是dn=±1,n =0,1,2,…,k1;然后進行反向旋轉(zhuǎn),當(dāng)出現(xiàn)旋轉(zhuǎn)角首次小于θ的情況時,控制因子是dn=-1,n=k1+ 1,k1+2,…,k2;重復(fù)此前的旋轉(zhuǎn)就能得到一個與θ角充分接近旋轉(zhuǎn)向量[3-4]。角度累加器的方向控制因子是:dn=sign(zn)。
設(shè)x0=1,y0=0,z0=θ為初始值,進過N次迭代的結(jié)果為xn=(cosz0)/K,yn=(cosz0)/K。把輸出結(jié)果乘上伸縮因子K可得到需要角度的sine和cosine的值。
第1,通過減少計算周期可使輸出信號的頻帶范圍擴大。為此可以把系統(tǒng)設(shè)計成流水線結(jié)構(gòu),這樣就能解決因為迭代次數(shù)多導(dǎo)致信號周期長的問題,有效信號能在單個時鐘周期內(nèi)產(chǎn)生,系統(tǒng)的擴展性會更好,增加流水單元即可實現(xiàn)提高精度的要求。
第2,因為用的是多級相位累加器,截尾誤差會在每一級相位累加器中產(chǎn)生,經(jīng)過串行運算截尾誤差會不斷的累積,為了解決這個問題,要求每一級的截尾誤差都必須要滿足一個條件,這個條件就是:小于等于最小范圍除以迭代次數(shù)。為了提高運算精度,可以把內(nèi)部相位累加器增加一定的位數(shù)[5-6]。
第3,傳統(tǒng)的CORDIC算法中下級流水操作的加減是由一位方向控制因子控制的。改進算法則是使用兩位方向控制因子dn來控制,如果相位累加器的結(jié)果還沒有最小旋轉(zhuǎn)角度的1/2大的時候,此時dn處于“01”狀態(tài),所以下一級流水只保存上一級的結(jié)果并不操作。
方向控制因子和相關(guān)運算映射關(guān)系如表1所示。
表1 映射表
第4,MVR算法的優(yōu)點是相位分辨率很高,但是需要查找表來解決伸縮因子的問題,其缺點也是很明顯的那就是耗費了大量的資源。改進算法中分利用此算法的優(yōu)點,角度還是用式(8)進行計算,所以轉(zhuǎn)過的角度變化不大,而且只有一次角度旋轉(zhuǎn)[7]。在滿足系統(tǒng)對相位分辨率的要求的同時,最終的結(jié)果可以用最后一級迭代的次數(shù)乘上相應(yīng)的伸縮因子K得到。系統(tǒng)的FPGA實現(xiàn)是在Altera公司的開發(fā)軟件QuartusⅡ環(huán)境下使用VerilogHDL硬件描述語言實現(xiàn)的。頂層文件如圖2所示。
圖2 頂層原理圖
相位累加通過phase_top模塊實現(xiàn),迭代運算通過add_top模塊實現(xiàn)。所處象限是由輸入的相位值決定的,象限映射關(guān)系如表2所示。
表2 象限映射關(guān)系表
3.1 測試結(jié)果
用MATLAB對系統(tǒng)進行仿真。把內(nèi)部相位累加器位數(shù)增加4位,這樣可以提高運算精度,結(jié)果圖3所示。
圖3 截尾誤差造成的精度下降分析曲線
圖3中實線data2是正弦函數(shù)值與標準正弦函數(shù)的值絕對誤差,data1是函數(shù)值與標準正弦函數(shù)值絕對誤差。通過上圖可以看出運算誤差大大降低。相位累加時考慮控制因dn正負的同時還具有停滯狀態(tài),所以此迭代算法在提高迭代精度的同時還增加了可計算的相位值。具體的測試結(jié)果如圖4和圖5所示。
圖4 優(yōu)化算法前后的迭代結(jié)果
由圖4可以看出,通過增加停滯狀態(tài)可以使相位分辨率增加,由圖5可以看出采用文章提出的優(yōu)化算法降低了迭代誤差[8]。表3列出了傳統(tǒng)算法和改進后的算法可取的相位數(shù)目,通過表3可以看出改進后的CORDIC算法在同等硬件復(fù)雜度的條件下相位分辨率大大提高。
圖5 優(yōu)化算法前后誤差
表3 傳統(tǒng)算法和改進算法可取的相位數(shù)目
3.2 結(jié)論
經(jīng)過改進的CORDIC算法的內(nèi)部相位的處理位數(shù)和迭代機制得到了很好的改進,和傳統(tǒng)的CORDIC算法相比不但相位分辨大大率提高,而且計算誤差也得到了有效的控制。改善效果最好的是sine和cosine函數(shù)導(dǎo)數(shù)較大的地方。該系統(tǒng)可以廣泛的應(yīng)用在NOC和FFT等領(lǐng)域。
[1] 李美俊,李光明.基于嵌入式的CORDIC算法的改進及實現(xiàn)[J].微電子學(xué)與計算機,2012,29(2):142-149.
[2] 夏少峰,黃世震.基于System Generator的CORDIC算法DDS的FPGA實現(xiàn)[J].電子器件,2010,33(1):128-131.
[3] 張尊,李紹榮.基于改進的CORDIC算法的NCO實現(xiàn)[J].信息通信,2009(4):11-13.
[4] 陳彥來.基于CORDIC算法的直角坐標與球面坐標變換電路的FPGA實現(xiàn)[J].艦船電子對抗,2011,34(1):72-75.
[5] 張偉,張安堂,肖宇.基于改進的CORDIC算法FFT的復(fù)乘及其FPGA實現(xiàn)[J].電子技術(shù)引用,2011,37(4):51-54.
[6] 朱雙兵,楊維明,吳恙,等.基于CORDIC算法的線性調(diào)頻信號產(chǎn)生[J].電子器件,2013,36(4):497-501.
[7] 何賓.FPGA數(shù)字信號處理實現(xiàn)原理及方法[M].北京:清華大學(xué)出版社,2010.
[8] 肖振華,林水生.基于CORDIC算法的FPGA實現(xiàn)[J].實驗科學(xué)與技術(shù),2011,9(5):19-22.
胡 煜(1979- ),男,漢族,湖北黃岡人,碩士,講師,主要研究方向為網(wǎng)絡(luò)通信/無線通信,huyu@guet.edu.cn。
Improve the CORDIC Algorithm Research Based on FPGA*
HU Yu*
(School of Information and Communication,Guilin University of Electronic Technology,Guilin Guangxi 541004,China)
Traditional CORDIC algorithm can improve the phase resolution,but consume considerable hardware resources.To solve this problem,the conventional CORDIC algorithm,in the great majority of cases,increases the medians in the internal phase accumulator,at the same time using the two-direction control factor to the lower pipeline addition and subtraction operations,and in the case of the same hardware resources consumption to achieves a higher phase resolution of the sine and cosine signal generation.The feasibility of the system is verified by QuartusⅡand MATLAB.
CORDIC algorithm;control factor;MATLAB;FPGA
10.3969/j.issn.1005-9490.2014.02.041
TN702;TP301.5
A
1005-9490(2014)02-0358-03
項目來源:國家自然科學(xué)基金項目(61261017)
2013-07-30修改日期:2013-08-15
EEACC:0200