一、引言
當今許多電信公司正密切關注著他們所致力的3G產品的研制和開發(fā),例如移動終端、基站以及其它大量的網絡設備。無可置疑地,3G產品和業(yè)務已經成為無線通信市場的主流,而其中CDMA,尤其是寬帶CDMA(W-CDMA)憑借著其高性能、在系統容量運用中的高效性以及物理資源使用中的便捷性,日益成為3G技術中的主導。
為了滿足3G的高技術復雜度以及高信號處理要求,基于FPGA/ASIC的專用硬件必須要符合不同用戶產品的規(guī)格。也就是說,在3G無線終端發(fā)展中,產品的尺寸、重量以及功率消耗這些參數將是十分關鍵和重要的決定因素。由此,系統芯片(SoC)作為一門新的設計方略被引入了3G的發(fā)展。SoC要求能夠將區(qū)域有效信號處理算法與結構的設計、發(fā)展都集成在一塊小的芯片上。
數字濾波器作為信號處理中最為常見的元件,被廣泛地應用于無線通信的各個部分中。本文針對3G標準CDMA 2000中的脈沖成形FIR濾波器的ASIC實現進行討論,并在此提出一種實效的實現結構:基于分布式運算(DA)結構的查表法。
二、脈沖成形濾波器
脈沖成形濾波器常用于旨在提高信號頻譜傳輸效率的基帶通信傳輸中。經過D/A轉換后的成形濾波器通常是被設計為FIR濾波器,其作用是[1]:將信號的同相(I)和正交(Q)符號轉換為模擬的I、Q信號。
一般來說,FIR濾波器是需要有一個升余弦或者是平方根升余弦成形脈沖響應的。這里需要注意的是,成形濾波器的采樣速率一般要求比輸入的I、Q符號速率要高(通常是其4~8倍)。因此,在此要有一個先于脈沖成形的過采樣。圖1描述了典型的成形過程,其中過采樣通過在連續(xù)的輸入采樣值中插入M-1個零值來實現的。CDMA2000標準中,對1個擴頻速率的系統(碼片速率=1.2288 MCPS),用48階對稱系數FIR濾波器;對3個擴頻速率的系統(碼片速率=3×1.2288 MCPS),用108階的濾波器。由于濾波器運行在4倍碼片速率下,因此輸入的I、Q符號應該是過采樣的4倍,即圖1中M=4。
假設FIR濾波器傳遞函數為H(z),根據十進制/插補理論[2],通過如圖2所示對H(z)的多相分解(在圖中設M=4),能更有效地完成過采樣及濾波器功能。在圖2中,Hk(z)表示子濾波器的傳遞函數,其脈沖響應hk(n)=h(4n+k), n=0,1,…11是由對h(n)抽值得出的。多相結構的優(yōu)點在于:單個子濾波器是工作在較低的抽樣速率上的,而將4個子濾波器相結合后,其系數總值與原來濾波器的H(z)系數相當。也就是說,采用這個方法,整體的計算總量能減少3/4。同時從圖2可以看出,這種方法需要用到4個濾波器,因此就硬件的有效性來說,這并不是最理想的。
下面將介紹一種結構,對于ASIC來說它更加得實際、實效,同時也保留了多相分解的優(yōu)點。
三、分布式運算體系
在分布式運算(DA)運算法則中,濾波器的輸出可以表示為
其中ak是固定的濾波器系數;
xk是輸入數據字。
如果將xk表示成B比特的二進制補碼,|xk|<1,則有
其中bki取值為0或是1,bk0是符號位,bk0為1表示數據為負,bk0為0表示數據為正;bk,B-1是最低有效位(LSB)。將(2)式和(1)式合并后,我們可以得到y具體的比特位表達式[3]:
由于bki取值只有0或1, 則(4)式的值有2N種可能性。因此,可以預先算出這2N個局部結果并存放在一個固定的表中(表的寬度為對系數ak定義的寬度,深度為2N),N是能夠對數據源抽樣數據進行處理的數據長度[3]。然后按照輸入的數據,直接對該表尋址并將結果導入累加器中。在B-1次查表之后,累加器的寄存器存儲有(3)式第一項所示的結果。最后一個查表給出局部結果,也就是(3)式中的第二項,用于表示符號位,并且在寄存器的右移位操作中不包括該項,即將它從寄存器的右移過程中減去。因此,在整個程序中只有在符號位時鐘上會使用減法控制。
DA運算法則如圖3所示。所需的基礎操作有:查表排序、加法、減法以及輸入數據序列的移位。運用DA結構的前提是:輸入抽樣值必須要表示為2個補碼并將其轉換成一個比特串行形式??偣残枰蠳個B比特的移位寄存器,每個寄存器在一個時鐘周期下產生1比特來生成一個用于查找表(LUT)地址(N比特寬)。LUT存儲了所有濾波器系數狀態(tài)可能的局部結果,這些局部結果在寄存器中進行加權(每個周期除以2)和累加,直到每個移位寄存器的最后一位為止。
由于脈沖成形濾波器有著對稱的沖擊響應,因此先把使用同一個脈沖響應系數的2個輸入取樣值進行相加,然后相繼地把N/2個加法器的輸出結果送入DA進行處理,如圖4[4]所示。所以,LUT的個數也就從2N個減少到了2N/2個。
圖5所示為通用的FIR成形濾波器結構框圖。比較圖4與圖5后可以看出,運用DA結構可以在程序的編寫過程中大量減少乘法運算,而乘法運算在硬件程序中往往是占用資源最大的部分之一。運用DA處理結構能大大減少硬件資源,并在很大程度上提高程序運算速度。
為了進一步減小LUT的個數,現在在過采樣中引入零抽樣值。設u(n)為過采樣程序塊的輸出序列:
類推,應用u(n)后,48個抽頭中的36個采樣值將給定為零,這樣就有一半的加法器輸入為零采樣值,并在每個時鐘將零采樣值傳遞到對應的乘法器。而另一半加法器的輸入值中也只有一個是非零采樣值。這樣一來,在第一級就能減少24個加法器和一半的乘法器,也就意味著運算出一個輸出采樣值只需調用一半的濾波器系數。對一個碼片速率輸入采樣值x(n)來說,經過運算得出4個輸出采樣:y(n)、y(n+1)、y(n+2)以及y(n+3),其中y(n)和y(n+3)需要調用的系數(組一)如下:h(0)、h(3)、h(4)、h(7)、h(8)、h(11)、h(12)、h(15)、h(16)、h(19)、h(20)、h(23);而y(n+1)和y(n+2)需要調用的系數(組二):h(1)、h(2)、h(5)、h(6)、h(9)、h(10)、h(13)、h(14)、h(17)、h(21)、h(22)。這樣就可以完成如圖6所示的實效DA。輸入序列即為碼片速率采樣值,并且輸出的數據是碼片速率的4倍,每輸入一個采樣值可以得出4個輸出采樣值,內部時鐘速率為4×B×碼片速率。DA運行中,常用電路移位寄存器(CSR)來代替一個移位寄存器保存數據,直到每個芯片間隔運算出最后的輸出采樣值為止。一旦輸入一個新的采樣值,這些CSR就要更新一次。在芯片的持續(xù)時間中一共有4個循環(huán),每個循環(huán)經歷B個時鐘并產生一個輸出采樣值。一個循環(huán)過后,CSR移位回歸到初始數據,為下一個循環(huán)處理做準備,以生成另一個輸出采樣值。圖6中的2個LUT分別存儲了兩組濾波器系數各自生成的局部結果。選擇器是用來決定在每個循環(huán)中選擇這兩組輸入分支的哪一組的,其中當高位LUT的結果在循環(huán)1和2輸出,低位LUT結果在循環(huán)3和4輸出的時候選擇組一;當高位LUT的結果在循環(huán)1和4輸出,低位LUT的結果在循環(huán)2和3輸出的時候選擇組二。累加器的寄存器在每個循環(huán)的起始都要進行清零。
四、設計
現設計一個1比特輸入、14比特輸出的平方根升余弦滾降線性相位FIR數字濾波器,滾降系數為0.22,帶外衰減要求大于45 dB,即通帶內(f<8.192MHz)的起伏小于0.5dB,阻帶外(f>10 MHz)的衰減大于45dB。在設計中選用了Alter公司的FPGA芯片-EP1K50QC208-3,該芯片有2 880個邏輯單元(LE),40960個片內存儲器。本設計占用了387個LE和1088個片內存儲器,分別占總資源的1.3%和2%。
經過試驗,本結果已經在FPGA中得到了實現。
五、結 論
從試驗結果中可以看出,DA實現控制起來比較簡單并且時鐘速率較低,但是因為LUT的大小會隨著濾波器階數的增加呈指數增長,因此其門的數量也較多。在階數很大的濾波器中采用并行的FIR結構,每個并行的子濾波器以DA結構實現,這樣,控制起來就稍微有點復雜了。因此,如何去克服這方面的缺點還有待于繼續(xù)研究。