1 引 言 大多數接收機必須處理動態范圍很大的信號,這需要進行增益調整,以防止過載或某級產生互調,調整解調器的工作以優化工作。在現代無線電接收裝置中。可變增益放大器是電控的,并且當接收機中使用衰減器時,他們通常都是由可變電壓控制的連續衰減器。控制應該是平滑的并且與輸入的信號能量通常成對數關系(線性分貝)。在大多數情況下,由于衰落,AGC通常用來測量輸入解調器的信號電平,并且通過反饋控制電路把信號電平控制在要求的范同內。 2 系統總體設計 在本設計中,前端TD_SCDMA的射頻信號RF輸入后,經過MAX2392零中頻下變頻解調后進行增益處理。VGA輸出的信號經過ADC變換后就成為數字中頻信號,經RSP(接收信號處理器)處理輸出為IF數字信號。IF信號可以經過AGC控制算法處理后控制VGA的增益。AGC增益控制算法在數字部分來實現,在本設計中,AGC電路可以有效提高鏈路的動態范圍(+25~-105 dBm),提高ADC輸出的SNR,以使DSP能更容易地實現Dw-PTS同步。AGC在系統中的位置如圖1虛線框所示: 3 AGC系統的FPGA實現 根據AGC所實現的功能,在FPGA中將AGC模塊分為如下幾個部分來實現: 3.1 數據千路模塊 從RSP接口來10位二進制補碼數據I1和Q1,與求指數模塊傳送來的預放大增益GAIN2相乘后所得出的數據(仍取10位二進制補碼數據)將要傳送到CIC平均模塊,同時要分別與求指數模塊傳送來的放大增益GAIN3相乘,然后采取截短處理,取8位二進制補碼數據,I1′,Q1′,輸出到DSP中。 3.2 計算下行同步碼功率(SYNC_DL)模塊 計算下行同步碼功率(SYNC_DL)模塊對應于圖2中的判斷部分,是AGC中最為重要算法計算。TD_SCD-MA每個幀有6 400個碼片,在其一幀5 ms的時間上是不連續的,因此只能求出下行同步碼(SYNC_DL)的功率值,以此為依據控制VGA的電壓值。 由圖3的TD_SCDMA的幀結構知道,下行同步碼(SYNC_DL)在下行導頻時隙(DwPTS)發射,SYNC_DL的長為64個碼片,在其左邊和右邊各有32和96個碼片的保護時隙(GP)。為此,在FPGA中共用了3種不同的方法計算其功率值。 方法一 在FPGA內根據檢波法的原理計算下行同步碼64個碼片的功率(AGC模塊圖2中的dcmt部分)。考慮TD的幀結構,保護時隙GP的功率很小,故從接收功率的時間分布上來看,與GP相比SYNC_DL段的功率較大。當用SYNC_DL段的64碼片之和除以SYNC_DL前后個32個碼片相加之和,結果大于3時,就可以判斷出SYNC_DL的大致位置。因此,基于這種方法,FPGA在5 ms的周期中遍取6 400個碼片,每64個碼片做積分,依次向前滾動計算,同時做除法運算,最后即可計算出SYNC_DL在一幀6 400個碼片中的位置和能量,以此控制VGA的電壓和后續的計算。不過這種方法只有在信號質量很好,信號強度比較大的時候才計算準確。 方法二 由DSP方根據傳過來的數據,通過相干檢測法檢測出SYNC_DL的精確位置,并把這個位置參數傳送給FPGA。FPGA收到這一點的位置后,立既停止使用其自身檢波法求出的功率值,根據DSP傳過來的SYNC_DL的位置,計算出這一點之后的64個碼片的積分值,作為SYNC_DL的總功率,并以此控制VGA的電壓(AGC模塊圖2中的dwpts部分)。這時求出來的總能量比較精確(DSP提供的位置比FPGA自身檢波法求出來的精確),但是速度比較慢。 方法三 當信號的強度變得很弱,信號可能淹沒在了噪聲當中。這時無論是由FPGA的檢波法還是DSP的相干法都計算不出SYNC_DL的位置和能量。在這種情況下,認為在5 ms時域上信號連續,能量均衡,FPGA求5ms幀的平均值,以此作為SYNC_DL的功率,并控制VGA(AGC模塊圖2中的CIC部分)。 3.3 求對數運算模塊 在本模塊,將上面得到的功率值進行求對數運算,以減少數據的運算量。用FPGA實現求對數運算時,可以先將數據歸一化在1~2之間,然后通過將數據平方后推導出最高位的方法逐位求出所求數據的二進制數值。假定自變量X歸一化在區間[1,2]內,用二進制數據可表示為1.X1X2…Xn,則所求的對數值在區間[0,1]內,用二進制數據可表示為0.Y1Y2…Ym,因而可用數學方法表示為20.Y1Y2…Ym=1.X1X2…Xn,問題歸結為求Y1Y2…Ym。將上式左右兩邊同時平方, 可以得出2Y1Y2…Ym=(1.X11X21…Xn1)2,由此可推倒出Y1來。(X為已知,若等式右邊數據小于2,則Y1=0;反之,若大于或等于2,則Y1=1)求出Y1后可以導出20.Y2Y3…Ym=1.X11X21…Xn1,同理可推倒出Y2。依此類推,可求出對數值的各位。 進行FPGA設計時,可以設計出一個平方比較單元依次求出對數值,同時要注意需要耗費的系統資源。 3.4 求指數運算模塊 經過求對數模塊后,一路數據傳送到IIR中,另一路數據則要傳送到DSP中進行算法運算,因此,需要增加一個求指數模塊,將對數模塊運算后的結果還原成原來的數據送到DSP中。指數換底公式可知:2x=ex1n2,由雙曲函數定義及特性可知:ex=sinh(x)+cosh(x),而當自變量x在[-π/4,7c/4]范圍內時,可以采用FPGA的IP CORE(CORDIC算法)實現雙曲正弦函數和雙曲余弦函數,因此在FPGA內部求以2為底的指數函數時,可以先將自變量歸一化在[0,1]內,然后將自變量乘以常系數1n 2,由于ln 2<π/4,故可以新乘得的數據作為新的自變量,利用IPCORE求出其雙曲正弦函數和雙曲余弦函數后將其相加,即可得到所需要的指數函數值。 3.5 IIR反饋模塊 IIR反饋模塊包括3部分:IIR濾波單元、飽和反饋單元和VGA控制單元,其中IIR濾波單元負責將求對數模塊得出的數值與參考數值比較后得出的誤差數據Uerr作IIR濾波計算得出Ufilter,然后依據相關算法計算出Urssi。飽和反饋單元負責將Urssi與飽和限幅數據比較后得出誤差電壓Uerr2,然后依照相關算法求出U2送到求指數模塊,從而能夠控制誤差反饋增益Gain2。VGA控制單元負責將Urssi進行飽和限幅后得到輸出控制電壓Uda,量化后經過數模變換從而控制VGA。 3.6 CIC平均模塊 當AGC用于WCDMA系統時,可以將圖2中的判斷部分全部去掉,加入這個CIC平均模塊。CIC平均模塊負責將預放大模塊求出的I1和Q1作為自變量,通過功率算法P1′=I1*I1+Q1*Q1求出P1′,然后將6 400個工作頻率為1.28 MHz的P1′平均,得出工作頻率為1.28 MHz的P1。同樣得出P2后再求出P1+P2。 在FPGA中對于相加運算,包括CIC實現部分的純整數相加算法和其他部分的小數相加算法。其中CIC運算部分的運算數據是二進制10位有符號數;對于相乘運算,包括CIC實現部分的純整數平方算法、CIC實現部分的常系數小數相乘算法。 4 結 語 以上介紹的在FPGA中實現AGC的算法,經過項目的驗證測試,效果比較好,DA選用ADS的5621,VGA電壓調節范圍在0.3~1.8 V之間,共45個dB的調節范圍,因此AGC在+10~-35之間起調節作用,信號低于-45 dBm時,VGA電壓保持1.8 V最大值;高于+10 dBm時,VGA電壓保持在最小0.3 V。經過測試,FPGA可在+25~-105 dBm范圍內搜索到SYNC_DL的位置。 此種AGC算法,計算相對簡單,運算速度快,不僅可用于TD_SCDMA信號,在計算下行同步碼能量時稍加改動,只做CIC平均運算,即可應用于WCDMA信號。 |