国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

CORDIC算法在數(shù)字頻率合成中的應(yīng)用研究與實現(xiàn)

2015-06-09 14:18:13馬思強王首斌邵國峰
航天電子對抗 2015年4期
關(guān)鍵詞:小數(shù)位余弦流水

馬思強,王首斌,邵國峰

(中國電子科技集團公司第三十六研究所,浙江嘉興314033)

CORDIC算法在數(shù)字頻率合成中的應(yīng)用研究與實現(xiàn)

馬思強,王首斌,邵國峰

(中國電子科技集團公司第三十六研究所,浙江嘉興314033)

相較于傳統(tǒng)的基于ROM查找表的數(shù)字頻率合成方案,采用CORDIC算法來計算正余弦函數(shù)時,無需使用乘法器,只需要一個最小的查找表(LUT),利用簡單的移位和相加運算,即可產(chǎn)生高精度的正余弦波形,可以有效節(jié)省存儲資源,非常適合于在FPGA上實現(xiàn)。在CORDIC算法研究的基礎(chǔ)上,合理設(shè)計了CORDIC電路的實現(xiàn)結(jié)構(gòu),并通過Verilog HDL語言進行了硬件描述設(shè)計,整個設(shè)計方案通過算法驗證并最終在Altera Stratix II系列EP2S130F1020C5型FPGA上完成了布局布線,最高工作頻率為145.2MHz。

CORDIC;FPGA;三角函數(shù)

0 引言

近些年來,隨著集成電路技術(shù)的發(fā)展,坐標旋轉(zhuǎn)數(shù)字算法(CORDIC)的優(yōu)勢越來越明顯,因此它被廣泛應(yīng)用于數(shù)字信號處理領(lǐng)域。

CORDIC算法是用于計算廣義矢量旋轉(zhuǎn)的一種迭代方法,最早由Volder于1959年提出[1],在此基礎(chǔ)上Walther提出了統(tǒng)一的CORDIC算法[2],并將CORDIC實現(xiàn)的三種功能:三角函數(shù)運算、雙曲運算和線性運算統(tǒng)一于一個表達式中,形成了CORDIC算法的基本數(shù)學基礎(chǔ)。CORDIC算法的基本思想是通過一系列角度的旋轉(zhuǎn)來逼近目標角度,并且這一系列的角度是預(yù)先經(jīng)過挑選設(shè)定的,這一旋轉(zhuǎn)過程可以通過移位和加減法運算的方法實現(xiàn)。所以針對實現(xiàn)復(fù)雜功能運算,利用CORDIC算法能夠取得較好的硬件資源節(jié)約效果。

1 CORDIC算法原理

CORDIC算法的基本原理可以通過極坐標的形式進行說明,已知一個目標點(Xn,Yn)通過旋轉(zhuǎn)角度θn后可以達到另一個點,記作(Xn+1,Yn+1),這一旋轉(zhuǎn)過程可以通過矩陣的形式表示,具體為:

將cosθn提出,從而可以得到:

如果取θn=arctan(2-n),并將θn定義為每一次旋轉(zhuǎn)的角度,則所有迭代旋轉(zhuǎn)角度的總和θ可以表示為:

此時式(2)中的tanθn=Sn2-n,則式(2)可以轉(zhuǎn)換為:

式中,cosθn=cos(arctan(2-n)),隨著迭代次數(shù)的增加,該式可以收斂為一個常數(shù):

可以暫時不考慮這個增益常數(shù)K,這時式(5)可以改寫為:

這里用Z來表示相位累加的部分和,則可以得到:

因此可以給出CORDIC算法最核心的三個迭代公式為:

如果想將Z最終旋轉(zhuǎn)到0,則Sn的取值由Zn決定,具體表現(xiàn)如下:

通過上面的分析,經(jīng)過多次旋轉(zhuǎn)之后,最終的表達式結(jié)果可以總結(jié)為:

如果取一組特殊的初始值:

通過若干次迭代旋轉(zhuǎn)之后,使得Z最終旋轉(zhuǎn)到0時,則可以得到最終結(jié)果為:

一般將這種工作模式稱為旋轉(zhuǎn)工作模式。如果取如下的初始值:

并通過不斷旋轉(zhuǎn)使得Y趨近于0,Sn的取值由Yn決定,具體表現(xiàn)如下:

通過若干次迭代旋轉(zhuǎn)之后,使得Y最終旋轉(zhuǎn)到0時,則可以得到最終結(jié)果為:

通過這種方式可以得到已知向量的幅值和相角,這種模式被稱為向量工作模式。

2 CORDIC算法的角度范圍

在具體應(yīng)用CORDIC算法時,該算法所能旋轉(zhuǎn)的角度是有界限的。這里假設(shè)算法迭代次數(shù)為N,那么通過N次旋轉(zhuǎn)之后可以得到的角度范圍為[3]:

通過進一步的取極限運算,這個角度范圍將收斂至[-99.88°,99.88°]。這樣如果采用CORDIC算法,并基于旋轉(zhuǎn)模式進行求解已知角度θ的正弦和余弦值時,就要求θ的取值范圍滿足[-99.88°,99.88°]。而一般意義上來說θ的取值范圍應(yīng)該為[-π,π],因此有必要利用三角函數(shù)特性對角度輸入信號進行相關(guān)處理,使得其滿足CORDIC算法關(guān)于輸入角度的范圍限制。

3 CORDIC算法的硬件實現(xiàn)

基于CORDIC算法的三角函數(shù)合成方法相較傳統(tǒng)的查找表法具有高精度、低存儲資源消耗的特點。由于整個算法主要由基本的加、減法和移位操作組成,因此十分適合VLSI實現(xiàn)。圖1所示為本文設(shè)計的數(shù)字頻率合成器(CORDIC)模塊的端口信號示意圖。為了滿足設(shè)計電路的高速處理需要,本文確定了基于多級流水的CORDIC結(jié)構(gòu)設(shè)計方案。為了計算輸入的瞬時相位信息所對應(yīng)的正余弦函數(shù)值,CORDIC模塊將工作在旋轉(zhuǎn)模式。本文所設(shè)計的CORDIC模塊依然工作在系統(tǒng)時鐘100MHz環(huán)境下,且由系統(tǒng)復(fù)位信號rst_n對內(nèi)部寄存器進行復(fù)位操作。

圖1 CORDIC模塊的端口信號示意圖

關(guān)于CORDIC算法迭代次數(shù)的選取及其精度分析,眾多文獻[4-5]給出了證明和結(jié)論??傮w來說,CORDIC算法的迭代次數(shù)跟所表達角度值的小數(shù)位比特寬度有關(guān)。如果想要分解由b個比特小數(shù)位表示的角度值,CORDIC算法所選取的迭代次數(shù)N應(yīng)該大于或等于b+1。這是由于如果角度可以被多次分解,則其最小精度單位2-b應(yīng)該有意義。經(jīng)過CORDIC算法多次迭代操作之后,最后一次迭代中的θn-1應(yīng)該小于或等于2-b。當θn-1足夠小時,其值可取2-(n-1)來近似,因此可以得到迭代次數(shù)N與角度小數(shù)位寬度b之間的關(guān)系。由于本文把輸入的瞬時相位的小數(shù)位寬度確定為11個比特,因此在具體設(shè)計中采用了12次迭代來實現(xiàn)CORDIC算法。

由于輸入相位θ的范圍為[-π,π],而根據(jù)前面內(nèi)容可知,CORDIC算法輸入角度的取值范圍應(yīng)為[-99.88°,99.88°],所以本文在進行CORDIC模塊設(shè)計時預(yù)先采用邏輯單元將輸入角度θ進行旋轉(zhuǎn),使其旋轉(zhuǎn)后得到的角度φ保持在區(qū)間[-π/4,π/4]之內(nèi)。在CORDIC模塊輸出端可以利用三角函數(shù)特性,通過邏輯單元將φ對應(yīng)的三角函數(shù)輸出結(jié)果轉(zhuǎn)換為原始相位θ所對應(yīng)的正余弦值。圖2給出了本文所設(shè)計的CORDIC模塊結(jié)構(gòu)原理圖。

圖2 CORDIC模塊的結(jié)構(gòu)原理圖

為了使得本文所設(shè)計的CORDIC模塊能夠在系統(tǒng)時鐘100MHz下正常運轉(zhuǎn),因此有必要使得整個模塊的最大路徑延時低于10ns。經(jīng)計算,如果采用12次迭代過程,不打任何流水的整個路徑將會耗時33ns左右,如果每次迭代過程均打一次流水,則需要耗費12個系統(tǒng)時鐘周期完成CORDIC運算。為了降低模塊運算時間,本文按照圖3所示在12級迭代中均勻打入了4級流水,使得最大路徑延時保持在8ns左右。這樣既滿足了系統(tǒng)速度需要,也提高了模塊的運算效率。此外,加上模塊內(nèi)相位旋轉(zhuǎn)的1級流水,在具體運行過程中,本文所設(shè)計的CORDIC電路只需要消耗5個系統(tǒng)時鐘周期就可以完成全部的運算處理工作。

硬件實現(xiàn)部分,本文運用Verilog HDL語言,采用自上而下的設(shè)計原則,對整個方案進行了硬件描述。并利用ModelSim軟件進行功能仿真。在設(shè)計CORDIC模塊時,為了縮短最大路徑延時進而使得系統(tǒng)最大工作頻率高于100MHz,本文在CORDIC算法12次迭代路徑上打入了4級流水,加上對原始相位輸入進行旋轉(zhuǎn)操作的1級流水,整個CORDIC模塊共采用5級流水結(jié)構(gòu)進行設(shè)計。圖4所示為CORDIC模塊輸出的正余弦信號圖。可以看出,本文所設(shè)計的CORDIC模塊根據(jù)瞬時相位實時地輸出對應(yīng)的正余弦值。從波形可以看出,CORDIC模塊輸出正余弦曲線十分平滑,達到了預(yù)期的設(shè)計功能。

功能仿真驗證后,本文運用Synplify Pro軟件在Altera Stratix II系列EP2S130F1020C5型FPGA上對設(shè)計方案進行了綜合和布局布線。實現(xiàn)過程所消耗FPGA資源情況如表1所示。系統(tǒng)布線后最高時鐘可達145.2MHz。

圖3 本文所設(shè)計CORDIC電路結(jié)構(gòu)圖

表l 占用硬件資源統(tǒng)計

圖4 CORDIC模塊輸出正余弦信號

4 結(jié)束語

本文針對CORDIC算法在數(shù)字頻率合成方面的應(yīng)用進行了研究。結(jié)合算法研究,考慮高速數(shù)字電路設(shè)計原則,運用Verilog HDL語言對本文方案進行了寄存器傳輸級描述,并完成功能仿真。設(shè)計方案最終在FPGA上實現(xiàn)。仿真與硬件實現(xiàn)結(jié)果證明了本文所提出的設(shè)計方案具備良好的性能與可行性。■

[1] Duhamael P,Vetterli M.Fast Fourier transforms:a tutorial review and a state of the art[J].Signal Processing,1990(19):259-299.

[2] Ercegovac MD,Lang T.Implementation of fast angle calculation and rotation using on-line CORDIC[J].IEEE International Symposium on Circuits and Systems,1988,3:2703-2706.

[3] Brennan PV,Walkington R,Borkjak A.Performance of PLL synthesiser based on DDS feedback[J].IEEE Electronics Letters,1998(34):2197-2199.

[4] 張煒,楊虎.基于CORDIC算法的直接數(shù)字頻率合成器實現(xiàn)方法[J].重慶郵電學院學報,2006,18(5):597-600.

[5] Hu YH.The quantization effects of the CORDIC algorithm[J].IEEE Trans.on Signal Processing,1992,40(4):834-844.

Research and implementation of CORDIC algorithm on DDFS

Ma Siqiang,Wang Shoubin,Shao Guofeng
(No.36 Research Institute of CETC,Jiaxing 314033,Zhejiang,China)

CORDIC algorithm is more accurate and more feasible on FPGA implementation than conventional look-up tables,which only needs a smallest LUT.Based on the study of CORDIC algorithm,the CORDIC circuit is designed.The whole design is synthesized under Altera Stratix II EP2S130F1020C5 FPGA. Highest clock frequency after routed can reach 145.2MHz.

CORDIC;FPGA;trigonometric

TN97;TN79

A

2015-05-26;2015-07-16修回。

馬思強(1987-),男,工程師,博士,主要從事電子系統(tǒng)總體設(shè)計、信號處理技術(shù)等方面的研究工作。

猜你喜歡
小數(shù)位余弦流水
近似值大觀園
流水
文苑(2020年10期)2020-11-07 03:15:26
概括性統(tǒng)計量的四舍五入規(guī)則
本刊對來稿中表、圖的要求
流水有心
天津詩人(2017年2期)2017-11-29 01:24:12
兩個含余弦函數(shù)的三角母不等式及其推論
分數(shù)階余弦變換的卷積定理
圖像壓縮感知在分數(shù)階Fourier域、分數(shù)階余弦域的性能比較
前身寄予流水,幾世修到蓮花?
視野(2015年6期)2015-10-13 00:43:11
離散余弦小波包變換及語音信號壓縮感知
虎林市| 高要市| 巴中市| 东乌| 兴义市| 明溪县| 金平| 湟中县| 宜城市| 吐鲁番市| 南充市| 抚宁县| 登封市| 道真| 馆陶县| 富锦市| 灵川县| 工布江达县| 克山县| 西充县| 凤庆县| 兰考县| 安庆市| 寿宁县| 铅山县| 吴江市| 陵水| 敦煌市| 乐平市| 鄯善县| 上犹县| 特克斯县| 忻城县| 枞阳县| 东乡族自治县| 普格县| 隆林| 神池县| 山西省| 武山县| 镇坪县|