謝海霞,孫志雄
(海南熱帶海洋學院 電子通信工程學院,海南 三亞 572022)
多級CIC濾波器的FPGA實現(xiàn)
謝海霞,孫志雄
(海南熱帶海洋學院 電子通信工程學院,海南 三亞 572022)
CIC濾波器是一種高效的濾波器,廣泛應(yīng)用于軟件無線電的數(shù)字上下變頻端。介紹了CIC抽取濾波器基本原理及其濾波器的Hogenauer結(jié)構(gòu)。用Verilog HDL語言編寫程序,實現(xiàn)該濾波器,通過MATLAB和Modelsim聯(lián)合仿真,綜合驗證了設(shè)計的正確性和可行性。
CIC;Hogenauer結(jié)構(gòu);MATLAB;Modelsim
當前,數(shù)字下變頻技術(shù)是軟件無線電的核心技術(shù)部分,它在移動通信、數(shù)字廣播、電視等領(lǐng)域具有非常重要的實際價值。但同時也存在著弊端,隨著采樣速率的提高,采樣后的數(shù)據(jù)流的速率變得很高,會導(dǎo)致后續(xù)的信號處理速度跟不上,因此有必要對A/D后的數(shù)據(jù)流進行降速處理。顯然這需要很大的抽取因子,如果用單級FIR濾波器實現(xiàn),對濾波器的級數(shù)要求很高,在實際應(yīng)用中會產(chǎn)生不良后果:硬件成本太高以及對數(shù)據(jù)處理速度要求增大導(dǎo)致性能大大下降。因此如何采用結(jié)構(gòu)簡單、處理高效的低通濾波器來滿足工程實現(xiàn)的具體要求,就是抽取能否實現(xiàn)的關(guān)鍵所在。CIC濾波器結(jié)構(gòu)簡單,沒有乘法器,只有加法器、積分器和寄存器,性能較好,已經(jīng)被證明是在高速抽取或插值系統(tǒng)中非常有效的高分解速率濾波器[1-4]。文中在研究CIC抽取濾波器理論的基礎(chǔ)上,給定濾波器參數(shù)并在FPGA上實現(xiàn)2級5倍抽取的CIC濾波器,利用MATLAB和Modelsim軟件相結(jié)合進行聯(lián)調(diào)仿真,并且驗證了設(shè)計的可行性。
所謂抽取是指將采樣率降低的轉(zhuǎn)換。圖1為單級CIC抽取濾波器框圖。其包括兩個基本組成部分:積分部分和梳狀部分[5-7]。單級CIC抽取濾波器的沖激響應(yīng)具有如下的形式:
其中,M為大于1的整數(shù),稱為抽取因子。D為為微分延遲,一般取1或2。它的z域表示形式為:
若濾波器的輸入序列為x(n),輸出序列為y(n),則y(n)是把x(n)每隔DM-1個取一個形成的。
圖1 單級CIC抽取濾波器框圖
其傳輸函數(shù)的頻率響應(yīng)為[8-9]:
CIC抽取濾波器的幅頻特性如圖2所示。
圖2 單級CIC抽取濾波器的頻譜圖
其中[0,2π/DM]為其主瓣,其它的區(qū)間為旁瓣。由圖可見,隨著頻率的增大,旁瓣電平不斷減小,當 DM>>1時,第一旁瓣的電平為 2DM/3π,則它與主瓣電平的差值為:
從公式(4)計算可得出單級CIC抽取濾波器的旁瓣抑制與DM無關(guān),旁瓣電平較大,阻帶衰減較差。在抽取濾波中頻率混疊現(xiàn)象就較為嚴重,為降低旁瓣電平,可以采用多級CIC濾波器級聯(lián)的辦法來實現(xiàn)。在下面的分析中,D取1。假設(shè)有N個單級CIC濾波器級聯(lián),其傳遞函數(shù)為:
其第一旁瓣抑制為13.46×N(dB),雖然增大級數(shù)N可以增大阻帶衰減,減小混疊的影響,但并不是N越大越好,還要考慮濾波器的通帶內(nèi)的衰減問題,也就是說在信號通帶內(nèi)信號的幅值容差不能太大。在通帶w=w1處,若設(shè)容差為δ,則單級CIC濾波器的容差為:
則N級CIC濾波器的帶內(nèi)容差為:
由此可以看出,N級 CIC濾波器的帶內(nèi)容差也是單級的N倍。也就是說, 多級級聯(lián)雖然能夠增大阻帶衰減,但是同時也會導(dǎo)致帶內(nèi)平坦度變差。所以CIC濾波器的級數(shù)是有限制的,一般而言以5級為限[10-12]。
圖3為多級CIC濾波器的原始結(jié)構(gòu),圖4為經(jīng)過Noble變換后的Hogenauer結(jié)構(gòu)。
圖3 多級CIC濾波器的原始結(jié)構(gòu)圖
以上的兩個圖比較可以知道:經(jīng)過 Noble變換后的Hogenauer結(jié)構(gòu)把CIC濾波器用于多抽樣率信號濾波時,積分部分始終在高數(shù)據(jù)速率端,梳狀部分置低數(shù)據(jù)速率端,而抽取位于它們中間,最容易實現(xiàn)且占用的資源也最少,大大提高抽取濾波運算的效率。
圖4 多級CIC濾波器的Hogenauer結(jié)構(gòu)圖
設(shè)實現(xiàn)一個5階2級CIC抽取濾波器,實現(xiàn)M=5倍下采樣抽取。信號采樣頻率為200 kHz,F(xiàn)PGA的系統(tǒng)時鐘為200 kHz,輸入數(shù)據(jù)為8 bit,輸出數(shù)據(jù)為16 bit。根據(jù)Hogenauer結(jié)構(gòu)圖,將Verilog HDL程序分成3個模塊來寫,積分模塊、抽取模塊以及梳狀模塊。
2.1 積分器的FPGA實現(xiàn)
每一級積分器只需要一個寄存器及一級加法運算可實現(xiàn)。對于一個10位輸入的5階CIC濾波器,為了保證運行時中間不會產(chǎn)生溢出,需要的內(nèi)部字長為W=Bin+Bgrow=10+5log2(5×2)=10+17=27位。下面是采用Verilog HDL代碼編寫積分模塊的程序。
2.2 抽取器的FPGA實現(xiàn)
實現(xiàn)抽取器的最簡單的一種方法是從輸入序列中每5個采樣點抽取一個,重新組成一個新的輸出序列。因此只需要根據(jù)計數(shù)器對輸入數(shù)據(jù)每5個抽取一個輸出即可。
2.3 梳狀器的FPGA實現(xiàn)
梳狀部分只需要3個寄存器和2個減法器即可實現(xiàn) 。
編寫完濾波器實現(xiàn)程序后,編譯成功后,即可進行FPGA仿真。首先打開MATLAB中的濾波器設(shè)計工具箱FDATool界面[13-14],按照要求填寫好參數(shù)好,出現(xiàn)下面的200 kHz采樣頻率,5倍抽取,2級CIC濾波器的頻譜圖。
圖5 FDATool設(shè)計抽取濾波器的界面
由圖5可見,主瓣寬度是40 kHz,通帶只有20 kHz。這說明該抽取濾波器只能允許20 kHz以下的信號通過,并且數(shù)據(jù)速率降低1/5倍。
MATLAB進行仿真,產(chǎn)生FPGA程序中需要使用到1 kHz和50 kHz兩個正弦波疊加采樣數(shù)據(jù),生成的In.txt文件存放在仿真目錄下,供FPGA程序使用,同時用于驗證整個FPGA電路的工作過程及輸出結(jié)果是否滿足要求。
圖6是1 kHz和50 kHz兩個正弦波采樣數(shù)據(jù)疊加的時域圖和頻譜圖。
圖6 1 kHz和50 kHz疊加的時域和頻譜圖
為了更好地測試濾波前后的信號波形變化,編寫測試激勵文件,用Modelsim進行仿真,讀取In.txt文件輸入測試激勵信號,文件中將輸出仿真結(jié)果數(shù)據(jù)寫入外部的文本文件Out. txt,以方便使用MATLAB軟件讀取數(shù)據(jù),并進一步分析仿真結(jié)果。從Modelsim的仿真波形界面圖中可以看出1 kHz和50 kHz兩個正弦波數(shù)據(jù)疊加信號經(jīng)過200 kHz采樣后經(jīng)過2級5階CIC抽取濾波器后,Y為每5個時鐘輸出一個數(shù)據(jù),數(shù)據(jù)速率是輸入數(shù)據(jù)速率的1/5倍,實現(xiàn)了5倍下采樣。
為了更直觀地觀看仿真結(jié)果,圖 8是將 Out.txt導(dǎo)入MATLAB環(huán)境進行分析的波形圖。
圖7 Modelsim仿真波形圖
圖8 FPGA實現(xiàn)CIC濾波器的仿真波形圖
從圖8可以看出,F(xiàn)PGA仿真濾波前的信號波形圖是由1 kHz和50 kHz兩個正弦波數(shù)據(jù)疊加的信號,經(jīng)2級5階CIC抽取濾波后,形成FPGA仿真濾波后的信號波形圖,抽取濾波后,50 kHz頻率信號被濾除去,保留頻率為1 kHz的正弦波信號,且數(shù)據(jù)速率降為40 kHz,仿真結(jié)果與期望結(jié)果一致,證明設(shè)計是正確性的和可行性的。
CIC抽取濾波器主要是完成降速處理,和傳統(tǒng)濾波器的結(jié)構(gòu)中相比,CIC濾波器設(shè)計不需要乘法運算,而乘法累加器是非常耗費系統(tǒng)資源的,尤其是當在進行處理信號頻率比較高的時候,需要得到信號的實時處理的效果時,只能在不需要太多乘法累加器特殊結(jié)構(gòu)的濾波器中來進行選擇,恰好CIC濾波器剛好符合這個標準。設(shè)計多級 CIC濾波器的時候,經(jīng)過Noble變換后的Hogenauer結(jié)構(gòu),在高速率狀態(tài)下進行積分,在低速率狀態(tài)下進行梳狀濾波,因而降低了中間存儲,資源占用最少,因此很適合采用FPGA和專用ASIC來實現(xiàn)。文中介紹的多級CIC抽取濾波器的實現(xiàn)、驗證方法都是可行的,而且在實際使用的時候,人們可以根據(jù)應(yīng)用不同的場所在程序里可以很方便地改變?yōu)V波器的參數(shù),以簡便的操作來達到降低系統(tǒng)的計算復(fù)雜性的功能!設(shè)計不僅對抽取濾波系統(tǒng)適用,而且對內(nèi)插系統(tǒng)實現(xiàn)也有一定的參考作用[15]。本文所介紹的設(shè)計、驗證的方法都是可行的,具有很高的應(yīng)用價值。
[1]姜巖峰,張東,于明.數(shù)字接收機中的CIC濾波器的設(shè)計[J].電子測量與儀器學報,2011,25(8):671-675.
[2]雷能芳.基于FPGA的CIC抽取濾波器設(shè)計與實現(xiàn)[J].計算機與數(shù)字工程,2012,40(1):137-139.
[3]Losada R A,Lylons R.Reducing CIC filter complexity[J].
IEEE Signal Processing Magazine,2006(23):124-126.
[4]楊小牛,樓才義,徐建良.軟件無線電原理與應(yīng)用[M].北京:電子工業(yè)出版社,2001.
[5]田耘,徐文波,張延偉.無線通信FPGA設(shè)計[M].北京:電子工業(yè)出版社,2006.
[6]楊小牛,鄒少丞,樓才義.軟件無線電原理與應(yīng)用[M].北京:電子工業(yè)出版社,2004.
[7]紐習忻,楊義先.軟件無線電技術(shù)與應(yīng)用[M].北京:郵電大學出版社,2000.
[8]宗孔德.多抽樣率信號處理[M].北京:清華大學出版社,1996.
[9]杜勇.數(shù)字濾波器的MATLAB與FPGA實現(xiàn):Altera/Verilog版[M].北京:電子工業(yè)出版社,2015.
[10]萬婷婷,孫麗華.級聯(lián)梳狀積分濾波器的原理及FPGA實現(xiàn)[J].微計算機信息,2009(17):243-244.
[11]徐艷,田克純.基于FPGA的CIC濾波器的設(shè)計與實現(xiàn)[J].電聲技術(shù),2013,37(2):66-68.
[12]蓋鵬翱,趙笛.CIC濾波器的原理及FPGA實現(xiàn)[J].無線通信技術(shù),2005(4):52-55.
[13]王旭東,潘廣禎.MATLAB及其在FPGA中的應(yīng)用[M].北京:中國人民大學出版社,2005.
[14]劉芳.數(shù)字信號處理與MATLAB實現(xiàn)[M].計算機仿真,2009,26(1):335-338.
[15]謝海霞,孫志雄.多相抽取濾波器的FPGA實現(xiàn) [J].電子器件,2012,35(3):331-333.
The realization of multistage CIC filter on FPGA
XIE Hai-xia,SUN Zhi-xiong
(School of Electronic Communication Engineering,Tropical Ocean University of Hainan,Sanya 572022,China)
CIC filter was a high efficiency filter,widely used in digital down conversion end software radio.It introduces the basic principles of CIC decimation filter and filter Hogenauer structure.Using Verilog HDL language programming to achieve this filter through MATLAB and Modelsim co-simulation,synthesis verify the correctness of the design and feasibility.
CIC;hogenauer structure;MATLAB;modelsim
TN911.72
A
1674-6236(2016)23-0183-03
2016-04-01稿件編號:201604001
海南省自然基金資助(20166224);瓊州學院實踐教改項目(QYSJ2013-001)
謝海霞(1978—),女,海南文昌人,碩士。研究方向:EDA技術(shù)在信號處理中的應(yīng)用。