《電子技術應用》
您所在的位置:首頁 > 通信與網(wǎng)絡 > 設計應用 > 基于CORDIC改進算法的NCO設計
基于CORDIC改進算法的NCO設計
2017年電子技術應用第3期
王申卓,胡春林,胡廣垠,徐大誠
蘇州大學 電子信息學院,江蘇 蘇州215000
摘要: 數(shù)控振蕩器(NCO)已經(jīng)被廣泛應用于數(shù)字信號處理、軟件無線電系統(tǒng)等諸多領域中。針對基于傳統(tǒng)CORDIC(Coordinate Rotation Digital Computer)算法的NCO存在工作頻率較低、精度不高、且消耗資源多等缺點,通過對CORDIC算法進一步優(yōu)化改進,提出了一種NCO的設計方法,將覆蓋角度擴展至整個圓周范圍,實現(xiàn)了幅度與相位之間分別對應,且輸出的正余弦波形具有完全正交性。實驗結果表明,設計的NCO具有運算速度快,消耗硬件資源較少,結構簡單易于使用硬件電路實現(xiàn)的優(yōu)勢,最高頻率比基于傳統(tǒng)CORDIC算法的NCO提高了114.3%,并將精度提高至10-5~10-6的數(shù)量級。
中圖分類號: TN402
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2017.03.010
中文引用格式: 王申卓,胡春林,胡廣垠,等. 基于CORDIC改進算法的NCO設計[J].電子技術應用,2017,43(3):43-47.
英文引用格式: Wang Shenzhuo,Hu Chunlin,Hu Guangyin,et al. Design of NCO based on improved CORDIC algorithm[J].Application of Electronic Technique,2017,43(3):43-47.
Design of NCO based on improved CORDIC algorithm
Wang Shenzhuo,Hu Chunlin,Hu Guangyin,Xu Dacheng
School of Electronic and Information Engineering,Soochow University,Suzhou 215000,China
Abstract: Numerically Controlled Oscillator(NCO) has been widely applied in many fields,including digital signal processing and software defined radio. NCO based on the conventional CORDIC has disadvantages of low operation frequency, low precision, and high consumption of resources. To solve these problems, a design of NCO is presented in this paper by improving the conventional CORDIC, the phase and amplitude of a one-to-one corespondence is realized, extends the convergence range to the entire circumference, and the sine and cosine waveforms are completely orthogonal. The simulation results showed that the design has advantages of high speed, low resource usage and simple structure, the maximum clock frequency is 114.3% higher than the NCO which is based on the traditional CORDIC algorithm, and the accuracy is improved to 10-5~10-6.
Key words : NCO;CORDIC algorithm;precision;pipeline

0 引言

    數(shù)控振蕩器(Numerically Controlled Oscillator,NCO)是信號處理系統(tǒng)的重要組成部分。隨著現(xiàn)代通信系統(tǒng)的不斷發(fā)展,NCO憑借其相位可連續(xù)線性變化、頻率分辨率高、全數(shù)字化處理等優(yōu)越特性,在圖像處理、快速傅里葉變換、直接數(shù)字頻率合成器等設計中得到了廣泛應用。

    傳統(tǒng)數(shù)控振蕩器的實現(xiàn)方法為只讀存儲器查找表法(ROM LUT),如圖1所示。這種方法在對分辨率要求不高的情況下,是一種簡單的實現(xiàn)方式。但是若要進一步提高分辨率,就會消耗大量的ROM資源;此外,存儲器讀取速度的瓶頸也限制了NCO的輸出速度。而CORDIC算法易于使用數(shù)字電路實現(xiàn),僅通過簡單的加減法和移位操作就可以完成多種硬件電路難以直接實現(xiàn)的復雜運算,因此在NCO的設計中也得到了很好的應用。本文將對傳統(tǒng)CORDIC算法進一步改進,并結合改進方法提出一種適合于硬件實現(xiàn)的數(shù)控振蕩器的設計方法,從而提高輸出精度和運算速度。

wdz6-t1.gif

1 CORDIC算法原理

    坐標旋轉數(shù)字計算(Coordinate Rotation Digital Computer,CORDIC)首次由Jack Volder于1959年提出,1971年Walther統(tǒng)一了CORDIC算法的形式。CORDIC的基本思想是通過一系列只與運算基數(shù)有關的固定小角度的不斷偏擺從而逼近期望角度,此算法具有線性收斂域和序列特性[3]

    CORDIC算法的基本原理是運用了Givens旋轉法則。假設給定向量A(x0,y0),當旋轉過一定角度θ后得到新向量B(x1,y1),如圖2所示。

wdz6-t2.gif

    根據(jù)旋轉變換法則,可得式(1):

wdz6-gs1-7.gif

    當N→∞時,KN收斂于一個常數(shù),即KN≈0.607 252 935。當?shù)螖?shù)N得到確定,KN的值也就確定了,可以把它看作一個常數(shù),所以只要提前計算出定標因子KN,就能正確地使用式(6)進行CORDIC求值運算??梢妼τ诿恳淮涡〗嵌圈?sub>i的旋轉運算,實際上只與δi2-i運算有關,這在硬件上的反映就是加/減法和移位操作。

    最后,通過引入?yún)?shù)z表示當前角度和期望角度的偏差值,來確定下一次旋轉的方向,即判斷δ的符號。令zi+1=zii(z0=θ,i=0,1,…,N-1),當z≥0時,δ=+1;當z≤0時,δ=-1。若經(jīng)過多次旋轉后,就可以得到與期望角度充分接近的旋轉向量。如果選取初始值(x0,y0)=(KN,0),在進行N次迭代運算后,結果將收斂于(sinθ,cosθ)。

2 CORDIC算法改進

2.1 算法迭代結構

    由CORDIC算法的原理可以看出,此算法每一次的運算結構相似,具有可迭代的特性。對于傳統(tǒng)的反饋結構,每次運算都利用同一組硬件反復進行迭代,此結構占用硬件資源少,能夠在一定程度上縮小電路面積。但是由于需要不斷向輸入端反饋輸出數(shù)據(jù),而且還需要一個狀態(tài)機來跟蹤全部迭代過程,會導致整個系統(tǒng)運行速度降低,吞吐量減小。如果需要實現(xiàn)高速高精度的輸出,就必須采用高速全流水線結構,如圖3所示。流水線結構的每一級迭代都使用單獨的運算單元,與反饋結構相比,雖然消耗了較多的硬件資源,但換來的是運算速度提高,吞吐量增大,特別適合在硬件上實現(xiàn)[4]。

wdz6-t3.gif

    此外,有限次數(shù)的迭代運算通常無法完全消除累加角度與期望角度間的誤差,因此我們引入殘余角誤差ε,并將式(4)改寫為:

    wdz6-gs8.gif

    由式(8)可以看出,隨著迭代次數(shù)或者流水級數(shù)的不斷增加,近似誤差ε的趨勢是減小的,角度累加所得到的值會逐漸逼近期望角度,CORDIC算法的精度也會不斷提高。但是考慮到實際設計中不能無限制增加流水線級數(shù),一方面流水線級數(shù)過多會降低系統(tǒng)整體運算速度,另一方面流水增加至一定級數(shù)后,對精度的提高微乎其微,但是卻消耗了大量的硬件資源,因此必須選擇適合的流水線級數(shù),來控制硬件成本和計算復雜度。根據(jù)Yu Hen Hu提出ε的上界[8]

    wdz6-gs9.gif

其中AN-1為最后一次的旋轉角度,N為旋轉次數(shù)。為了達到所需要的精度,我們選擇N=16,即通過16級并行流水線結構來實現(xiàn)CORDIC算法。

2.2 覆蓋角度擴展

    CORDIC算法每一級的角度旋轉由式(3)得到了確定,表1中列舉了其中的部分角度。

wdz6-b1.gif

    式(3)是關于i的遞減函數(shù),將這些角度累加,當i→∞時:

    wdz6-gs10.gif

    可見CORDIC算法能夠計算角度的收斂域為[-99.88°,99.88°],而我們需要輸出整個圓周范圍內(nèi)角度的正余弦值,顯然常規(guī)的方法無法滿足。

    利用三角函數(shù)的對稱性,通過象限轉移的方法就能夠將計算角度擴展至[-π,π]。文獻[5]將[-π,π]映射至[0,π/4],但是在最后對輸出的一組數(shù)據(jù)是否交換或改變符號需要進行判斷,而文獻[7]中將[-π,π]映射至[0,π/8],但需要對產(chǎn)生的常數(shù)因子wdz6-gs10-x1.gif進行補償。本文將整個圓周[-π,π]劃分為8個象限(如圖4所示),并將所有角度映射至[-π/4,π/4],即1號和8號象限,并同時對初始值X0和Y0進行處理。這樣既不會產(chǎn)生額外的常數(shù)因子,也不需要在最后對輸出結果進行數(shù)據(jù)交換或符號改變。

wdz6-t4.gif

    利用三角函數(shù)的對稱性,根據(jù)θ所在象限,對初始值分別做如表2的處理。

wdz6-b2.gif

    這樣的數(shù)據(jù)預處理過程雖然會消耗一定的硬件資源,但特別適合流水線結構的CORDIC算法,對提高整個系統(tǒng)的速度有很大幫助。

2.3 計算數(shù)據(jù)位擴展

    在實際電路的實現(xiàn)中,由于CORDIC算法每一級迭代使用的都是有限精度的代數(shù)計算,就導致了另外一種誤差,這種因數(shù)據(jù)位寬有限而產(chǎn)生的誤差稱為舍入誤差。所以除了增加迭代次數(shù)以外,還可以通過擴展CORDIC算法數(shù)據(jù)的位寬來提高精度。舍入誤差σ的大小與運算數(shù)據(jù)的位寬b有關,根據(jù)σ=2-b-1這一關系式可知,操作數(shù)的位寬每擴展一位,就能夠將舍入誤差縮小為原來的一半。當增加流水的級數(shù)無法大幅提高算法精度時,擴展CORDIC計算數(shù)據(jù)位寬是另一種很好的方法,如圖5所示。

wdz6-t5.gif

    在本設計中,由于NCO后端接入了混頻模塊,輸出數(shù)據(jù)必須為16位與之匹配,但是在CORDIC內(nèi)部迭代計算時,我們把數(shù)據(jù)擴展至20位,最后對輸出結果截位處理,然后再送入下一級。通過對數(shù)據(jù)位寬擴展4位的方法,可以有效地提高運算精度。

3 基于CORDIC改進算法的NCO系統(tǒng)結構

    NCO主要用于產(chǎn)生正、余弦信號,本設計基于CORDIC改進算法,由前端處理、CORDIC迭代以及輸出處理這3個部分組成,其系統(tǒng)結構如圖6。當輸入不同的頻率控制字時,NCO輸出波形的頻率也隨之改變。

wdz6-t6.gif

    在前端處理中,我們采用了24位相位累加器以保證頻率分辨率達到要求,并通過判斷相位值的高3位θ[23:21],將目標角度映射至[-π/4,π/4]區(qū)間,具體映射方法見表2;而修正因子可以根據(jù)式(7)求出,由于算法的流水級數(shù)事先已經(jīng)確定,所以只要將N=16代入就可以準確的得到KN,再通過數(shù)據(jù)預處理確定X0和Y0的初始值,從而在迭代之前就完成對輸出結果的補償,進一步提高整個系統(tǒng)的速度。

    第二部分為16級CORDIC流水線,它是整個系統(tǒng)的核心,流水線結構中的每一行相當于CORDIC算法中的一級迭代,其硬件結構如圖7所示。每一級電路包括三個加/減法器和兩個移位器,其中Ai表示各級基本旋轉角度值,Sign為各級運算的加/減控制信號,它的符號由Zi的最高位確定。

wdz6-t7.gif

    最后一部分對數(shù)據(jù)舍入截位,并輸出正、余弦兩路信號。本設計適用于多種旋轉精度的需求,靈活性好,資源利用率高,全并行流水的結構具有速度快、吞吐量大的特點。

4 系統(tǒng)仿真及性能分析

    本設計根據(jù)圖5,在Xilinx ISE 14.7環(huán)境下搭建軟件平臺,采用Verilog HDL硬件描述語言完成編譯綜合,使用Modelsim SE 10.1c進行功能仿真驗證,最后通過MATLAB R2012b對結果進行分析。

    在Xilinx ISE中完成代碼編寫后,調(diào)用Modelsim進行軟件仿真,當輸入不同頻率控制字,得到NCO產(chǎn)生的正余弦信號結果如圖8所示。從圖中可以看出,生成的 I、Q兩路波形信號具有完全正交性,并且經(jīng)過角度映射后實現(xiàn)了整個圓周區(qū)間的覆蓋,完全可以替代基于查找表的傳統(tǒng)NCO設計方式。

wdz6-t8.gif

    本文選用Xilinx Virtex-4芯片,經(jīng)過Xilinx ISE對代碼編譯綜合后,得到設計所消耗的硬件資源及最高工作頻率等信息。在16位小數(shù)精度、16級流水迭代的情況下,傳統(tǒng)CORDIC算法設計而成的NCO使用了1 021個邏輯單元,而基于CORDIC改進算法的NCO模塊使用了904個邏輯單元,節(jié)省了約11.46%的硬件資源。從表3可以看出,采用經(jīng)過優(yōu)化后的CORDIC算法,系統(tǒng)最高頻率可達287.64 MHz,比基于查表法及常規(guī)CORDIC算法NCO的性能分別提高了354.6%和144.3%。

wdz6-b3.gif

    最后將Modelsim仿真得出的數(shù)據(jù)在[-π,π]之間平均采樣5 000個點并導入MATLAB,經(jīng)過處理后得到圖9。再從[-π/4,π/4]中選取若干角度進行誤差對比分析,如表4所示。

wdz6-t9.gif

wdz6-b4.gif

    I、Q通路正余弦值的誤差主要由迭代次數(shù)以及位寬的限制引起,通過對表4的數(shù)據(jù)分析可知,傳統(tǒng)算法在使用24位小數(shù)位的情況下進行運算,誤差達到10-4;而基于本文的CORDIC改進算法僅使用16位數(shù)據(jù)位寬就能夠將精度提升至10-5~10-6的數(shù)量級,所以本設計在提高精度的同時還減少了硬件資源的消耗,在精度和面積上均具有一定的優(yōu)勢。

5 結束語

    本文在傳統(tǒng)CORDIC算法基礎上,提出改進方案并應用于數(shù)字控制振蕩器的設計,通過仿真驗證及性能分析證明其可行性。實驗結果表明,本設計進一步提升了系統(tǒng)的速度和精度,并在一定程度上減少了硬件資源消耗。目前,該NCO模塊已經(jīng)成功的應用于某DDC芯片的產(chǎn)品中,并且表現(xiàn)出良好的性能及穩(wěn)定性。

參考文獻

[1] LIU Y,F(xiàn)AN L,MA T.A modified CORDIC FPGA implementation for wave generation[J].Circuits,Systems and Signal Processing,2014,33(1):321-329.

[2] Pramod Kumar Meher,Sang Yoon Park.CORDIC designs for fixed angle[J].IEEE Transaction on Very Large Scale Integration(VLSI) System,2013,21(2):217-227.

[3] 張曉彤,辛茹.基于改進混合式CORDIC算法的直接數(shù)字頻率合成器設計[J].電子學報,2008,36(6):1144-1148.

[4] KAUSHIK B,RAKESH B.Architectural design and FPGA implementation of radix-4 CORDIC proseccor[J].Micropro-cessors and Microsystems,2010,34(2-4):96-101.

[5] 徐成,秦云川.免縮放因子雙步旋轉CORDIC算法[J].電子學報,2014,42(7):1441-1445.

[6] 張朝柱,韓吉南,燕慧智.高速高精度固定角度旋轉CORDIC算法的設計與實現(xiàn)[J].電子學報,2016,44(2):485-490.

[7] MAHARATNA K,BANERJEE S,GRASS E,et al.Modified virtually scaling-free adaptive CORDIC rotator algorithm and architecture[J].IEEE Transaction on Circits Systems for Video Technolog,2005,15(11):1463-1474.

[8] HU H Y.The quantization effects of the CORDIC algorithm[J].IEEE Transactions on Signal Processing,1992,40:834-844.



作者信息:

王申卓,胡春林,胡廣垠,徐大誠

(蘇州大學 電子信息學院,江蘇 蘇州215000)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉載。