基于CORDIC算法的OFDM 系統(tǒng)載波同步實現(xiàn)
0 引言
OFDM正交頻分復(fù)用技術(shù)是一種特殊的多載波傳輸方案,它可以看作是一種調(diào)制技術(shù),也可以看作是一種復(fù)用技術(shù)。OFDM正交頻分復(fù)用技術(shù)具有許多其他無線通信技術(shù)所無法比擬的優(yōu)越性,其中一個主要原因就在于它能很好的對抗頻率選擇性衰落或窄帶干擾。同時,它也是一種并行技術(shù),可通過將一個高速數(shù)據(jù)流分割成許多低速的數(shù)據(jù)流并在多個子載波上并行傳輸,從而實現(xiàn)數(shù)據(jù)的高速傳輸。
OFDM正交頻分復(fù)用技術(shù)與一般的多載波傳輸技術(shù)的不同之處在于,該技術(shù)允許子載波頻譜相互重疊,只要滿足子載波間的相互正交就可以從混疊的子載波中分離出數(shù)據(jù)信息,從而使得頻譜利用率大大提高。由此可見,OFDM正交頻分復(fù)用技術(shù)對本來無線資源就十分貧乏的無線通信來說,是一種高效的傳輸技術(shù)。然而,OFDM系統(tǒng)對頻率偏移又非常敏感,這是因為,頻偏會破壞子載波間的正交性,并引入子信道間干擾(I-CD,從而導(dǎo)致各子信道不能正確解調(diào)。因此頻偏估計算法的設(shè)計與實現(xiàn)是OFDM系統(tǒng)中的一個重要問題。
本文首先分析了殘余頻偏估計和校正的系統(tǒng)原理,然后重點介紹了雙模CORDIC算法的原理與FPGA設(shè)計。最后給出了基于FPGA的整個系統(tǒng)實現(xiàn)方案。
1 OFDM系統(tǒng)與載波頻偏對系統(tǒng)的影響
OFDM正交頻分復(fù)用系統(tǒng)的結(jié)構(gòu)如圖1所示。在無線通信系統(tǒng)中,由于接收端和發(fā)送端的載波振蕩器之間不可避免地存在著差異,同時由于移動信道中的多普勒頻移和相位噪聲的影響,使得接收機(jī)本地的載波和接收到的OFDM正交頻分復(fù)用信號的載波之間不可避免的存在著偏差。事實上,與單載波系統(tǒng)相比,OFDM系統(tǒng)對載波頻偏更加敏感。
圖2所示是小數(shù)倍載波頻率偏差對FFT之后各個子載波的影響??梢?,小數(shù)部分頻偏會使子載波間不再正交。從而發(fā)生能量泄漏并產(chǎn)生ICI,使系統(tǒng)性能急劇惡化。
2 載波頻偏方案設(shè)計
本文介紹的設(shè)計方法采用的是Schmidl同步方案,其同步方案框圖如圖3所示,并在每一個OFDM數(shù)據(jù)幀前加入由重復(fù)的PN序列組成的OFDM訓(xùn)練符號。
在接收端,通過對訓(xùn)練序列的延遲相關(guān),可以得到如下公式:
然后對上式求相角,可以得到:
如果|ψ|的值能夠保證小于π,那么,其頻偏估計值為:
對于載波頻率偏移的計算與補(bǔ)償,一般需要實現(xiàn)的兩個最重要的功能:第一是求相角的功能,第二是需要產(chǎn)生糾正頻偏用的和函數(shù)。求相角函數(shù)的實現(xiàn)有許多可行的方法。其中最直觀的就是通過復(fù)數(shù)虛部對實部的比值,也就是求反正切來得到角度值。這樣就引入了除法運算,并且需要在RAM里建立一個反正切函數(shù)的查找表。另一種方法是使用CORDIC算法,該算法在多次迭代的情況下,只需要很少的硬件資源,但由于迭代計算的特點,所以會有幾個時鐘周期的時延。由于相角的計算在每一個幀到來時只需要計算一次,所以,這個很小的時延不會對系統(tǒng)的性能造成影響。由于采用查找表的方法計算反正切函數(shù)需要大量的RAM空間,所以,設(shè)計時可采用CORDIC算法來實現(xiàn)角度的計算。
3 CORDIC算法原理與FPGA實現(xiàn)
3.1 CORDIC算法
計算三角函數(shù)和其它一些硬件不易實現(xiàn)的函數(shù),一般可使用查表法、多項式展開或近似的方法。這些方法均不能兼顧速度、精度、簡單性等方面的要求。CORDIC算法則是為解決這種問題而產(chǎn)生的。它從算法本身人手,可將復(fù)雜的算法分解成一些在硬件中容易實現(xiàn)的基本算法,如加法、移位等,從而使這些算法在硬件上可以得到較好的實現(xiàn)。由于該算法是一種規(guī)則化的算法,它滿足硬件對算法的模塊化、規(guī)則化要求,因此,CORDIC算法是可以充分發(fā)揮硬件優(yōu)勢并利用硬件資源來實現(xiàn)硬件與算法相結(jié)合的一種優(yōu)化方案。
3.2 用于頻偏校正的CORDIC算法的旋轉(zhuǎn)模式
假設(shè)直角坐標(biāo)系內(nèi)有一個向量a(xa,ya),逆時針旋轉(zhuǎn)θ角度后得到另一個向量b(xb,yb),那么,這個過程可以表示為:
如果向量a(xa,ya)經(jīng)過n次旋轉(zhuǎn)才到達(dá)向量b(xb,yb),其中第i次旋轉(zhuǎn)的角度為θi,那么,第i次旋轉(zhuǎn)的表達(dá)式為:
CORDIC算法的旋轉(zhuǎn)示意圖如圖4所示。圖中,若取旋轉(zhuǎn)的角度總和這里的Si={-1;+1}。其中Si=+1表示向量是逆時針旋轉(zhuǎn),Si=-1表示向量是順時針旋轉(zhuǎn)。式中:隨著旋轉(zhuǎn)次數(shù)的增加,該式將收斂為一個常數(shù)k:
如果暫時不考慮這個增益因子k,則有:
這就是CORDIC的迭代式,它只需要通過移位和相加就可以完成矢量的旋轉(zhuǎn)。其向量a向向量b逼近的精度由迭代的次數(shù)決定,迭代的次數(shù)越多,逼近的精度越高。而引入變量z則表示進(jìn)行i次旋轉(zhuǎn)后與目標(biāo)角度之差。這樣,迭代n次所得到的最終結(jié)果為:
可以看出,此模式下,便可求出給定角度的三角函數(shù)值。
3.3 用于頻偏估計的CORDIC算法的向量模式
另外一種工作模式是向量工作模式,向量模式就是不斷地使yi趨近于0。在向量模式下,CORDIC迭代n次得到的最終結(jié)果為:
可以看出,此模式下可以求出給定向量的模值和角度。
4 仿真結(jié)果
仿真設(shè)計中的CORDIC框圖如圖5所示。其中輸入和輸出的位寬均為可變的參數(shù),并可根據(jù)系統(tǒng)的實際需要進(jìn)行調(diào)整。輸入和輸出均為二進(jìn)制有符號的補(bǔ)碼形式。這里需要注意的是,z的取值范圍為[-π,π],假設(shè)z的位寬為z_bits,則π=2z_bits-1,-π=-2z_bits-1。圖6所示是其仿真波形圖
5 結(jié)束語
本文介紹了OFDM中頻偏估計和校正的基本原理,及頻偏對OFDM系統(tǒng)的影響。重點介紹了CORDIC算法的兩種模式在頻率同步中的應(yīng)用。并在FPGA中對系統(tǒng)進(jìn)行了仿真驗證,結(jié)果證明:本設(shè)計的數(shù)據(jù)位寬可以跟據(jù)系統(tǒng)對誤差的要求來確定,并可根據(jù)實際項目的需求來設(shè)置。