陳鑫磊,辛?xí)詫?,黃 鑫
(沈陽(yáng)工業(yè)大學(xué)信息科學(xué)與工程學(xué)院,沈陽(yáng)110870)
數(shù)字濾波器具有可靠性高、一致性好等優(yōu)點(diǎn),在許多應(yīng)用領(lǐng)域使用數(shù)字濾波器替代模擬濾波器可獲得更好的性能。與FIR濾波器相比,IIR濾波器具有更好的幅頻特性。由于具有反饋回路,同F(xiàn)IR相比,IIR在相同階數(shù)時(shí)取得的濾波效果更好。目前對(duì)于數(shù)字濾波器的設(shè)計(jì)多局限于軟件仿真,在硬件實(shí)現(xiàn)時(shí)還需解決字長(zhǎng)確定及浮點(diǎn)乘法定點(diǎn)化的問(wèn)題。由于DSP硬件資源豐富運(yùn)算能力強(qiáng),使用DSP芯片實(shí)現(xiàn)數(shù)字濾波器軟件設(shè)計(jì)較為簡(jiǎn)單,但硬件系統(tǒng)較為復(fù)雜。與DSP相比,F(xiàn)PGA在成本、功耗、靈活性上都更有優(yōu)勢(shì)[1]。針對(duì)二進(jìn)制數(shù)的特點(diǎn)對(duì)乘法運(yùn)算進(jìn)行了優(yōu)化。在不使用硬件乘法器及IP核的前提下,使用較少的邏輯單元實(shí)現(xiàn)了濾波器功能,并進(jìn)行了實(shí)際測(cè)試。實(shí)驗(yàn)結(jié)果與理論設(shè)計(jì)吻合,達(dá)到了預(yù)期的濾波效果。
根據(jù)實(shí)際需要選擇濾波器階數(shù)為六階,由于使用六階直接型結(jié)構(gòu)將會(huì)帶來(lái)較大的誤差積累[2]。因此選擇使用三個(gè)二階濾波器級(jí)聯(lián)的結(jié)構(gòu)來(lái)實(shí)現(xiàn),每個(gè)二階濾波器傳遞函數(shù)如下式所示:
濾波器類型選擇巴特沃斯濾波器,因其幅頻特性單調(diào)下降,相頻特性也是單調(diào)下降,對(duì)信號(hào)產(chǎn)生的幅值畸變和相位畸變都很小[3]。
濾波器主要參數(shù)包括:采樣率28.8kHz、下限截止頻率1kHz、上限截止頻率3kHz。階數(shù)為六階,結(jié)構(gòu)采用由二階直接型級(jí)聯(lián)[4]構(gòu)成,阻帶衰減倍數(shù)由軟件優(yōu)化至最佳。由于軟件設(shè)計(jì)的濾波器增益是歸一化的,在每個(gè)二階結(jié)構(gòu)中都會(huì)除以一個(gè)系數(shù),保證通帶信號(hào)增益為0dB??紤]到實(shí)際使用中輸出數(shù)據(jù)字長(zhǎng)大于輸入數(shù)據(jù)字長(zhǎng),所以濾波器在通帶可以有一定增益。將每節(jié)的除法省略在降低計(jì)算復(fù)雜度的同時(shí),可以增加計(jì)算字長(zhǎng)減少量化誤差。最終得出的幅頻特性、相頻特性曲線如圖1所示,根據(jù)系統(tǒng)的零極點(diǎn)分布可得出濾波器是穩(wěn)定的。
圖1 幅頻及相頻特性曲線
濾波器設(shè)計(jì)完成后將參數(shù)導(dǎo)出,得到傳遞函數(shù)如下式所示:
為保證濾波器在計(jì)算的過(guò)程中數(shù)據(jù)不發(fā)生溢出,需要了解實(shí)際使用過(guò)程中各節(jié)點(diǎn)可能出現(xiàn)的最值來(lái)確定字長(zhǎng)。通過(guò)在Simulink環(huán)境下建立濾波器仿真模型[5],將6位二進(jìn)制數(shù)表示的正弦波按照采樣率送入濾波器,可觀察到各節(jié)點(diǎn)數(shù)據(jù)的變化范圍。存儲(chǔ)計(jì)算結(jié)果的寄存器的字長(zhǎng)按照實(shí)際需求設(shè)定,為了保證計(jì)算精度防止溢出,計(jì)算單元的字長(zhǎng)需要留有余量。根據(jù)模型仿真的結(jié)果可以確定寄存器使用12位字長(zhǎng),計(jì)算使用14位字長(zhǎng)。
濾波器結(jié)構(gòu)如圖2所示,一共有6個(gè)浮點(diǎn)系數(shù),實(shí)際實(shí)現(xiàn)時(shí)需要定點(diǎn)化。定點(diǎn)化可以通過(guò)將系數(shù)擴(kuò)大一定倍數(shù)后取整,計(jì)算乘法后再除以擴(kuò)大倍數(shù)來(lái)實(shí)現(xiàn)。該方法需要進(jìn)行除法計(jì)算,電路復(fù)雜。為了減小定點(diǎn)化帶來(lái)的誤差,需要將系數(shù)擴(kuò)大較大的倍數(shù),這就增加了運(yùn)算的字長(zhǎng)。運(yùn)算電路字長(zhǎng)的增加,一方面增加了電路復(fù)雜度,另一方面也降低了運(yùn)算速度。
為了在保證計(jì)算精度的前提下盡可能的減小字長(zhǎng),可以將乘法轉(zhuǎn)化為多個(gè)除法結(jié)果的加減法來(lái)進(jìn)行,交換乘除法的順序可以更有效的利用字長(zhǎng)保證數(shù)據(jù)不會(huì)溢出。二進(jìn)制數(shù)的除法可以用移位代替,根據(jù)所乘系數(shù)的不同借助CSD編碼可以找到在可承受的精度誤差內(nèi)最接近的逼近結(jié)果,使用最簡(jiǎn)單的電路實(shí)現(xiàn)理想的計(jì)算精度。由于計(jì)算過(guò)程中數(shù)據(jù)均為有符號(hào)數(shù),減法實(shí)際使用加補(bǔ)碼實(shí)現(xiàn),所以電路只需要實(shí)現(xiàn)移位以及加法即可。
圖2 濾波器結(jié)構(gòu)圖
CSD編碼[6-7](Canonic Signed Digit)即正則有符號(hào)數(shù)字系統(tǒng),可將系統(tǒng)化簡(jiǎn)為最少非零元素實(shí)現(xiàn),從電路結(jié)構(gòu)上看,最少非零元素即為運(yùn)算單元級(jí)數(shù)最少。CSD編碼有三重值,除0、1外還引入了-1幫助化簡(jiǎn),為表示方便這里用2表示。從最低有效位開(kāi)始用10…0(-1)代替所有1連續(xù)個(gè)數(shù)大于2的序列,使用110(-1)代替1011序列,從最高有效位開(kāi)始用10(-1)代替011,可得到對(duì)應(yīng)的CSD編碼。以十進(jìn)制數(shù)123為例說(shuō)明CSD編碼過(guò)程,123轉(zhuǎn)化為二進(jìn)制表示
由高位開(kāi)始替換011序列的結(jié)果
從低位開(kāi)始替換連續(xù)的1序列得到最終結(jié)果
通過(guò)比較編碼前后的結(jié)果原序列有六個(gè)非零項(xiàng),而編碼后只有三個(gè)非零項(xiàng)簡(jiǎn)化了運(yùn)算,為檢驗(yàn)編碼的正確性可以將CSD編碼還原為十進(jìn)制數(shù)與編碼前一致。
以系數(shù)1.86229為例說(shuō)明乘法計(jì)算的優(yōu)化方法,首先根據(jù)數(shù)據(jù)位寬及需要的精度確定移位的最大值n,n值的選取參考模型仿真的結(jié)果決定這里選8。將系數(shù)乘以2n后取整
將結(jié)果轉(zhuǎn)化為二進(jìn)制表示
借助CSD編碼進(jìn)行簡(jiǎn)化
對(duì)應(yīng)位為1代表加2代表減,從左至右各位的權(quán)重為20到2-7逼近結(jié)果如下
計(jì)算逼近誤差
Δ=1.86328125-1.86229=0.00099125
經(jīng)過(guò)優(yōu)化,任意數(shù)乘1.86229的結(jié)果可以用該數(shù)左移1位加右移8位減右移3位、6位進(jìn)行逼近,實(shí)現(xiàn)的增益為1.86328125,而對(duì)應(yīng)的電路除移位外只需要三級(jí)加法器即可。所有系數(shù)的優(yōu)化結(jié)果如表1所示。
表1 濾波器系數(shù)逼近結(jié)果
使用Verilog語(yǔ)言按照濾波器結(jié)構(gòu)對(duì)電路進(jìn)行描述,寄存器的位寬由模型仿真給出,浮點(diǎn)乘法由移位以及加法替代,在描述過(guò)程中注意時(shí)序,防止將未算完的結(jié)果存入寄存器。
在計(jì)算過(guò)程中所有數(shù)據(jù)為有符號(hào)數(shù),對(duì)數(shù)據(jù)進(jìn)行計(jì)算及移位時(shí)要考慮到對(duì)符號(hào)位的影響。輸入信號(hào)由Matlab產(chǎn)生,將幅度為10頻率為1.2kHz的信號(hào)與幅度為5頻率分別為500Hz、5kHz、6kHz的噪聲混合作為輸入,導(dǎo)入Modelsim編寫測(cè)試文件,按照時(shí)序?qū)?shù)據(jù)逐個(gè)送入濾波器,同時(shí)將濾波器的輸出數(shù)據(jù)記錄到文件。使用Matlab對(duì)濾波器的輸入輸出結(jié)果進(jìn)行FFT計(jì)算,輸入輸出波形及分析結(jié)果如圖3所示。
根據(jù)設(shè)計(jì)采樣率為28.8kHz,對(duì)系統(tǒng)進(jìn)行1024點(diǎn)FFT運(yùn)算,采用如下公式:
由公式 (3)計(jì)算得出對(duì)頻率的分辨率為28.125Hz,可有效區(qū)分施加的四種信號(hào)。輸入信號(hào)頻譜圖可以看到4個(gè)明顯的尖峰,經(jīng)過(guò)濾波器處理后輸出信號(hào)的頻譜圖只在通帶內(nèi)存在一個(gè)尖峰,通帶外的噪聲被有效濾除,濾波效果明顯。
圖3 濾波器輸入輸出結(jié)果分析
為進(jìn)一步驗(yàn)證濾波器的實(shí)際性能,使用FPGA、模數(shù)轉(zhuǎn)換器、數(shù)模轉(zhuǎn)換器搭建實(shí)驗(yàn)平臺(tái)進(jìn)行實(shí)際測(cè)試。模數(shù)轉(zhuǎn)換器使用AD9280,輸出為8位并行數(shù)字量[8],實(shí)際使用高六位;數(shù)模轉(zhuǎn)換器使用TLC5615,通過(guò)串行接口控制,將12位數(shù)字量轉(zhuǎn)化為模擬電壓[9]。輸入由信號(hào)源產(chǎn)生,幅度一定,頻率不同,經(jīng)抗混疊濾波器處理后輸入模數(shù)轉(zhuǎn)換器,數(shù)據(jù)經(jīng)FPGA處理后送入數(shù)模轉(zhuǎn)換器,通過(guò)示波器觀察不同頻率下數(shù)模轉(zhuǎn)換器輸出的幅度。當(dāng)輸入信號(hào)為峰峰值5V,頻率分別為 500Hz、1.2kHz、2.8kHz、5kHz的正弦波時(shí),數(shù)模轉(zhuǎn)換器輸出信號(hào)的峰峰值對(duì)應(yīng)為0.4V、4.08V、3.52V、0.32V,濾波效果明顯。實(shí)測(cè)結(jié)果如圖4所示,各圖中上方的曲線為濾波器輸出結(jié)果,下方的曲線為濾波器的輸入信號(hào)。
圖4 濾波器實(shí)際測(cè)量結(jié)果
模數(shù)轉(zhuǎn)換器模擬輸入范圍正負(fù)5V,數(shù)模轉(zhuǎn)換器模擬輸出范圍0至5V,根據(jù)輸入輸出數(shù)據(jù)的位數(shù)可以計(jì)算出濾波器實(shí)際放大倍數(shù)為測(cè)量放大倍數(shù)的128倍,如下式所示:
將各頻點(diǎn)的實(shí)測(cè)數(shù)據(jù)帶入公式(4)可計(jì)算出濾波器的實(shí)際增益,由幅頻特性曲線可以得出濾波器的理論增益,結(jié)果如表2所示。
表2 實(shí)測(cè)結(jié)果對(duì)比表
實(shí)際增益與理論增益有一定的偏差,考慮到抗混疊濾波器對(duì)信號(hào)的影響,以及示波器讀數(shù)的誤差,實(shí)測(cè)數(shù)據(jù)與理論基本吻合,實(shí)物測(cè)試平臺(tái)如圖5所示。
圖5 實(shí)物測(cè)試
通過(guò)試驗(yàn)測(cè)量證明了采用建模仿真確定各節(jié)點(diǎn)字長(zhǎng)的方法是合理的,使用移位及加法代替乘法是可行的。如果需要進(jìn)一步減小實(shí)際與理論的偏差,可以對(duì)系數(shù)進(jìn)行進(jìn)更高位數(shù)的逼近。同時(shí),計(jì)算部分的字長(zhǎng)與加法的級(jí)數(shù)也會(huì)隨之增加,計(jì)算速度也將受到影響。這就需要根據(jù)使用條件的不同,在精度與速度之間取得均衡。
[1]許臣蓉.基于DSP的數(shù)字濾波器設(shè)計(jì)[D].武漢:武漢理工大學(xué),2006.XU Chenrong.Digital filter design based on DSP[D].Wuhan:Wuhan University of Technology,2006.
[2]郭志陽(yáng),孫向陽(yáng),陳學(xué)英.基于FPGA的DSTFT算法對(duì)FSK信號(hào)解調(diào)的改進(jìn)[J].電子設(shè)計(jì)工程,2016,24(21):4-6.GUOZhiyang,SUN Xiangyang,CHEN Xueying.Improvement of FSK signal demodulation of DSTFT algorithm based on FPGA[J].Electronic Design Engineering,2016.24(21):4-6.
[3]王大偉,賈榮叢,王劃一.基于Matlab的巴特沃斯濾波器設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2012,35(21):71-72.WANG Dawei,JIA Rongcong,WANG Huayi.Design ofButter worth analog filter based on Matlab[J].Modern Electronics Technique,2012,35(21):71-72.
[4]朱廣信.高效數(shù)字濾波器結(jié)構(gòu)研究及其在虛擬聽(tīng)覺(jué)實(shí)現(xiàn)中的應(yīng)用[D].杭州:浙江大學(xué),2010.ZHU Guangxin.Research on efficient digital filter structure and its application in virtual auditory realization[D].Hangzhou:Zhejiang University,2010.
[5]胡廣書.數(shù)字信號(hào)處理[M].北京:清華大學(xué)出版社,2003.HU Guangshu.Digital signal processing[M].Beijing:Tsinghua University Press,2003.
[6]Sait S M,Farooqui A A,Beckhoff G F.A novel technique for fast multiplication[C]//Computers and Communications,1995.,Conference Proceedings of the 1995 IEEE Fourteenth Annual International Phoenix Conference on.IEEE,1995:109-114.
[7]Hashemian R.A new method for conversion of a 2's complement to canonic signed digit number system and its representation[C]//Signals,Systems and Computers,1996.Conference Record of the Thirtieth Asilomar Conference on.IEEE,1996:904-907.
[8]張偉,顧強(qiáng),李世中,等.基于SignalTap II的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)與調(diào)試[J].微型機(jī)與應(yīng)用,2014,33(2):8-10.ZHANG Wei,GU Qiang,LI Shizhong,et al.Design and debugging of the data acquisition system based on SignalTap II[J].Microcomputer&Its Applications,2014,33(2):8-10.
[9]晏勇.基于FPGA三相正弦信號(hào)發(fā)生器的設(shè)計(jì)與實(shí)現(xiàn)[J].電氣自動(dòng)化,2014,36(4):38-40.YAN Yong.Design and implementation of 3-phase Sinusoidal signal generator based on FPGA[J].Electrical Automation,2014,36(4):38-40.