王 雷, 李玉柏, 潘 軍
(電子科技大學(xué) 通信與信息工程學(xué)院,四川 成都 611731)
CORDIC由Volder.J在1959年提出[1],1971年J.S.Walther提出了改進(jìn)的統(tǒng)一CORDIC算法[2],把圓周運(yùn)算、雙曲旋轉(zhuǎn)和直線旋轉(zhuǎn)統(tǒng)一到一個(gè)CORDIC迭代方程里,為統(tǒng)一的硬件實(shí)現(xiàn)提供了理論基礎(chǔ)。CORDIC算法從算法本身入手,將這些復(fù)雜的超越函數(shù)分解為簡單的加法和移位運(yùn)算,而且該算法是一種規(guī)則的算法,可以很容易在硬件上實(shí)現(xiàn)。目前CORDIC算法已經(jīng)被成功地應(yīng)用于FFT,DCT等數(shù)字信號處理等領(lǐng)域。
CORDIC統(tǒng)一迭代公式如式(1),定義一個(gè)三維向量{[xk,yk, zk]},在 k > 0 時(shí)進(jìn)行迭代[3]:
其中εk,初始狀態(tài){[x0,y0,z0]}以及m決定了算法計(jì)算的結(jié)果。 δk(= ±1)是在每次迭代過程中決定的,使計(jì)算能夠不斷地接近結(jié)果。具體函數(shù)計(jì)算方法可參考表1。
在跟蹤環(huán)路的鑒相器中,計(jì)算結(jié)果范圍都在CORDIC算法最大輸入范圍之內(nèi),不需要進(jìn)行有效輸入范圍擴(kuò)展。在實(shí)現(xiàn)通用的統(tǒng)一CORDIC算法計(jì)算時(shí),可采用Argument Reduction算法來進(jìn)行輸入范圍的擴(kuò)展。
信號跟蹤環(huán)路在信號捕獲完成之后啟動。碼環(huán)(DLL)生成PRN碼的復(fù)制碼,并使它和接收碼對準(zhǔn)。鎖頻環(huán)(FLL)和鎖相環(huán)(PLL)產(chǎn)生一個(gè)正弦載波,并保持其頻率與接受的載波頻率一致[4]。碼和載波的這些操作稱為信號跟蹤。
圖1是GPS信號跟蹤環(huán)路的結(jié)構(gòu)圖,其中載波環(huán)鑒相器包括了PLL和FLL的鑒別器,在這個(gè)跟蹤環(huán)路中,總共有3個(gè)鑒別器需要實(shí)現(xiàn)。其中每個(gè)鑒相器都有多種計(jì)算方法,性能都不相同。為了實(shí)現(xiàn)最好的跟蹤效果,都選擇了最大似然估計(jì)的鑒別器[5],表2中為各個(gè)環(huán)路中的最大似然鑒別器[6]。
這里要實(shí)現(xiàn)的鑒相器,是使用統(tǒng)一的CORDIC算法,能在一個(gè)CORDIC基本運(yùn)算單元上實(shí)現(xiàn)三種鑒相器功能的鑒相器。
圖1 跟蹤結(jié)構(gòu)
表1 CORDIC算法原理
表2 環(huán)路鑒相器算法
這里需要仿真來確定需要進(jìn)行CORDIC算法時(shí)所需要的寬度和迭代次數(shù)。為了保證環(huán)路計(jì)算的精度,需要保證計(jì)算結(jié)果誤差在1 %之內(nèi)。在matlab中對不同迭代次數(shù)對精度的影響進(jìn)行了仿真,這里使用了全精度的浮點(diǎn)數(shù)進(jìn)行計(jì)算。
從圖2可以看出,全精度計(jì)算時(shí),在迭代到第10次時(shí),就可以保證把向量模的誤差在1 %以內(nèi),保證誤差角度小于0.1°。在上面的全精度計(jì)算中,對特殊輸入值0,都進(jìn)行了單獨(dú)的處理,簡化計(jì)算,防止出現(xiàn)錯(cuò)誤。
根據(jù)前面全精度仿真結(jié)果,為了使鑒相器達(dá)到1%的精度,迭代次數(shù)要大于10次。從跟蹤環(huán)路的時(shí)間安排以及計(jì)算精度考慮,在本鑒相器中采用的迭代次數(shù)是80次。
鑒相器結(jié)構(gòu)如圖3所示。
圖中鑒相器模塊包括預(yù)處理模塊、CORDIC計(jì)算單元、后處理模塊和CORDIC控制模塊。預(yù)處理模塊從公用MEMORY中讀取21位的有符號數(shù)積分信息,然后進(jìn)行位擴(kuò)展,在積分結(jié)果后面加入64比特0并擴(kuò)展符號位,使總位數(shù)變?yōu)?10位,保證計(jì)算過程中不會出現(xiàn)溢出的情況,并且留下了充足的保護(hù)位。預(yù)處理結(jié)束后,數(shù)據(jù)進(jìn)入CORDIC計(jì)算模塊,CORDIC控制器根據(jù)環(huán)路控制器送出的指示信號,控制CORDIC計(jì)算模塊進(jìn)行PLL、DLL或FLL的鑒相運(yùn)算。運(yùn)算結(jié)束后,數(shù)據(jù)進(jìn)入后處理模塊,根據(jù)進(jìn)行鑒相的類型,后處理模塊會把結(jié)果信息存入公用MEMORY的指定地址,完成鑒相操作。
圖2 迭代次數(shù)與誤差百分比關(guān)系
圖3 鑒相器結(jié)構(gòu)
該結(jié)構(gòu)利用CORDIC統(tǒng)一迭代公式,在一個(gè)CORDIC計(jì)算模塊中實(shí)現(xiàn)了多種超越函數(shù)的計(jì)算,節(jié)省了硬件資源,也保證了計(jì)算結(jié)果的精度。
該鑒相器的Verilog代碼在VCS環(huán)境中進(jìn)行了驗(yàn)證,結(jié)果表明計(jì)算結(jié)果誤差均小于1 %,滿足跟蹤環(huán)路需求。圖4是RTL仿真結(jié)果。
該鑒相器的實(shí)現(xiàn)方法,使用時(shí)分復(fù)用的方法,根據(jù)跟蹤環(huán)路的特點(diǎn)在統(tǒng)一的結(jié)構(gòu)上實(shí)現(xiàn)了三種鑒相運(yùn)算,與傳統(tǒng)鑒相器實(shí)現(xiàn)方法相比,充分利用了FPGA資源。在Xlinx的Virtex5 lx220上使用Synplify進(jìn)行綜合,占用資源情況如表3示。
從下面的列表可以看出,由于計(jì)算位寬比較大,所以使用寄存器比較多。位寬大的加法器也占用了很多邏輯資源。以后可以在計(jì)算的位寬以及加法器優(yōu)化上面對該鑒相器進(jìn)行改進(jìn)。在GPS與BD2雙模信號跟蹤環(huán)路中使用該鑒相器,在Xlinx的Virtex5 lx220上進(jìn)行了測試,測試結(jié)果表明環(huán)路性能良好,可以很好的進(jìn)行導(dǎo)航比特的解調(diào)和定位。
圖4 鑒相器RTL仿真結(jié)果
表3 資源占用情況分析
[1] VOLDER J E. The CORDIC Trigonometric Computing Technique[M].IRE Trans.on Electron Computing,1959(08):330-334.
[2] TIMMERMANN D, SUNSBO I. Area and Latency Efficient Cordic Architectures[J]. Circuits and Systems,1992(03):1093-1096.
[3] PRATAP Misra,PER Enge.Global Positioning System Signal,Measurements,and Performace[M].Second Edition.Beijing:Publishing House of Electronics Industry,2008.
[4] 徐長雷,蔡德林,劉曉琴.基于軟件無線電的載波跟蹤環(huán)研究及仿真[J].通信技術(shù),2007,40(11):113-115.
[5] WALTHER J S. A Unified Algorithm for Elementary Functions[J].Proc. AFIPS Conference,1971(38):389-385.
[6] 陳啟興,任國強(qiáng),吳欽章.一種新數(shù)字鎖相環(huán)[J].通信技術(shù), 2008,41(06):86-87.