胡 煜
(桂林電子科技大學(xué)信息與通信學(xué)院,廣西桂林541004)
基于FPGA實(shí)現(xiàn)改進(jìn)CORDIC算法研究*
胡 煜*
(桂林電子科技大學(xué)信息與通信學(xué)院,廣西桂林541004)
傳統(tǒng)的CORDIC算法雖然能提高相位分辨率,但是硬件資源的消耗量很大,為了解決這個(gè)問題,對(duì)傳統(tǒng)的CORDIC算法進(jìn)行了改進(jìn),主要增加了內(nèi)部相位累加器的位數(shù),同時(shí)使用兩位的方向控制因子改進(jìn)下級(jí)流水操作的加減,在同等硬件資源的消耗量的情況下實(shí)現(xiàn)了更高相位分辨率的正余弦信號(hào)的產(chǎn)生。通過QuartusⅡ和MATLAB驗(yàn)證了系統(tǒng)的可行性。
CORDIC算法;控制因子;MATLAB;FPGA
CORDIC算法也叫坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算機(jī)算法,在基本運(yùn)算領(lǐng)域應(yīng)用非常的廣泛。在高速率運(yùn)算中優(yōu)勢(shì)也非常明顯,因?yàn)榇怂惴ㄐ枰募臃ㄆ骱鸵莆患拇嫫鲾?shù)量很少。目前應(yīng)用最多是在直接數(shù)字頻率合成、快速傅里葉變換等領(lǐng)域。傳統(tǒng)的CORDIC算法具有減少迭代次數(shù)和提高相位分辨率的優(yōu)點(diǎn),但是同時(shí)也有很大的缺點(diǎn)那就是硬件資源的消耗量很大和實(shí)現(xiàn)難度大[1-2]。文章提出的基于FPGA改進(jìn)CORDIC算法是在傳統(tǒng)CORDIC算法上改進(jìn)而成。經(jīng)過改進(jìn)的算法在不增加實(shí)現(xiàn)復(fù)雜度的基礎(chǔ)上減少迭代次數(shù)和提高了相位分辨率,此改進(jìn)算法通過了QuartusⅡ和MATLAB的驗(yàn)證。
CORDIC算法原理圖如圖1所示,設(shè)(xi,yi)為起點(diǎn),經(jīng)過角度為θ的矢量旋轉(zhuǎn)到達(dá)終點(diǎn)(xj,yj)。
由圖1可得式(1):
圖1 CORDIC算法原理圖
從起點(diǎn)到終點(diǎn)如果劃分為若干個(gè)小旋轉(zhuǎn)角度則可表示為:
式(2)也可表示為:
設(shè)每次旋轉(zhuǎn)的角度為θn=arctan(1/2n),總的
旋轉(zhuǎn)角度為:
式(4)中di=±1,所以有tanθ=di2-n,代入式(3)可表示為:
當(dāng)N值比較大時(shí):
如果不考慮cosθn可得:
引入角度累加器追蹤累加的旋轉(zhuǎn)角度:
設(shè)旋轉(zhuǎn)方向控制序列為:{dn=±1;n=0,1,2…},旋轉(zhuǎn)角度θ是正角,開始旋轉(zhuǎn)后,如果出現(xiàn)旋轉(zhuǎn)角首次大于θ的情況時(shí),控制因子是dn=±1,n =0,1,2,…,k1;然后進(jìn)行反向旋轉(zhuǎn),當(dāng)出現(xiàn)旋轉(zhuǎn)角首次小于θ的情況時(shí),控制因子是dn=-1,n=k1+ 1,k1+2,…,k2;重復(fù)此前的旋轉(zhuǎn)就能得到一個(gè)與θ角充分接近旋轉(zhuǎn)向量[3-4]。角度累加器的方向控制因子是:dn=sign(zn)。
設(shè)x0=1,y0=0,z0=θ為初始值,進(jìn)過N次迭代的結(jié)果為xn=(cosz0)/K,yn=(cosz0)/K。把輸出結(jié)果乘上伸縮因子K可得到需要角度的sine和cosine的值。
第1,通過減少計(jì)算周期可使輸出信號(hào)的頻帶范圍擴(kuò)大。為此可以把系統(tǒng)設(shè)計(jì)成流水線結(jié)構(gòu),這樣就能解決因?yàn)榈螖?shù)多導(dǎo)致信號(hào)周期長的問題,有效信號(hào)能在單個(gè)時(shí)鐘周期內(nèi)產(chǎn)生,系統(tǒng)的擴(kuò)展性會(huì)更好,增加流水單元即可實(shí)現(xiàn)提高精度的要求。
第2,因?yàn)橛玫氖嵌嗉?jí)相位累加器,截尾誤差會(huì)在每一級(jí)相位累加器中產(chǎn)生,經(jīng)過串行運(yùn)算截尾誤差會(huì)不斷的累積,為了解決這個(gè)問題,要求每一級(jí)的截尾誤差都必須要滿足一個(gè)條件,這個(gè)條件就是:小于等于最小范圍除以迭代次數(shù)。為了提高運(yùn)算精度,可以把內(nèi)部相位累加器增加一定的位數(shù)[5-6]。
第3,傳統(tǒng)的CORDIC算法中下級(jí)流水操作的加減是由一位方向控制因子控制的。改進(jìn)算法則是使用兩位方向控制因子dn來控制,如果相位累加器的結(jié)果還沒有最小旋轉(zhuǎn)角度的1/2大的時(shí)候,此時(shí)dn處于“01”狀態(tài),所以下一級(jí)流水只保存上一級(jí)的結(jié)果并不操作。
方向控制因子和相關(guān)運(yùn)算映射關(guān)系如表1所示。
表1 映射表
第4,MVR算法的優(yōu)點(diǎn)是相位分辨率很高,但是需要查找表來解決伸縮因子的問題,其缺點(diǎn)也是很明顯的那就是耗費(fèi)了大量的資源。改進(jìn)算法中分利用此算法的優(yōu)點(diǎn),角度還是用式(8)進(jìn)行計(jì)算,所以轉(zhuǎn)過的角度變化不大,而且只有一次角度旋轉(zhuǎn)[7]。在滿足系統(tǒng)對(duì)相位分辨率的要求的同時(shí),最終的結(jié)果可以用最后一級(jí)迭代的次數(shù)乘上相應(yīng)的伸縮因子K得到。系統(tǒng)的FPGA實(shí)現(xiàn)是在Altera公司的開發(fā)軟件QuartusⅡ環(huán)境下使用VerilogHDL硬件描述語言實(shí)現(xiàn)的。頂層文件如圖2所示。
圖2 頂層原理圖
相位累加通過phase_top模塊實(shí)現(xiàn),迭代運(yùn)算通過add_top模塊實(shí)現(xiàn)。所處象限是由輸入的相位值決定的,象限映射關(guān)系如表2所示。
表2 象限映射關(guān)系表
3.1 測(cè)試結(jié)果
用MATLAB對(duì)系統(tǒng)進(jìn)行仿真。把內(nèi)部相位累加器位數(shù)增加4位,這樣可以提高運(yùn)算精度,結(jié)果圖3所示。
圖3 截尾誤差造成的精度下降分析曲線
圖3中實(shí)線data2是正弦函數(shù)值與標(biāo)準(zhǔn)正弦函數(shù)的值絕對(duì)誤差,data1是函數(shù)值與標(biāo)準(zhǔn)正弦函數(shù)值絕對(duì)誤差。通過上圖可以看出運(yùn)算誤差大大降低。相位累加時(shí)考慮控制因dn正負(fù)的同時(shí)還具有停滯狀態(tài),所以此迭代算法在提高迭代精度的同時(shí)還增加了可計(jì)算的相位值。具體的測(cè)試結(jié)果如圖4和圖5所示。
圖4 優(yōu)化算法前后的迭代結(jié)果
由圖4可以看出,通過增加停滯狀態(tài)可以使相位分辨率增加,由圖5可以看出采用文章提出的優(yōu)化算法降低了迭代誤差[8]。表3列出了傳統(tǒng)算法和改進(jìn)后的算法可取的相位數(shù)目,通過表3可以看出改進(jìn)后的CORDIC算法在同等硬件復(fù)雜度的條件下相位分辨率大大提高。
圖5 優(yōu)化算法前后誤差
表3 傳統(tǒng)算法和改進(jìn)算法可取的相位數(shù)目
3.2 結(jié)論
經(jīng)過改進(jìn)的CORDIC算法的內(nèi)部相位的處理位數(shù)和迭代機(jī)制得到了很好的改進(jìn),和傳統(tǒng)的CORDIC算法相比不但相位分辨大大率提高,而且計(jì)算誤差也得到了有效的控制。改善效果最好的是sine和cosine函數(shù)導(dǎo)數(shù)較大的地方。該系統(tǒng)可以廣泛的應(yīng)用在NOC和FFT等領(lǐng)域。
[1] 李美俊,李光明.基于嵌入式的CORDIC算法的改進(jìn)及實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2012,29(2):142-149.
[2] 夏少峰,黃世震.基于System Generator的CORDIC算法DDS的FPGA實(shí)現(xiàn)[J].電子器件,2010,33(1):128-131.
[3] 張尊,李紹榮.基于改進(jìn)的CORDIC算法的NCO實(shí)現(xiàn)[J].信息通信,2009(4):11-13.
[4] 陳彥來.基于CORDIC算法的直角坐標(biāo)與球面坐標(biāo)變換電路的FPGA實(shí)現(xiàn)[J].艦船電子對(duì)抗,2011,34(1):72-75.
[5] 張偉,張安堂,肖宇.基于改進(jìn)的CORDIC算法FFT的復(fù)乘及其FPGA實(shí)現(xiàn)[J].電子技術(shù)引用,2011,37(4):51-54.
[6] 朱雙兵,楊維明,吳恙,等.基于CORDIC算法的線性調(diào)頻信號(hào)產(chǎn)生[J].電子器件,2013,36(4):497-501.
[7] 何賓.FPGA數(shù)字信號(hào)處理實(shí)現(xiàn)原理及方法[M].北京:清華大學(xué)出版社,2010.
[8] 肖振華,林水生.基于CORDIC算法的FPGA實(shí)現(xiàn)[J].實(shí)驗(yàn)科學(xué)與技術(shù),2011,9(5):19-22.
胡 煜(1979- ),男,漢族,湖北黃岡人,碩士,講師,主要研究方向?yàn)榫W(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
項(xiàng)目來源:國家自然科學(xué)基金項(xiàng)目(61261017)
2013-07-30修改日期:2013-08-15
EEACC:0200