朱雙兵,楊維明,吳 恙,胡 晶
(湖北大學(xué)物理學(xué)與電子技術(shù)學(xué)院,武漢430062)
線性調(diào)頻信號,又稱為chirp信號,其突出優(yōu)點是對多普勒頻移不敏感,即具有較大頻移的回波信號通過匹配濾波器后仍能得到較好的脈沖壓縮性能,并且輸出響應(yīng)會出現(xiàn)與多普勒頻移成正比的附加時延,利用這一特性可以簡化信號處理系統(tǒng)的設(shè)計[1]。
在通信、雷達和導(dǎo)航系統(tǒng)中高精度的DDS有著廣泛的應(yīng)用。近年來隨著電子技術(shù)的迅速發(fā)展,傳統(tǒng)的查表、多項式展開或近似實現(xiàn)DDS的方法需占用較多的存儲單元、高精度乘法運算需花費較多的運算時間,不適應(yīng)現(xiàn)代電子系統(tǒng)在速度、精度和集成度實現(xiàn)方面的要求,而采用CORDIC[2]算法(坐標旋轉(zhuǎn)數(shù)字計算機算法)實現(xiàn)的DDS系統(tǒng)不需要查表、以移位和加法運算代替乘法運算,便于軟硬件實現(xiàn),能滿足高性能系統(tǒng)的設(shè)計要求,因此受到人們的廣泛關(guān)注[3]。但現(xiàn)有文獻大多僅從理論上對CORDIC算法進行了分析與仿真,缺乏基于該算法的硬件實現(xiàn)報道。
本文分析了CORDIC算法的原理,研究了該算法的硬件設(shè)計與實現(xiàn)方法,將調(diào)制后的相位進行CORDIC算法處理后獲得線性調(diào)頻信號,通過在ModelSim上進行RTL仿真,結(jié)果表明本設(shè)計方法是完全可行的。
線性調(diào)頻信號LFM的信號頻率對時間的導(dǎo)數(shù)為常數(shù)[4]:
f(t)為瞬時頻率,u為調(diào)頻斜率,則相應(yīng)瞬時相位函數(shù)為:
時間寬度T的復(fù)數(shù)信號為:
其中u(t)為信號復(fù)包絡(luò),u=B/T為頻率變化率,B為信號頻率,T為信號時間寬度,f0為信號的中心頻率。若令f0=0,得到零中頻信號即基帶信號,而復(fù)信號的實部和虛部則分別構(gòu)成兩路正交信號。
圖1給出了B=20 MHz,T=10 μs的 LFM 信號基帶波形。
圖1 LFM的實部和虛部
根據(jù)上述線性調(diào)頻信號的相位調(diào)制函數(shù),可以得出相位與時鐘之間的數(shù)學(xué)關(guān)系,在本設(shè)計中的時鐘頻率為50 MHz,即時鐘周期為20 ns。調(diào)頻信號的帶寬為B=20 MHz,脈沖寬度為T=10 μs,故可得頻率變化率為u=B/T=2×1012,瞬時相位(基帶信號)為:
將連續(xù)時間t離散化:t=n×20 ns(其中n=0,1,2,3…表示時鐘周期的個數(shù)),則有:
使用Verilog硬件描述語言在FPGA上實現(xiàn)相位調(diào)制時,運用有符號數(shù)的乘法即可實現(xiàn)。
CORDIC(坐標旋轉(zhuǎn))算法的基本思想是:若要將一平面向量旋轉(zhuǎn)θ°,可以將此角度值分解成一系列基本角度,以這些基本角度值對向量進行多次小角度旋轉(zhuǎn),最終逼近角度θ。該算法的巧妙之處在于基本角度的選取恰好使得每次旋轉(zhuǎn)后,使中間向量的坐標值可以用簡單的移位和加減法操作得到。由于需要經(jīng)過多次旋轉(zhuǎn)以逼近角度θ,因而CORDIC算法是一種迭代算法。
假設(shè)直角坐標系內(nèi)有一初始向量OA1逆時針旋轉(zhuǎn)角度θ后到目標向量OA2,如圖2所示。
圖2 CORDIC算法原理圖
用坐標可表示為:
將上式展開有:
并用矩陣形式可表示如下:
若將OA1旋轉(zhuǎn)到OA2的過程分成n次旋轉(zhuǎn),其中第i次旋轉(zhuǎn)角度為θi,那么第i次旋轉(zhuǎn)的表達式為:
式中cosθi=cos(arctan(2-i))。隨著旋轉(zhuǎn)次數(shù)的增加(本設(shè)計共旋轉(zhuǎn)15次),該式收斂為一個常數(shù):
本文使用CORDIC算法來產(chǎn)生正弦和余弦信號,采用Verilog硬件描述語言[6]實現(xiàn)15級流水線結(jié)構(gòu)[7]。
設(shè)初始向量坐標為(x0,y0),與目標向量(xn,yn)的夾角為z0。這里用zi表示第i次旋轉(zhuǎn)后與目標角度之差,則有:
其中zi大于0時,Si=+1;zi小于0時,Si=-1;zi等于0時,Si=0。經(jīng)過n次旋轉(zhuǎn)以后得到以下結(jié)果[8]:
式中,x0,y0,z0為初始值,如果取x0=K,y0=0,z0=θ則迭代結(jié)果為:
所以將角度值(z0)輸入,最后的迭代結(jié)果xn和yn就是需角度θ的余弦和正弦值,在式(13)的迭代公式中,由于乘以2-i相當(dāng)于被乘數(shù)右移i位,因此乘法運算在電路實現(xiàn)時可以簡化為移位運算,因此只需要加減法和移位運算即可實現(xiàn)CORDIC算法。
每次旋轉(zhuǎn)的角度值是固定的,即2-i的反正切,將此角度值預(yù)先算出,根據(jù)流水線的級數(shù)直接調(diào)用相應(yīng)旋轉(zhuǎn)角度的值,相應(yīng)Verilog代碼如下:
在旋轉(zhuǎn)過程中需要對角度的反正切進行移位操作,而在移位過程中必須保證移位結(jié)果的正確性,特別是負數(shù)的移位操作,而對于Verilog中有數(shù)據(jù)的算術(shù)移位操作(>>>),在計算過程中會出錯,例如在計算0度的正弦時,第八級流水線單元的輸入為Xi=32 767,Yi=-25,經(jīng)計算后輸出為Xo=32 767-(-25>>>7),其理論結(jié)果應(yīng)仍為Xo=32 767,即-25右移7位后結(jié)果應(yīng)為零,但算術(shù)移位運算對-25操作后并不為零,由此算出的Xo溢出,導(dǎo)致后續(xù)流水單元相繼出錯。改進算法通過判斷輸入符號位,當(dāng)符號位為1,即負數(shù)時,先對輸入取反加1后再邏輯右移相應(yīng)位數(shù),然后將右移后的結(jié)果取反加1,即可正確快速地實現(xiàn)負數(shù)移位操作;當(dāng)符號位為0,則直接進行邏輯右移。Verilog移位操作函數(shù)如下:
15級流水線的CORDIC算法模塊經(jīng)QuartusⅡ綜合后的RTL如圖3所示。其中每一級單元如圖4所示。
圖3 流水線結(jié)構(gòu)的CORDIC算法RTL圖
圖4 每一級流水線單元
在輸入端輸入相應(yīng)的相角值即可算出相應(yīng)的正弦和余弦幅值。在本設(shè)計中相角輸入為20位寬度,則1度對應(yīng)的相角值為:
使用CORDIC算法產(chǎn)生正余弦信號的RTL仿真結(jié)果如圖5所示。
圖5 CORDIC算法實現(xiàn)DDS波形
在上節(jié)中的DDS模塊輸入線性調(diào)頻信號的已調(diào)制相位后,即可得出線性調(diào)頻信號。首先需要相位調(diào)制模塊,本設(shè)計中時鐘頻率為50 MHz,根據(jù)1.2節(jié)中相位與時鐘之間的關(guān)系:θn=2 512×n2×10-6,通過時鐘計數(shù)后得出瞬時相位。
由此得到的相位還需要進行相位映射,因為CORDIC的輸入范圍(經(jīng)15次旋轉(zhuǎn)的角度之和)為:98.883°~+98.883°,這里將調(diào)制后的相位θn映射-在-90°~ +90°范圍內(nèi)。當(dāng)0°≤θn≤90°,相位值不變;當(dāng)90°<θn≤180°時,相位值映射到第一象限為(180-θn)即0°<θn≤90°;當(dāng)180°<θn≤270°,相位值映射到第四象限為(180°-θn)即-90°≤θn<0°;當(dāng) 270°<θn≤360°,相位值映射到第四象限為(θn-360。)即-90°<θn≤0°。象限的映射轉(zhuǎn)換如圖6所示。
圖6 象限映射轉(zhuǎn)換圖
象限映射后,在整個2π周期內(nèi)的相位都可以通過CORDIC模塊得出正確的正弦和余弦值。而在-90°~+90°范圍內(nèi),余弦輸出只能為正,所以當(dāng)90°<θn≤270°時,還需將 CORDIC 的余弦輸出值求反。將線性調(diào)制后的相位先映射至CORDIC的輸入范圍內(nèi),即可輸出線性調(diào)頻信號。整個工程在QuartusⅡ中綜合得出的RTL如圖7所示。
圖7 線性調(diào)頻信號產(chǎn)生的RTL圖
在ModelSim中的RTL仿真結(jié)果如圖8所示,圖中上為實部波形,下為虛部波形。
圖8 脈沖線性調(diào)頻信號的波形
本文分析了線性調(diào)頻信號和坐標旋轉(zhuǎn)算法的基本原理,采用Verilog硬件描述語言設(shè)計實現(xiàn)了基于坐標旋轉(zhuǎn)算法的 DDS,并產(chǎn)生了線性調(diào)頻信號。ModelSim仿真結(jié)果表明:該方法與傳統(tǒng)查表法實現(xiàn)DDS的LFM信號產(chǎn)生方法相比,更節(jié)省硬件資源,并具有更高的精度和運算速度。
[1]阮黎婷.非線性調(diào)頻信號的波形設(shè)計與脈沖壓縮[D].西安電子科技大學(xué),2010.
[2]Volder,Jack E.The CORDIC Trigonometric Computing Technique[J].IRE Transactions Electronic Computers,1959,(8):330-334.
[3]夏少峰,黃世震.基于System Generator的CORDIC算法DDS的FPGA 實現(xiàn)[J].電子器件,2010,33(1):128-131.
[4]李康.非線性調(diào)頻信號設(shè)計[D].西安電子科技大學(xué),2009.
[5]劉欣.基于CORDIC的數(shù)字下變頻電路的ASIC設(shè)計與實現(xiàn)[D].電子科技大學(xué),2007.
[6]夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程[M].北京航空航天大學(xué)出版社,2008.
[7]Meyer-Baese U.數(shù)字信號處理的FPGA實現(xiàn)[M].清華大學(xué)出版社,2011.
[8]趙錦江.基于CORDIC算法的數(shù)字調(diào)制器設(shè)計與實現(xiàn)[D].國防科技大學(xué),2009.