,,,,
(1.上海師范大學 信息與機電工程學院,上海 200234; 2.上海計算機軟件技術開發中心,上海 201114)
STM32F10x系列是ST公司針對工業、醫療和消費類市場推出的基于ARM cortex-M3內核的微控制器,該系列包含五大產品線:STM32F100具有電機控制和CEC功能;STM32F101具有高達1MB的Flash;STM32F102具有USB全速設備功能;STM32F103具有高達1MB的Flash、電機控制、USB和CAN接口;STM32F105/107具有以太網MAC、CAN和USB2.0 OTG.
無論針對工業控制、醫療服務或者消費類領域,傳感器已經成為電子設備中不可缺少的部分,如:工業稱重設備使用的壓阻式壓力傳感器、醫療儀器中常見的心率脈搏傳感器、智能手機中的重力傳感器等.傳感器將各種模擬信號轉換成電壓信號后,需要通過模數轉換器(A/D)將電壓信號轉換成數字信號,然后再輸出到處理器進行相應信號處理,傳感器的信號處理框圖如圖1所示.

圖1 通過傳感器的模擬信號處理框圖
然而,模擬信號極易受到外界干擾,如傳感器未能水平放置,風向、風力大小的影響,日光燈的工頻干擾,甚至是微小的震動,都會對傳感器獲得的信號造成擾動,去除這些干擾最有效、最經濟的方法就是處理器對輸入的數字信號進行信號濾波的去噪預處理.根據濾波器單位脈沖響應的時間特性,濾波器可分為FIR濾波器和IIR濾波器兩類,由于FIR濾波器只包含有限個系數、無輸入反饋,以及結構簡單等特點,使FIR濾波器成為實際應用系統中最常用的濾波器類型.
DSP(數字信號處理器)和FPGA(可編程邏輯門陣列)是實現數字濾波器最常用的處理器,其中DSP適合實現串行的濾波器結構,FPGA適合實現并行的濾波器結構.雖然這兩種處理器具有超強的處理能力,但是價格昂貴,作為傳感器信號的濾波器實現可謂大材小用.濾波運算需要大量的乘法,常用的單片機由于沒有硬件乘法器,實現濾波器需要占用大量的CPU時鐘,這勢必影響系統中其他處理的正常工作.STM32F10x系列微控制器采用RISC結構,并內嵌硬件乘法器以及大量片內外設,同時兼顧了低成本優勢,特別適合于傳感器信號的FIR濾波器實現和數字信號處理.
對長為N的數字濾波器的單位脈沖響應,其傳輸函數為:
(1)
其中ω為數字頻率,Hg(ω)為幅度特性函數,θ(ω)為相位特性函數.
為保證信號的群延時為常數,要求所設計的FIR濾波器是線性相位,即相位特性函數θ(ω)滿足:
θ(ω)=-τω,
(2)
θ(ω)=θ0-τω.
(3)
其中τ為常數,θ0為起始相位,-π≤ω≤π.公式(2)表示第一線性相位,公式(3)為第二線性相位.
為設計線性相位FIR濾波器,經過推導[1]可得,線性相位FIR濾波器的單位脈沖響應,應滿足:
h(n)=h(N-1-n), 0≤n≤N-1 ;
(4)
h(n)=-h(N-1-n), 0≤n≤N-1 .
(5)
其中,h(n)滿足公式(4),則所設計的FIR濾波器是第一線性相位;h(n)滿足公式(5),則所設計的FIR濾波器是第二線性相位.
FIR濾波器設計常用的3種方法是窗函數設計法[1]、頻率取樣法和優化設計法,其中使用最廣泛是窗函數設計法,常用的窗函數[1]有矩形窗、海明窗、漢寧窗、萊克曼窗和凱塞-貝塞爾窗,其中從頻域特性看,萊克曼窗與前幾個窗函數相比,主瓣寬度窄、旁瓣衰減快;與凱塞-貝塞爾窗相比,雖然凱塞-貝塞爾窗是一種可調節的窗函數,但是在提高頻域特性的同時,其時域的幅值較難整型化,同時也會使得過渡帶變寬,綜合工業控制領域對濾波的需求,采用布萊克曼窗(blackman),通過matlab軟件設計得到濾波器的單位脈沖響應h(n).
FIR濾波器的基本結構主要有:直接型FIR、級聯型FIR、線性相位型FIR、頻率取樣型FIR等結構,其中直接型FIR濾波器結構為串行運算結構[2],較符合微控制器按照程序順序執行的特點.直接型FIR濾波器結構[3]如圖2所示,其結構就是描述了信號xn經過系統的卷積運算.

圖2 直接型FIR濾波器結構
圖2中,xn…xn-N表示輸入信號,yn表示第n時刻的輸出信號,z-1表示延時1個單位時間,c0,…,cN-1表示相應輸入信號乘以相應的系數.
ST公司在推出STM32F10x系列MCU的同時,推出了STM32F10x數字信號處理庫,其中FIR濾波器的實現函數如表1所示.

表1 STM32F10x DSP library中FIR濾波器函數原型
其中COFFS結構體的定義如下:

其中,h為濾波器系數,nh為濾波器階次.
這里需要注意,fir_16by16_stm32函數并不能實現濾波器設計,函數只是將信號x與系數p以圖2方式(直接型FIR濾波器結構)運算后得到一個運算結果,實際是完成了信號x與系數p的線性卷積運算[1],如公式(6)所示:

(6)
其中,x、h為2個信號,x={x0,x1,...,xL-1},h={h0,h1,...,hM-1},卷積結果y的長度為M+L-1.
通過分析fir_16by16_stm32函數,調用函數得到的運算結果如公式(7)所示:

(7)
其中,N即為函數原形中的第4個參數(表1).
因此,為盡可能節約STM32F10x芯片內的內存資源,同時減少運算耗時,在編程過程的數據定義時,應滿足公式(8):
N=L-M.
(8)
即濾波結果的數組長度等于信號數組長度與濾波系數數組個數的差.
另外值得注意的是,STM32F10x系列微控制器只支持整數運算,浮點數的運算通過編譯將轉化為整數運算,但運算效率大大降低.同時為了使用fir_16by16_stm32函數,通過表1,可以看到信號數組x及濾波器數組h的數據類型為short型,即數值范圍在-215~+215-1,因此,信號xi應滿足:
-215≤xi≤215-1 .
(9)
通過matlab軟件設計后的濾波器系數以歸一化的數值方式得到,即:
(10)
因此,在使用fir_16by16_stm32函數時并不能直接使用matlab軟件設計的濾波器系數,而必須經過數值變換,如圖3所示.數值放大過程中,考慮到最后需要恢復原數值范圍,建議放大倍數為2n,n為整數,這可以使后期數據恢復時,只需要進行移位操作,相比于除法運算,運算量大大降低.無論使用數值擴大以后采用四舍五入、向上取整或者向下取整,最后去除小數的同時依然會導致一些誤差,因此最后需要對整型化的系數作微調.

圖3 濾波器系數的數值變化框圖
從表1可以看到,濾波結果數組的數據類型為int型,即32位有符號整型,所以應保證濾波結果的每個數值的絕對值應小于231,因此按照公式11,可推導出數值放大倍數(A)的限制:
(11)
其中,N為濾波器階次,max(xi)表示信號各系數的最大值.當然,在對系數進行放大的同時,應該考慮應用的精度需求.
采用matlab軟件為設計工具,濾波器設計采用窗函數法,采用布萊克曼窗,濾波器點數取64點.設信號采樣率為256樣值/s,濾波器截至頻率為10Hz,濾波器時頻域特性如圖4所示:

圖4 截至頻率為10Hz的FIR濾波器時頻特性

表2 濾波器放大倍數實驗結果
為使用STM32F10x數字信號處理庫,利用matlab設計的濾波器的系數需要進行變換,為保證每個系數的可見性,即通過數值變換后最小系數至少為0或1,按照濾波器階次,通過實驗得到各階次濾波器的放大倍數,如表2所示.
表2的實驗結果只是考慮了系數整數化以后的可見性,同時考慮公式(11)時,可以看到當濾波器點數為64點或128點時,如果信號的數值過大就會造成運算結果溢出,即超出表1中濾波器輸出數組的數據類型.
實驗所用平臺采用STM32F107為主處理器的評估板,板上配有LCD顯示屏、網口、wifi模塊、zigbee模塊、傳感器等模塊,完全能夠滿足測試需求.
假設采樣率為256樣點/s,以5 Hz和50 Hz組成原始信號,如圖6所示.

圖6 被測信號時域及頻域特性
設計10 Hz的濾波器,并整型化后的結果如圖7所示.

圖7 整型化后的10Hz FIR濾波器
對圖6所示原始信號進行濾波后的結果如圖8所示.

圖8 原始信號經過濾波器后的結果
圖6的原始信號經過如圖7的濾波器后,50 Hz的噪音信號已經被完全濾除,圖8中的時域信號已經可以被認為是5Hz的單頻信號,達到預期的FIR濾波器的效果.

表3 濾波器性能測試結果
本節主要分析基于STM32F10x的時間特性,測試平臺依然采用STM32F107VC為主處理器,并且工作頻率設置在72 MHz.假設信號采樣率為256樣點/s,以表2所示階次濾波器為測試對象,以測試各階濾波器濾波1 s采樣信號(即256點信號)所耗時間,如表3所示.
從表3實驗結果看,256階濾波器對128點信號的濾波時間僅為1.5 ms,濾波效率完全能夠滿足通常濾波器的需求.這里需要注意的是,64階和128階測試過程中,為了使濾波結果真實有效(即數據在運算過程中不發生越界),信號值控制在210以內,因此完全夠滿足常用的8位或10位,即STM32F10x平臺的片內A/D能夠使用128階濾波器.
基于STM32F10x平臺,作者提出了FIR濾波器的設計與實現方法,包括濾波器在matlab平臺下的設計,及在STM32F10x平臺利用STM32F10x DSP Lib進行濾波器實現的整套方案,通過測試表明,濾波器的濾波結果與仿真要求一致,在72 MHz主頻下,以256/s采樣率,采用128階FIR濾波器對1 s數據的濾波器的時間僅為1.5 ms,完全滿足通常的濾波時間需求.
參考文獻:
[1] 李莉.數字信號處理原理和算法實現[M].北京:清華大學出版社,2010.
[2] 章曉眉,趙冬娥,馮彥君,等.基于FPGA的FIR濾波器設計[J].電子質量,2011(9):29-41.
[3] 戴曜澤,王春雷,朱智強.基于FPGA高階FIR濾波器的實現[J].現代電子技術,2012,35(8):111-113.