譚家杰
(衡陽師范學院 物理與電子信息科學系,湖南 衡陽 421002)
數(shù)字濾波是語音信號處理、圖象處理、譜分析等領域中的一個基本處理技術(shù)。目前,數(shù)字濾波器的實現(xiàn)方式較多,主要集中在:通用計算機加軟件實現(xiàn)[1-3];專用 DSP(digital signal processor)芯片實現(xiàn)[4];可編程邏輯器件來開發(fā)數(shù)字濾波器[5-8];或用微控制器實現(xiàn)[8-12]。以微控制器為主要器件實現(xiàn)數(shù)字濾波器相對采用DSP器件或可編程邏輯器件要容易、簡單得多,在微控制器的濾波器實現(xiàn)方面主要有(1)微控制器濾波器算法研究[9]。(2)微控制器配合程控濾波模塊實現(xiàn)[10-13]。論文的濾波器系統(tǒng)以STC12C5A16S2微控制器為核心,該器件自帶10位A/D。系統(tǒng)配合 MAX538D/A轉(zhuǎn)換芯片,加上LCD1602顯示濾波類型,并輔之以按鍵來切換濾波算法。系統(tǒng)功能是對采樣數(shù)據(jù)進行濾波處理,系統(tǒng)實現(xiàn)的算法有:限幅濾波、中值濾波、算術(shù)平均濾波、加權(quán)平均濾波、滑動平均濾波五種濾波算法。
微控制器(micro controller unit,MCU),俗稱單片機,其主要精于實時控制,不長于復雜的算法。微控制器實現(xiàn)數(shù)字濾波算法最大問題是微控制器的運行速度慢,尤其是基于51核的微控制器,它一般將外部晶振進行12分頻,器件運行速度大減。若將此類微控制器用于完成FIR、IIR濾波器有一定困難。因此,都采用微控制器配合其它器件來實現(xiàn)濾波器算法,如文獻[10]以可控放大器PGA203為核心實現(xiàn)濾波器;文獻[11]以AT89S52控制程控放大實現(xiàn)濾波;文獻[12-13]以微控制器控制集成開關電容有源濾波器MAX262來實現(xiàn)濾波;上述文獻進一步說明了傳統(tǒng)51微控制器不可能像DSP芯片那樣完成復雜的濾波運算。隨著微控制器技術(shù)的快速發(fā)展,它在運行速度方面有了很大改進。采用流水線指令結(jié)構(gòu),廢除機器周期的概念,指令以時鐘周期為運行單位,平均每一時鐘執(zhí)行1條單周期指令,這方面主要有C8051F系列微控制器。精簡指令集CPU代替復雜指令集CPU,以字作為指令長度單位,可高速執(zhí)行指令,這方面有AVR單片機。采用單時鐘概念,將機器周期從12個縮短至4到6個,這種器件如STC微控制器*。上述微控制器的進展為實現(xiàn)簡單算法濾波器提供了技術(shù)保障。
微控制器進行數(shù)據(jù)采樣時,電路存在相互干擾、電源噪聲、電磁噪聲,模擬輸入信號會疊加干擾信號。所以,微控制器進行數(shù)據(jù)采集時應該盡量減少噪聲信號對數(shù)據(jù)的影響,數(shù)據(jù)采集時的濾波稱為數(shù)據(jù)采集濾波。目前數(shù)據(jù)采集濾波方法主要分為時域處理和頻域處理,單片機簡單濾波是在時域上進行處理的。微控制器實現(xiàn)的簡單濾波算法有限幅濾波、中值濾波、算術(shù)平均濾波、加權(quán)平均濾波、滑動平均濾波,其原理如下:
(1)限幅濾波:該方法能有效克服系統(tǒng)偶然因素引起的脈沖干擾。它的基本原理是根據(jù)經(jīng)驗確定兩次采樣允許的最大偏差值,如果本次采樣值與上次值的差小于等于偏差值,則本次采樣值有效。如果本次采樣值與上次值的差大于偏差值,選用上次值代替本次值。
(2)中值濾波:該方法適合參數(shù)變化緩慢的系統(tǒng)。其原理是連續(xù)N次采樣值按照大小排序,一般N為奇數(shù),取中間值作為本次采樣值。完成此類算法,影響算法速度的是對N個值排序。要使濾波達到預期效果應盡量減少N的大小。
(3)算術(shù)平均濾波:選擇長度N至關重要,過長靈敏度較高,反之,靈敏度低。它的原理是以N個采樣值進行算術(shù)平均,以算術(shù)平均值作為當前采樣值[9]。
(4)加權(quán)平均濾波:它的原理是對連續(xù)N次采樣值分別乘上不同的加權(quán)系數(shù)之后再求加權(quán)平均,加權(quán)系數(shù)一般先小后大,即離當前采樣值的時間越近則權(quán)越大,并以加權(quán)平均值作為當前采樣值。
(5)滑動平均濾波:此方法適合周期性的干擾場合,對周期性干擾有較好的抑制作用。它的原理是連續(xù)采集N個采樣值作為隊列,將每次采樣一個新值作為隊尾,將隊首舍去,并將平均值作為當前采樣值[9]。
上述算法除限幅濾波較簡單外,其它四種濾波方式都有共同特點,即算法占用存儲器較多,相對限幅濾波算法復雜,它們占有的存儲資源和時間資源與采樣次數(shù)N成正比。如采用中值濾波時,長度過大,在排序時占有的時間資源就多。為克服缺點,一方面以連續(xù)N次采樣值作為隊列,當前采樣值作為隊尾并舍去隊首,然后根據(jù)不同算法得到當前值。另一方面N值不必過大,中值濾波和加權(quán)濾波長度為3,算術(shù)平均濾波和滑動平均濾波的長度為4。
硬件設計時主要考慮因素有微控制器選擇、濾波算法選擇實現(xiàn)、濾波類型顯示方式及D/A轉(zhuǎn)換。
(1)微控制器的選擇。簡單濾波器系統(tǒng)以STC12C5A16S2微控制器為核心器件,主要原因在于它是單時鐘/機器周期(1T)器件,指令代碼兼容傳統(tǒng)8051,且速度則快8~12倍。器件自帶10位精度ADC,轉(zhuǎn)換速率達250KPS*,器件組成的系統(tǒng)可以直接對模擬信號進行采樣,可以減少硬件的復雜性。這種微控器工作頻率最高可達35MHz,相當于普通微控器的420MHz,設計時系統(tǒng)的外部時鐘可采用32.768MHz晶振。
(2)濾波算法選擇。設計輕觸按鈕接P3.0實現(xiàn)外部中斷,以供微處理器選擇實現(xiàn)濾波算法。其中接P3.0口的按鍵可以實現(xiàn)外部中斷,其優(yōu)先級別最高,可在中斷服務中設置算法標志參數(shù)。它用于選擇濾波算法的類型有著獨特的優(yōu)勢。
(3)濾波算法顯示。為了讓操作者系統(tǒng)執(zhí)行的濾波具體算法,可用LCD1602實時顯示濾波器類型。其中,P0口可用于LCD1602寫數(shù)據(jù)、指令,程序僅對LCD1602進行寫操作,P0口無需上拉電阻。P4.7-P4.5接 LCD1602的控制端口,其中,P4.7用于寫數(shù)據(jù)或?qū)懼噶羁刂啤4.6用于寫控制,因此寫程序時P4.6口為低電平。P4.5接LCD1602的片選信號端口,其作用是下降沿觸發(fā)時用于鎖存數(shù)據(jù)。
(4)D/A轉(zhuǎn)換。將濾波后的數(shù)字信號進行DAC轉(zhuǎn)換,并用示波器觀察輸出的波形確定算法的效果。硬件系統(tǒng)的DAC可用美信公司的串行D/A轉(zhuǎn)換器件MAX538,它與微控制器的接口簡單,且單一5伏供源,內(nèi)置12位串行緩沖器,輸出為電壓大小。根據(jù)它的工作時序,它的時鐘頻率上限為14 MHz,數(shù)據(jù)更新速率達877kHz[14]。因此,系統(tǒng)采用MAX538能滿足硬件要求。
綜合上述設計要點,設計的硬件系統(tǒng)如圖1所示。
軟件算法流程有著至關重要的作用,系統(tǒng)代碼采用C語言在Keil uVsion2.0集成環(huán)境中進行,為了有序地完成代碼,根據(jù)圖1的硬件設計了系統(tǒng)的算法流程如圖2所示。將系統(tǒng)程序分為前臺部分和后臺部分,其中前臺主要指是在主程序(main)中運行。在主程序主要完成A/D轉(zhuǎn)換初始化、系統(tǒng)初始化、LCD初始化。這三大模塊上電后前臺運行,其作用是完成各種初始化,完畢則等待中斷產(chǎn)生。

圖1 濾波器硬件

圖2 濾波算法流程圖
A/D轉(zhuǎn)換初始化主要完成以下工作:
(1)寫寄存器 P1M1、P1M0將 P1.7口設置為高阻態(tài),僅為輸入。
(2)P1ASF寄存器將 P1.7口置‘1’,設置為模擬功能,注意P1ASF的地址為0x9d不能用位尋址,因此寫成以P1ASF|=0x80。
(3)設置A/D轉(zhuǎn)換控制寄存器ADC_CONTR。即,打開A/D轉(zhuǎn)換電源;選擇A/D轉(zhuǎn)換速度,轉(zhuǎn)換時間設置為90個機器周期完成一次;選擇轉(zhuǎn)換通道。同樣該寄存器不能用位尋址,設置時代碼為ADC_CONTR=0xe7。
系統(tǒng)初始化主要功能為:
(1)通過寫寄存器 P4SW、P4M1、P4M0 將P4.7、P4.6、P4.5置為通用IO準雙向口。
(2)設置AUXR寄存器,T0不進行12分頻以加快濾波節(jié)拍。
(3)設置定時器T0初始值,并開外部中斷0和定時計數(shù)器0中斷,但不啟動定時器T0,待LCD初始化完成后啟動定時計數(shù)器T0工作。
(4)初始濾波類型標志變量,并調(diào)用LCD1602子程序顯示濾波模式。
LCD初始化主要完成LCD1602的初始化工作,包括顯示模式、光標模式等。三個初始化子程序是有先后順序的,調(diào)用順序為先LCD初始化,然后A/D轉(zhuǎn)換初始化,最后系統(tǒng)初始化。
軟件的系統(tǒng)中斷服務為后臺運行,主程序初始化完成用while(1)等待中斷產(chǎn)生。如果有外部中斷時,運行中斷服務程序,根據(jù)濾波類型標志變量值選擇濾波類型。如果沒有外部中斷,系統(tǒng)一直等待定時計數(shù)器T0溢出,因此數(shù)字濾波器處理一次的時間長度是由TL0、TH0、A/D轉(zhuǎn)換時間、濾波子程序運行時間和D/A轉(zhuǎn)換時間決定的,稱這個時間為一拍。在定時計數(shù)器T0的中斷服務程序中,先關閉T0中斷,然后用分支轉(zhuǎn)向根據(jù)濾波類型標志變量值調(diào)用濾波子程序,再調(diào)DA轉(zhuǎn)換子程序,最后開T0中斷。其中,A/D轉(zhuǎn)換子程序查詢標志位完成,并放在濾波子程序中調(diào)用。軟件設計注意以下事項:
(1)中斷服務程序不能過長,盡量簡單。軟、硬件調(diào)試發(fā)現(xiàn),在中斷服務程序中過多調(diào)用子程序,尤其是子程序嵌套調(diào)用容易出問題。
(2)盡量縮短一拍的時間,如,T0設置為1T,A/D轉(zhuǎn)換速度設為最快,濾波子程序盡量簡單。
(3)濾波算法問題,所有A/D轉(zhuǎn)換的數(shù)據(jù)暫存采用全局變量,因此為了減少存儲空間,用一個數(shù)組來存取采樣數(shù)據(jù),并用隊列的形式存儲。
(4)A/D采樣用查詢方式,也是這種處理方式的缺點,這樣增加了一拍的時間,采用中斷方式可以節(jié)約時間,但是程序運行的可控性不好。
(5)寫代碼時注意寄存器是否能用位尋址,如P1M1、P1M0、P1ASF、P4M1、P4M0、P4SW、ADC_CONTR、AUXR。此類特殊寄存器必須先定義不用位尋址方式進行賦值。
系統(tǒng)實驗裝置是由信號源、濾波系統(tǒng)和示波器三大部分組成,具體實驗裝置的實物如圖3所示。為完成實驗,設計并制作了信號源,其原理是采用微控制器和DAC器件直接合成信號。信號源是圖3中的左邊箭頭所指電路板實物,右邊箭頭為微控制器濾波系統(tǒng)實物。信號源主要采用STC12C5410AD微控制器和 TLC5615D/A轉(zhuǎn)換器,其作用是產(chǎn)生所需信號。測試時,將信號接入濾波系統(tǒng),然后測試濾波效果。

圖3 系統(tǒng)實驗裝置
信號源的波形數(shù)據(jù)先用matlab7.1軟件計算出,在仿真波形符合要求的情況下,得到測試波形數(shù)據(jù),再寫入程序的數(shù)據(jù)表格。信號經(jīng)過濾波能達到兩方面的效果,一方面能濾除不需要的頻率成分,另一方面能使信號到達平滑的效果。所以,實驗方案按照以下兩種情形完成。
(1)信號源產(chǎn)生正弦、鋸齒波、方波、三角波。由于信號是查表輸出的,信號的平滑性能不好,可將信號接入濾波系統(tǒng),用示波器觀察濾波輸出,觀察濾波系統(tǒng)輸出的效果。
(2)信號源輸出具有周期脈沖噪聲的信號,濾波系統(tǒng)對這種信號進行采樣、濾波輸出,比較并觀察其濾波效果。
為了具體說明第二種具有噪聲信號的產(chǎn)生方式及效果,采用matlab7.1軟件產(chǎn)生帶有噪聲的信號,將修改好信號數(shù)據(jù)的文件下載至微控制器中。信號源上電后,用示波器觀察得如圖4所示的四種波形,即正弦、鋸齒、方波和三角波。這四種信號都含有周期的脈沖噪聲,在圖4中用箭頭所指的信號。這種情形下的實驗,是為了驗證濾波器能否濾除圖中的周期突發(fā)脈沖。如果按照情形(1)實驗,信號源的波形不含圖4中的周期脈沖。

圖4 帶有噪聲的信號
實驗時是將信號源的輸出信號送入系統(tǒng)濾波并對比五種濾波的效果。按照情況(1)進行實驗,以輸出信號的平滑程度為判斷標準。滑動濾波的效果最好,其次為中值濾波和加權(quán)濾波,效果較差的為限幅濾波。
由于實驗的圖片很多,僅將滑動濾波得到波形以圖5列出。

圖5 滑動平均濾波輸出波形
為測試情形(2)的濾波效果,同樣完成了四種波形的五種濾波方式,這里以正弦信號為例,五種算法得到的信號如圖6所示。圖中每種算法輸出信號,上圖是指濾波器輸入信號,下圖為濾波器輸出信號。其中,從輸出信號的平滑程度來看,從壞到好的排列順序為:限幅、中值、加權(quán)平均、平滑平均、算術(shù)平均。

圖6 帶有噪聲濾波輸出圖
在數(shù)據(jù)采樣中用微控制器實現(xiàn)簡單數(shù)字濾波算法具有系統(tǒng)簡單、易于實現(xiàn),對于直接合成信號的平滑程度而言,采用滑動平均濾波的效果最好。對于周期的突發(fā)脈沖噪聲來說,采用算術(shù)平均輸出的效果較好。采用限幅噪聲濾波輸出的效果不佳。加權(quán)平均濾波要獲得較好的效果,當前采樣值的權(quán)重應該最大。采用微控制器,盡管選用速度較快的器件,但是存在濾波信號不能大于500Hz,這也是微控制器固有的弱點,如要完成更高頻率信號的濾波,可以考慮STM32M3系列器件完成。
*宏晶公司的STC12C5A60S2系列單片機器件手冊
[1]王斌.基于Visual DSP++的無限脈沖響應數(shù)字濾波器(IIR)設計 [J].電子元器件應用,2012,14(3):36-37.
[2]譚家杰.利用零極點設計數(shù)字帶陷濾波器 [J].計算機仿真,2011,28(7):379-381.
[3]鄧婷.基于 Matlab和DSP數(shù)字濾波器的設計與實現(xiàn)[J].科學技術(shù)與工程,2011,11(19):4597-4601.
[4]俞興明,周燕.基于DSP的在線FIR數(shù)字濾波器設計及實現(xiàn) [J].國外電子測量技術(shù),2010,29(5):52-55.
[5]張大為,姜靜,劉迪.基于FPGA的IIR低通數(shù)字濾波器的設計 [J].船電技術(shù),2012,32(2):24-26.
[6]譚家杰,黃三偉,鄒常青.正則有符號系數(shù)FIR濾波器優(yōu)化算法 [J].計算機應用,2011,31(6):1727-1729.
[7]李姮,田克純.一種基于FPGA的分布式FIR數(shù)字濾波器設計 [J].電聲技術(shù),2012,36(10):29-32.
[8]孔陽,武杰,萬娟,等.基于FPGA和MCU的低成本地震信號數(shù)字濾波器設計 [J].核電子學與探測技術(shù),2012,32(1):54-58.
[9]海玉,陳軍,錢獻芬.一種單片機數(shù)據(jù)采集系統(tǒng)的數(shù)字濾波器設計 [J].信息技術(shù),2012(9):175-177.
[10]陳寒青,紀藝娟,丁時棟,等.單片機的可控放大器程控濾波器設計 [J].單片機與嵌入式系統(tǒng)應用,2011(5):63-66.
[11]陳世夏,戚甫峰,丁國臣.基于AT89S52單片機的程控濾波器設計 [J].國外電子測量技術(shù),2010,29(3):39-42.
[12]趙世強,周義健,劉霞.基于單片機控制的程控有源濾波器電路 [J].國外電子元器件,2008(4):42-44.
[13]魏武,蘇波曉,潘彩梅.基于MAX262和單片機的程控濾波器設計 [J].電子元器件應用,2010,12(1):39-44.
[14]胡衛(wèi)華,王冬,謝起成,等.串行D_A轉(zhuǎn)換器MAX538接口技術(shù)及應用 [J].工業(yè)儀表與自動化裝置,2002(3):46-48.