數(shù)字濾波器的MATLAB設(shè)計(jì)與DSP上的實(shí)現(xiàn)
關(guān)鍵詞:數(shù)字濾波器 MATLAB DSP
引言
隨著信息時(shí)代和數(shù)字世界的到來,數(shù)字信號(hào)處理已成為今一門極其重要的學(xué)科和技術(shù)領(lǐng)域。數(shù)字信號(hào)處理在通信、語音、圖像、自動(dòng)控制、雷達(dá)、軍事、航空航天、醫(yī)療和家用電器等眾多領(lǐng)域得到了廣泛的應(yīng)用。在數(shù)字信號(hào)處理應(yīng)用中,數(shù)字濾波器十分重要并已獲得廣泛應(yīng)用。
1 數(shù)字濾波器的設(shè)計(jì)
1.1 數(shù)字濾波器設(shè)計(jì)的基本步驟
數(shù)字濾波器根據(jù)其沖激響應(yīng)函數(shù)的時(shí)域特性,可分為兩種,即無限長(zhǎng)沖激響應(yīng)(IIR)濾波器和有限長(zhǎng)沖激響應(yīng)(FIR)濾波器。IIR濾波器的特征是,具有無限持續(xù)時(shí)間沖激響應(yīng)。種濾波器一般需要用遞歸模型來實(shí)現(xiàn),因而有時(shí)也稱之為遞歸濾波器。FIR濾波器的沖激響應(yīng)只能延續(xù)一定時(shí)間,在工程實(shí)際中可以采用遞歸的方式實(shí)現(xiàn),也可以采用非遞歸的方式實(shí)現(xiàn)。數(shù)字濾波器的設(shè)計(jì)方法有多種,如雙線性變換法、窗函數(shù)設(shè)計(jì)法、插值逼近法和Chebyshev逼近法等等。隨著MATLAB軟件尤其是MATLAB的信號(hào)處理工作箱的不斷完善,不僅數(shù)字濾波器的計(jì)算機(jī)輔助設(shè)計(jì)有了可能,而且還可以使設(shè)計(jì)達(dá)到最優(yōu)化。
數(shù)字濾波器設(shè)計(jì)的基本步驟如下:
(1)確定指標(biāo)
在設(shè)計(jì)一個(gè)濾波器之前,必須首先根據(jù)工程實(shí)際的需要確定濾波器的技術(shù)指標(biāo)。在很多實(shí)際應(yīng)用中,數(shù)字濾波器常常被用來實(shí)現(xiàn)選頻操作。因此,指標(biāo)的形式一般在頻域中給出幅度和相位響應(yīng)。幅度指標(biāo)主要以兩種方式給出。第一種是絕對(duì)指標(biāo)。它提供對(duì)幅度響應(yīng)函數(shù)的要求,一般應(yīng)用于FIR濾波器的設(shè)計(jì)。第二種指標(biāo)是相對(duì)指標(biāo)。它以分貝值的形式給出要求。在工程實(shí)際中,這種指標(biāo)最受歡迎。對(duì)于相位響應(yīng)指標(biāo)形式,通常希望系統(tǒng)在通頻帶中人有線性相位。運(yùn)用線性相位響應(yīng)指標(biāo)進(jìn)行濾波器設(shè)計(jì)具有如下優(yōu)點(diǎn):①只包含實(shí)數(shù)算法,不涉及復(fù)數(shù)運(yùn)算;②不存在延遲失真,只有固定數(shù)量的延遲;③長(zhǎng)度為N的濾波器(階數(shù)為N-1),計(jì)算量為N/2數(shù)量級(jí)。因此,本文中濾波器的設(shè)計(jì)就以線性相位FIR濾波器的設(shè)計(jì)為例。
(2)逼近
確定了技術(shù)指標(biāo)后,就可以建立一個(gè)目標(biāo)的數(shù)字濾波器模型。通常采用理想的數(shù)字濾波器模型。之后,利用數(shù)字濾波器的設(shè)計(jì)方法,設(shè)計(jì)出一個(gè)實(shí)際濾波器模型來逼近給定的目標(biāo)。
(3)性能分析和計(jì)算機(jī)仿真
上兩步的結(jié)果是得到以差分或系統(tǒng)函數(shù)或沖激響應(yīng)描述的濾波器。根據(jù)這個(gè)描述就可以分析其頻率特性和相位特性,以驗(yàn)證設(shè)計(jì)結(jié)果是否滿足指標(biāo)要求;或者利用計(jì)算機(jī)仿真實(shí)現(xiàn)設(shè)計(jì)的濾波器,再分析濾波結(jié)果來判斷。
1.2 濾波器的MATLAB設(shè)計(jì)
(1)MATLAB
MATLAB是一套用于科學(xué)計(jì)算的可視化高性能語言與軟件環(huán)境。它集數(shù)值分析、矩陣運(yùn)算、信號(hào)處理和圖形顯示于一體,構(gòu)成了一個(gè)界面友好的用戶環(huán)境。它的信號(hào)處理工具箱包含了各種經(jīng)典的和現(xiàn)代的數(shù)字信號(hào)處理技術(shù),是一個(gè)非常優(yōu)秀的算法研究與輔助設(shè)計(jì)的工具。在設(shè)計(jì)數(shù)字濾波器時(shí),通常采用MATLAB來進(jìn)行輔助設(shè)計(jì)和仿真。
(2)FIR濾波器的MATLAB設(shè)計(jì)
下面以設(shè)計(jì)線性相位FIR濾波器為例介紹具體的設(shè)計(jì)方法。
線性相位FIR濾波器通常采用窗函數(shù)法設(shè)計(jì)。窗函數(shù)法設(shè)計(jì)FIR濾波器的基本思想是:根據(jù)給定的濾波器技術(shù)指標(biāo),選擇濾波器長(zhǎng)度N和窗函數(shù)ω(n),使其具有最窄寬度的主瓣和最小的旁瓣。其核心是從給定的頻率特性,通過加窗確定有限長(zhǎng)單位脈沖響應(yīng)序列h(n)。工程中常用的窗函數(shù)共有6種,即矩形窗、巴特利特(Bartlett)窗、漢寧(Hanning)窗、漢明(Hamming)窗、布萊克曼(Blackman)窗和凱塞(Kaiser)窗。
假設(shè)實(shí)際工程需要設(shè)計(jì)一個(gè)線性相位帶通FIR濾波器指標(biāo)如下:
fn=[1000,1375,3625,4000];
a=[0,1,0];
dev=[0.0005,0.05,0.0005];
阻帶最小衰減60dB,再設(shè)采樣頻率fs=10kHz,則根據(jù)阻帶最小衰減來選擇凱塞(Kaiser)窗,利用MATLAB的求階函數(shù)和FIR濾波器的設(shè)計(jì)函數(shù),可以快速地設(shè)計(jì)出所需的數(shù)字濾波器。這兩個(gè)設(shè)計(jì)函數(shù)如下:
[N,Wn,beta,ftype]=kaiserord(fn,a,dev,fs);
b=fir1(n,Wn,ftype,Kaiser(n+1,beta);
最后,利用的濾波器分析函數(shù)freqz分析所設(shè)計(jì)出的濾波器的幅頻特性和相頻特性,并用圖形顯示函數(shù)plot將它們顯示出來,如圖1所示。由圖1可見,設(shè)計(jì)結(jié)果滿足指標(biāo)要求。
2 數(shù)字濾波器的實(shí)現(xiàn)方法
數(shù)字濾波器的實(shí)現(xiàn)方法一般有以下幾種。
①采用加法器、乘法器、延時(shí)器設(shè)計(jì)專用的濾波電路。
②在通用計(jì)算機(jī)系統(tǒng)中加上專用的加速處理機(jī)設(shè)計(jì)實(shí)現(xiàn)。
③用通用的可編程DSP芯片實(shí)現(xiàn)。
④用專用的DSP芯片實(shí)現(xiàn)。在一些特殊的場(chǎng)合,要求的信號(hào)處理速度極高,用通用DSP芯片很難實(shí)現(xiàn)。這種芯片將相應(yīng)的濾波算法在芯片內(nèi)部用硬件實(shí)現(xiàn),無需進(jìn)行編程。
⑤采用FPGA/CPLD設(shè)計(jì)實(shí)現(xiàn)。
在上述幾種方法中,第②種方法的缺點(diǎn)是速度較慢,一般可用于DSP算法的模擬。第①、④種方法專用性強(qiáng),應(yīng)用受到很大的限制。第③、⑤種方法都可以通過編程來實(shí)現(xiàn)各種數(shù)字濾波,但是,第③種因有專用的指令來實(shí)現(xiàn)濾波運(yùn)算編程實(shí)現(xiàn)容易,而第⑤種方法編程實(shí)現(xiàn)較為困難。
3 數(shù)字濾波器的DSP實(shí)現(xiàn)
DSP是一種實(shí)時(shí)、快速、特別適合于實(shí)現(xiàn)各種數(shù)字信號(hào)處理運(yùn)算的微處理器。由于它由具有豐富的硬件資源、改進(jìn)的哈佛結(jié)構(gòu)、高速數(shù)據(jù)處理能力和強(qiáng)大的指令系統(tǒng),而在通信、航空、航天、雷達(dá)、工業(yè)控制、網(wǎng)絡(luò)及家用電器等各個(gè)領(lǐng)域得到廣泛應(yīng)用。DSP分為定點(diǎn)和浮點(diǎn)兩種,下面以定點(diǎn)DSP芯片為例,討論FIR濾波器實(shí)現(xiàn)的幾個(gè)關(guān)鍵問題。所討論的這些問題,在DSP系統(tǒng)設(shè)計(jì)中有實(shí)際的參考和應(yīng)用價(jià)值。
3.1 定點(diǎn)數(shù)的定標(biāo)
在定點(diǎn)DSP芯片中,采用定點(diǎn)數(shù)進(jìn)行數(shù)值運(yùn)算,其操作數(shù)一般采用整型數(shù)來表示。一個(gè)整型數(shù)的最大表示范圍取決于DSP芯片所給定的字長(zhǎng),一般為16位或24位。顯然,字長(zhǎng)越長(zhǎng),所能表示的數(shù)的范圍越大,精度也越高。在濾波器的實(shí)現(xiàn)過程中,DSP所要處理的數(shù)可能是整數(shù),也可能是小數(shù)或混合小數(shù);然而,DSP在執(zhí)行算術(shù)運(yùn)算指令時(shí),并不知道當(dāng)前所處理的數(shù)據(jù)是整數(shù)還是小數(shù),更不能指出小數(shù)點(diǎn)的位置在哪里。因此,在編程時(shí)必須指定一個(gè)數(shù)的小數(shù)點(diǎn)處于哪一位,這就是定標(biāo)。通過定標(biāo),可以在16位數(shù)的不同位置上確定小數(shù)點(diǎn),從而表示出一個(gè)范圍大小不同且精度也不同的小數(shù)。例如:在Q15中,1080H=0.12890625;在Q0時(shí),1080H=4224。
在使用定點(diǎn)DSP時(shí),如何選擇合適的Q值是一個(gè)關(guān)鍵性問題。就DSP運(yùn)算的處理過程來說,實(shí)際參與運(yùn)算的都是變量,有的是未知的,有的則在運(yùn)算過程中不斷改變數(shù)值,但它們?cè)谝粚?shí)際工程環(huán)境中作為一個(gè)物理參量而言都有一定的動(dòng)態(tài)范圍。只要個(gè)動(dòng)態(tài)范圍確定了,Q值也就確定了。因此,在程序設(shè)計(jì)前,首先要通過細(xì)致和嚴(yán)謹(jǐn)?shù)姆治?,找出參與運(yùn)算的所有變量的變化范圍,充分估計(jì)運(yùn)算中可能出現(xiàn)的各種情況,然后確定采用何種定標(biāo)標(biāo)準(zhǔn)才能保證運(yùn)算結(jié)果正確可靠。這里,所討論的理論分析法和統(tǒng)計(jì)分析法確定變量絕對(duì)值最大值|max|,然后根據(jù)|max|再確定Q值。但是,DSP操作過程中的意外情況是無法避免的,即使采用統(tǒng)計(jì)分析法也不可能涉及到所有情況。因此,在定點(diǎn)運(yùn)算過程中應(yīng)該采取一些判斷和保護(hù)措施(特別是在定點(diǎn)加法中)。另外,在數(shù)字信號(hào)處理中的大量運(yùn)算是乘法和累加,應(yīng)盡量采用純整數(shù)或純小數(shù)運(yùn)算,即全部變量都用Q0或Q15格式表示。這樣做的好處是操作簡(jiǎn)單、編程方便。只有當(dāng)純整數(shù)或純小數(shù)運(yùn)算不能滿足變量的動(dòng)態(tài)范圍和精度要求時(shí),才采用混合小數(shù)表示法進(jìn)行定點(diǎn)運(yùn)算。
3.2 誤差問題
因?yàn)樵谟枚c(diǎn)DSP實(shí)現(xiàn)時(shí),所有的數(shù)據(jù)都是定長(zhǎng)的,運(yùn)算也都是定點(diǎn)運(yùn)算,因而會(huì)產(chǎn)生有限字長(zhǎng)效應(yīng)。所產(chǎn)生的誤差主要包括:數(shù)模轉(zhuǎn)換引起的量化誤差、系數(shù)量化引起的誤差以及運(yùn)算過程中的舍入誤差。在用定點(diǎn)DSP時(shí),產(chǎn)生誤差是不能避免的,但是可以通過一些方法減小誤差。如,可以用兩個(gè)存儲(chǔ)單元來表示一個(gè)數(shù),運(yùn)算時(shí)使用雙字運(yùn)算;可以根據(jù)需要要將濾波器系數(shù)都用雙字表示,也可以只將一半的系數(shù)用雙字表示,視需要而定。另外,F(xiàn)IR數(shù)字濾波器和IIR數(shù)字濾波器所引入的量化誤差是不一樣的。FIR數(shù)字濾波器主要采用非遞歸結(jié)構(gòu),因而在有限精度的運(yùn)算中都是穩(wěn)定的;而IIR數(shù)字濾波器是遞歸結(jié)構(gòu),極點(diǎn)必須在z平面單位圓內(nèi)才能穩(wěn)定,這種結(jié)構(gòu)運(yùn)算中的四舍五入處理有時(shí)會(huì)引起寄生振蕩。除了有限字長(zhǎng)效應(yīng)以外,不同結(jié)構(gòu)引入的誤差也有所不同。在實(shí)際設(shè)計(jì)中,要注意實(shí)現(xiàn)中的誤差問題。在選擇不同的結(jié)構(gòu)時(shí),應(yīng)考慮它們所引入的誤差,并用高級(jí)語言進(jìn)行定點(diǎn)仿真,以比較不同結(jié)構(gòu)下誤差的大小,從而作出合理選擇。
3.3 循環(huán)尋址
循環(huán)尋址(circular addressing)是DSP中經(jīng)常用到的一種尋址方式。該尋址方法可以對(duì)一塊特定存儲(chǔ)區(qū)實(shí)現(xiàn)循環(huán)的操作??梢园蜒h(huán)尋址理解為實(shí)現(xiàn)一個(gè)滑動(dòng)窗,新數(shù)據(jù)引入后將覆蓋老的數(shù)據(jù),便得該窗中包含了需處理的最新數(shù)據(jù)。在數(shù)字信號(hào)處理中的FIR、卷積等運(yùn)算中,循環(huán)尋址具有極其重要的意義。
在TI的DSP中,循環(huán)尋址通過如下方法實(shí)現(xiàn)。
①設(shè)定BK(寄存器塊大小)值,以確定循環(huán)尋址緩沖區(qū)的大小,也可將它看作是循環(huán)的周期。
②設(shè)定緩沖區(qū)的底部地址。必須注意:其低N位為零,其中N為滿足式(1)的最小N值。
2 N>BK (1)
③用輔助寄存器間接尋址循環(huán)緩沖區(qū)。
圖2 輸入數(shù)據(jù)頻譜圖 圖3 輸出數(shù)據(jù)頻譜圖
3.4 實(shí)現(xiàn)舉例
根據(jù)上述設(shè)計(jì)出來的FIR濾波器,考慮工程實(shí)際的需要(精度的要求)和采用定點(diǎn)DSP芯片的方便實(shí)現(xiàn),選擇Q15定標(biāo)。為此,必須對(duì)輸入數(shù)據(jù)和濾波器的系數(shù)進(jìn)行歸一化處理。輸入數(shù)據(jù)的歸一化處理可通過設(shè)置A/D轉(zhuǎn)換的參考電平來實(shí)現(xiàn)。濾波器的系數(shù)歸一化只要求取系數(shù)中的最大值,再用這個(gè)最大值去系數(shù)便可。
由于一個(gè)N(設(shè)N為偶數(shù))階的FIR濾波器具有系數(shù)對(duì)稱特性,其輸出方程可以寫為:
y(n)=ao[x(n)+x(n-N+1)]+a1[x(n-1)+x(n-N+2)]+…+aN/2-1[X(n-N/2+1)+x(n-N/2)] (2)
根據(jù)式(2)可建立如下實(shí)現(xiàn)算法:
①在數(shù)據(jù)存儲(chǔ)中開辟兩個(gè)循環(huán)緩沖區(qū),New循環(huán)緩沖區(qū)存放新數(shù)據(jù),O1d循環(huán)緩沖區(qū)中存放老數(shù)據(jù)。循環(huán)緩沖區(qū)的長(zhǎng)度為N/2。
②設(shè)置循環(huán)緩沖區(qū)指針,AR2指向New緩沖區(qū)中最新的數(shù)據(jù),AR3指向O1d緩沖區(qū)中最老的數(shù)據(jù)。
③在程序存儲(chǔ)器中設(shè)置系數(shù)表。
④(AR2)+(AR3)→AH(累加器A的高位);(AR2)-1→AR2;(AR3)-1→AR3。
⑤將累加器B清零,重復(fù)執(zhí)行下列操作N/2次:(AH)*系數(shù)ai+(B)→B,系數(shù)指針(PAR)加1,(AR2)+(AR3)→AH,AR2和AR3減1。
⑥保存和輸出結(jié)果(結(jié)果在BH中)。
⑦修正數(shù)據(jù)指針,讓AR2和AR3分別指向New緩沖區(qū)最新數(shù)據(jù)和O1d緩沖區(qū)中最老的數(shù)據(jù)。
⑧用New緩沖區(qū)中最老的數(shù)據(jù)替代O1d緩沖區(qū)中最老的數(shù)據(jù)。O1d緩沖區(qū)指針減1。
⑨輸入一個(gè)新數(shù)據(jù)替代New緩沖區(qū)中最老的數(shù)據(jù)。
重復(fù)執(zhí)行第④~⑨步。
根據(jù)上述算法編制程序[4、5],在CCS5000上進(jìn)行仿真調(diào)試運(yùn)行,并分析輸入數(shù)據(jù)和輸出的頻譜,結(jié)果如圖2、圖3所示。由圖可見,濾波器實(shí)現(xiàn)了目標(biāo)要求。
最后,將程序移植為聞亭公司的TMS320VC5409評(píng)估板的MCBSP0的中斷服務(wù)程序,并將形成的可執(zhí)行文件加載到評(píng)估板上運(yùn)行。由TMS320VC5409評(píng)估板的模擬輸入口輸入模擬信號(hào),經(jīng)TLC320A/D轉(zhuǎn)換芯片,按8kHz的采樣頻率采樣轉(zhuǎn)換成數(shù)字信號(hào),輸入DSP。濾波后經(jīng)D/A輸出模擬量,結(jié)果證實(shí)該程序可實(shí)現(xiàn)對(duì)采樣率為8kHz的模擬信號(hào)進(jìn)行實(shí)時(shí)濾波處理。
結(jié)語
數(shù)字濾波器的應(yīng)用十分廣泛,運(yùn)行MATLAB語言,能很容易地設(shè)計(jì)出具有嚴(yán)格要求(如線性相位等)的濾波器。用定點(diǎn)DSP實(shí)現(xiàn)濾波器械要考慮DSP的定標(biāo)、誤差、循環(huán)尋址等幾個(gè)關(guān)鍵問題。文中實(shí)例是為了表明,可方便地用DSP實(shí)現(xiàn)模擬信號(hào)的實(shí)時(shí)濾波處理,所采用的采樣頻率并不高。如果DSP采用更高的時(shí)鐘,它的處理速度將更快,將能夠滿足更高采樣率的數(shù)字信號(hào)的實(shí)時(shí)濾波處理。
濾波器相關(guān)文章:濾波器原理
濾波器相關(guān)文章:濾波器原理
電源濾波器相關(guān)文章:電源濾波器原理
評(píng)論