式中T=(1/192)×10-3s,α=0.5。
用MATLAB模擬上述的成形濾波器,考慮到資源占用和逼近程度,采用了40 階、系數(shù)寬度為16 bit的FIR濾波器。考慮到成形濾波前還需5倍插值,采用了插值器的多相濾波結(jié)構(gòu),其結(jié)構(gòu)圖如圖3所示。
由圖3可見,數(shù)字濾波位于內(nèi)插器之前,即數(shù)字濾波在提速之前進(jìn)行,這對(duì)降低數(shù)字濾波的實(shí)時(shí)性要求很有好處。另外,分支濾波器(Rk(z))階數(shù)只有原來的五分之一,有利于提高運(yùn)算精度,降低對(duì)字長的要求。
將原有的40個(gè)濾波器系數(shù)分成5組,得h(5n+k),其中0≤n≤7,0≤k≤4。由多相濾波的公式推導(dǎo)可知Rk(n)= h(5n+k), 0≤n≤7,0≤k≤4。由于這5個(gè)分支濾波器的結(jié)構(gòu)完全相同,故只需編寫一個(gè)分支濾波器的程序,其它的只要重復(fù)調(diào)用即可。后面的插值和延遲單元相當(dāng)于一個(gè)多路選擇開關(guān),其選擇速率為輸入數(shù)據(jù)速率的5倍,開關(guān)選擇的順序是從R4(z)到R3(z)、R2(z)、R1(z)、R0(z),再到R4(z),循環(huán)得到5倍于輸入速率的輸出數(shù)據(jù)。上述的選擇開關(guān)用簡(jiǎn)單的狀態(tài)機(jī)即可以實(shí)現(xiàn),難點(diǎn)是分支濾波器的設(shè)計(jì)。
分支濾波器也就是普通的FIR濾波器,為什么說它難設(shè)計(jì)呢?原因在于分支濾波器的個(gè)數(shù)較多,是影響資源占用的關(guān)鍵因素,因此必須盡可能地降低單個(gè)分支濾波器所需的資源。FIR濾波器的設(shè)計(jì)方法很多,但都是各有優(yōu)缺點(diǎn)。以本設(shè)計(jì)中用到的8階系數(shù)不對(duì)稱的FIR濾波器為例,基于全并行的乘累加實(shí)現(xiàn)方法需8個(gè)乘法器和7個(gè)加法器,占用資源很大,它的優(yōu)點(diǎn)就是速度快,單個(gè)時(shí)鐘周期就能輸出一個(gè)結(jié)果;贒A(分布式算法)的FIR濾波器實(shí)現(xiàn)方法把傳統(tǒng)的MAC重新分別求和,再由相應(yīng)的二次冪加權(quán)并累加, B(輸入數(shù)據(jù)的位寬)個(gè)時(shí)鐘周期輸出一個(gè)結(jié)果,在位寬B較小而階數(shù)較大時(shí)優(yōu)勢(shì)比較明顯,但所需的LUT較大。還有就是所用的位移寄存器實(shí)現(xiàn)起來也較費(fèi)資源。基于單個(gè)MAC的FIR濾波器實(shí)現(xiàn)方法只需要一個(gè)乘法器和一個(gè)累加器,資源占用很少,但當(dāng)階數(shù)較大時(shí)對(duì)時(shí)鐘速率要求很高,為輸入數(shù)據(jù)速率的N(濾波器階數(shù))倍。
由于本模塊對(duì)資源要求較高,而速率要求相對(duì)較低(192×8 kHz),且本設(shè)計(jì)使用了插值器的多相濾波結(jié)構(gòu),使系統(tǒng)先濾波后插值,故選擇基于單MAC的FIR設(shè)計(jì)方法。其實(shí)現(xiàn)框圖[3]如圖4所示。
要實(shí)現(xiàn)的運(yùn)算為C和X的內(nèi)積,即

其中N=8,C為1×8的行矢量,X為8×1的列矢量,在FPGA內(nèi)系數(shù)C和數(shù)據(jù)X均用BlOCKRAM實(shí)現(xiàn),以節(jié)省所用的邏輯資源。不過對(duì)BLOCKRAM的讀寫控制要合理有序,既要保證到達(dá)乘法器的系數(shù)和數(shù)據(jù)具有對(duì)應(yīng)性,又要保證在下一個(gè)新數(shù)到達(dá)前,完成一次內(nèi)積,輸出一個(gè)濾波結(jié)果。在乘法器后加入流水線寄存器是為了改善時(shí)序特性,減小時(shí)延。
3.CIC插值濾波器的FPGA實(shí)現(xiàn)
CIC濾波器即積分梳狀濾波器[2],是指濾波器的單位沖激響應(yīng)具有如下形式:
式中D為CIC濾波器的階數(shù),也是抽取或插值因子。
根據(jù)Z變換的定義,CIC濾波器的Z變換為
將Z=ejω帶入上式,得到CIC濾波器的頻率響應(yīng)為
其幅頻特性如圖5所示。
其中(0~2π/D)區(qū)間為CIC濾波器的主瓣,而其它區(qū)間為旁瓣。由圖可見隨著頻率的增大,旁瓣電平不斷減小,其中第一旁瓣電平為
可見單級(jí)CIC濾波器的旁瓣電平是比較大的,只比主瓣低13.46 dB,這就意味著阻帶衰減很差,一般難以滿足實(shí)際系統(tǒng)的要求。為了降低旁瓣電平,需要采用多級(jí)CIC濾波器實(shí)現(xiàn)級(jí)聯(lián),則Q級(jí)CIC實(shí)現(xiàn)時(shí)的頻率響應(yīng)為

同理可求得Q級(jí)CIC濾波器的旁瓣抑制為
為了滿足系統(tǒng)對(duì)鄰道干擾的要求,設(shè)計(jì)中采用了4級(jí)級(jí)聯(lián)的CIC插值濾波器,插值因子D=40。由于CIC濾波器的系數(shù)全為1,設(shè)計(jì)中只需要加法器、減法器和延時(shí)單元,而無需乘法器,這對(duì)于提高實(shí)時(shí)性、降低占用資源大有益處。為了便于實(shí)現(xiàn),同時(shí)又保證每一級(jí)都不溢出,加減法器的輸入輸出位數(shù)均采用全精度。此外,為了改善FPGA的時(shí)延特性,提高系統(tǒng)的時(shí)鐘頻率,設(shè)計(jì)采用了流水線技術(shù),在各級(jí)積分器之間插入寄存器。
4.NCO的FPGA實(shí)現(xiàn)
圖2中的NCO實(shí)際上是一個(gè)10.8M載波產(chǎn)生器。用38.4M的時(shí)鐘來分別采樣10.8M的余弦波和反正弦波得到離散值 cos (2π×10.8n/38.4)和-sin(2π×10.8n/38.4),其中n為非負(fù)整數(shù),可以看出這些值具有周期性,周期為32。我們把cos(2π×10.8n/38.4)和-sin(2π×10.8n/38.4)(0≤n≤31)這32個(gè)數(shù)量化后存入ROM,用38.4M時(shí)鐘把這些數(shù)循環(huán)讀出,即得到所需的正交數(shù)字載波。
除了上述的模塊外,還有乘法器和加法器模塊,分別用來實(shí)現(xiàn)頻譜搬移和I、Q的合并,它們與其他模塊配合,共同完成整個(gè)調(diào)制和數(shù)字上變頻。
本設(shè)計(jì)選用的FPGA芯片為xilinx的xc2s200e-6pq208,以下是ISE工具產(chǎn)生的布局和布線報(bào)告,為單路調(diào)制的資源占用情況:

四、仿真和實(shí)測(cè)結(jié)果分析
為了驗(yàn)證設(shè)計(jì)的正確性,編寫testbench文件把modelsim的仿真數(shù)據(jù)保存下來,并用MATLAB對(duì)其進(jìn)行頻譜分析,得到其中的一些頻譜圖如圖6~8所示(以π/4 DQPSK調(diào)制為例)。



經(jīng)過一系列的仿真后,將程序下載到FPGA芯片中,進(jìn)行硬件調(diào)試,然后利用PHS專用測(cè)試儀MT8801C對(duì)D/A輸出的π/4 DQPSK調(diào)制模擬信號(hào)進(jìn)行測(cè)試,得到如圖9~10所示的結(jié)果。

五、結(jié)論
由以上的實(shí)測(cè)數(shù)據(jù)可以看出,本設(shè)計(jì)用了871個(gè)slice,完成整個(gè)調(diào)制和上變頻過程,調(diào)制的矢量誤差約0.7%,鄰道干擾值約-60 dB,結(jié)果令人滿意。另外,本設(shè)計(jì)是基于PHS系統(tǒng)的π/4 DQPSK調(diào)制,實(shí)際上只要改變里面的調(diào)制映射和成形濾波模塊,就可以實(shí)現(xiàn)其它各種數(shù)字調(diào)制,滿足不同通信系統(tǒng)的要求,具有通用性,是對(duì)軟件無線電思想的一個(gè)小小嘗試。
參考文獻(xiàn)
[1]郭梯云,楊家瑋,李建東.數(shù)字移動(dòng)通信信[M].北京:人民郵電出版社,2000.
[2]楊小牛,樓才義,徐建良.軟件無線電原理與應(yīng)用[M].北京:電子工業(yè)出版社,2001.
[3]Uwe Meyer-Baese.數(shù)字信號(hào)處理的FPGA實(shí)現(xiàn)[M].北京:清華大學(xué)出版社,2003.
[4]RCR STD-28協(xié)議(Version 3.3)[S].





