牛夢毫,周前柏,師璟桐,康穎,楊光
(航空工業(yè)西安航空計算技術研究所,陜西西安,710065)
模擬量采集功能是嵌入式系統(tǒng)中至關重要的功能,以最具代表性的航空系統(tǒng)為例,航空系統(tǒng)的各子系統(tǒng)例如航電系統(tǒng)、飛控系統(tǒng)、機電系統(tǒng)等通常包括大量的模擬信號,中央管理設備根據(jù)這些模擬量轉換后的數(shù)字信號產(chǎn)生特定的控制輸出來實現(xiàn)各個系統(tǒng)不同的控制功能,模擬量采集的精度和可靠性也影響整個機載系統(tǒng)運行的穩(wěn)定性和可靠性[1]。在嵌入式系統(tǒng)中模擬量采集易受嵌入式系統(tǒng)內部或外部噪聲干擾,產(chǎn)生震蕩,失真等問題,這極大地影響了嵌入式產(chǎn)品功能以及整個交聯(lián)系統(tǒng)的魯棒性。
目前對此問題的解決方法主要為在產(chǎn)品的硬件設計中加入濾波器[2],加強電磁兼容性設計[3]等,此類方法雖然可以有效濾除部分噪音干擾,但對于小成本嵌入式產(chǎn)品而言這類方法生產(chǎn)成本過高;還有一些方法在產(chǎn)品的軟件設計中加入插值濾波[4],平滑濾波[5]等,此類方法雖然可以有效濾除部分噪音干擾,但也僅適用部分系統(tǒng)平臺;本文設計了一種基于STM32 單片機運行的模擬量采集濾波算法,采用較小的成本進行噪聲濾除。實驗結果表明,本文提出的算法能夠較好地濾除噪聲干擾,提升了模擬量采集的準確率。
在數(shù)字信號處理領域,傅里葉變換具有非常重要的意義,它可以將復雜的數(shù)字信號分解為若干簡單數(shù)字信號,從而方便選擇出有用的信號。
傅立葉原理表明:任何連續(xù)測量的時序或信號,都可以表示為不同頻率的正弦波信號的無限疊加。而根據(jù)該原理創(chuàng)立的傅立葉變換算法利用直接測量到的原始信號,以累加方式來計算該信號中不同正弦波信號的頻率、振幅和相位。
傅里葉變換對于在時空中連續(xù)的模擬量信號是適用的,但是此次主要處理對象是已經(jīng)經(jīng)過A/D 轉換后的模擬量信號并且存儲在主存的數(shù)字信號,而對于離散信號的變換只有離散傅立葉變換(DFT)才能被適用,對于計算機來說只有離散的和有限長度的數(shù)據(jù)才能被處理,傅里葉變換和離散傅里葉變換的區(qū)別展示如圖1 所示??焖俑道锶~變換(FFT)也只不過是離散傅立葉變換(DFT)的一種快速的算法。
圖1 傅里葉變換與離散傅里葉變換對比
數(shù)字計算機采樣得到的數(shù)字信號,可以進行FFT 變換。N 個采樣點,經(jīng)過FFT 之后,可以得到N 個點的FFT 結果。為了方便進行FFT 運算,通常N 取2 的整數(shù)次方。
快速傅里葉變換算法預設采樣頻率為Fs,信號頻率F,采樣點數(shù)為N,經(jīng)過快速傅里葉變換算法的變換結果就是一個為N 點的復數(shù)向量組,其中返回的每一個點就對應著一個頻率點大小,該點的模值即為該頻率值下的幅度特性。
快速傅里葉變換算法假設原始信號的峰值為A,那么返回結果除了第一個點直流分量之外的每個點的模值就是A的N/2 倍。每個點的相位可以認為是在該頻率下的信號的相位。第一個點表示直流分量,即表達該點頻率為零,而第N+1 個點則表示采樣頻率Fs,這中間被N-1 個點平均分成N 等份,每個點的頻率依次增加。假設某點n 所表示的頻率為:Fn=(n-1)*Fs/N。Fn 所能分辨到頻率為Fs/N,如果采樣頻率Fs 為512Hz,采樣點數(shù)為512 點,則可以分辨到1Hz。512Hz 的采樣率采樣512 點,剛好是1 秒,也就是說,采樣1 秒時間的信號并做FFT,則結果可以分析精確到1Hz,如果采樣5 秒時間的信號并做FFT,則結果可以分析精確到0.2Hz。要提高頻率分辨率,則必須增加采樣點數(shù),也即采樣時間。頻率分辨率和采樣時間是倒數(shù)關系。
上述大致介紹了快速傅里葉變換的思想與使用,本文將使用快速傅里葉變換與其逆變換作為本文所設計軟件算法的主要組件,以及分析軟件濾波與硬件濾波相比的優(yōu)勢與不足。
本文所提出的模擬量采集濾波算法運行在stm32 型號的單片機上,是基于經(jīng)典的模擬量采集電路設計的,該電路包括了用于采集模擬量輸入的信號調理電路,用于采集并將模擬量轉換為數(shù)字信號的A/D 轉換芯片,以及用于控制以及與A/D 轉換芯片通信的FPGA 芯片。為了能夠較好地驗證該軟件算法的實際效果,系統(tǒng)硬件電路實現(xiàn)減少了部分濾波措施,實驗所用系統(tǒng)的結構圖如圖2 所示。
圖2 系統(tǒng)結構圖
該嵌入式系統(tǒng)中為了避免成本過高,體積過大,并以實現(xiàn)小型化、輕量化的設計思路為指導,多路開關電路可根據(jù)模擬量采集數(shù)量,PCB 面積選擇合適模擬開關電路,此處系統(tǒng)設計選擇4 路多路開關,通過FPGA 邏輯控制切換通道采集,沒有一對一采集設計需求。采集模擬量采集信號首先輸入進A/D 轉換芯片,并由A/D 轉換芯片轉換為數(shù)字信號輸入給FPGA,暫存在FPGA 的寄存器堆中,最后由stm32芯片周期性讀取并記錄。
考慮到系統(tǒng)本身的噪聲輸入,算法優(yōu)先對該模擬量的模擬地進行測試,作為后續(xù)模擬量輸入采集的比較基準。本文設計模擬量采集濾波算法由STM32 芯片執(zhí)行,算法流程如圖3 所示。
圖3 算法流程圖
(1)在系統(tǒng)對應模擬量接口空載情況下,STM32 芯片發(fā)送指令給FPGA,采樣頻率為1024Hz,采集1024 個模擬量樣本點,并對采集到結果進行快速傅里葉變換,并將采樣結果記為Zx。
(2)在系統(tǒng)對應模擬量接口負載情況下,STM32 芯片發(fā)送指令給FPGA,采樣頻率為1024Hz,采集1024 個模擬量樣本點,并對采集到結果進行快速傅里葉變換,并將采樣結果記為Zy。
(3)對最終量Zx-Zy 進行快速傅里葉逆變換,得到重構后的樣本值,即為濾波后的采樣信號,并對其滑動濾波后求取平均值,作為此次模擬量采集參考值。
其中該算法中使用的滑動濾波算法使用滑動窗口大小為64,步長為32,其該算法流程如下:
(1)對采集到的1024 個模擬量按照時序記錄并選擇64 個樣本點求取平均值,并依時序向前滑動16 個樣本點的步長,重復此操作,直到無法向前滑動,將該步驟得到結果記為A1;
(2)對A1 中64 個經(jīng)過初步濾波的樣本點選擇8 個樣本點求取平均值,并依時序向前滑動8 個樣本點的步長,重復此操作,直到無法向前滑動,將該步驟得到結果記為A2;
(3)對A2 求取平均值,所得到的結果即為此次滑動濾波結果。
選擇滑動濾波算法由于滑動濾波能夠更有效地濾除尖峰信號,其示意圖如圖4所示。
圖4 滑動濾波示意圖
關于該算法中一些關鍵參數(shù)的選擇問題進行說明:選擇STM32 的采樣頻率1024Hz,采樣點1024 個主要為了快速傅里葉變換由時域信號轉換為頻域信號后分辨率為1Hz,這樣可以讓快速傅里葉變換與快速傅里葉逆變換的內存開銷在4MB 級別,可以適配較多嵌入式系統(tǒng)的內存容量,而且在MHz 級別的主頻單片機上可以將響應時間控制在1s~5s 之間,不會導致過長的系統(tǒng)延遲;滑動濾波算法中滑動窗口64 和步長16,滑動濾波算法本質是對該時間序列進行一維卷積操作,窗口大小即為卷積核的大小,如果卷積核尺寸過小則滑動濾波會退化為求取平均值濾波,一般根據(jù)經(jīng)驗公式而言,假設序列長度為N,則滑動窗口選擇在N1/2到2 倍N1/2之間。
為了驗證該濾波算法的有效性,搭建了具有復雜電磁干擾的系統(tǒng)運行環(huán)境,并選擇以下兩種方法作為參考對照:
(1)STM32 芯片對FPGA 采集的數(shù)據(jù)不做任何處理,直接作為此次模擬量采集的參考值,下文簡稱方法a;
(2)STM32 芯片發(fā)送指令給FPGA,采樣頻率為1024Hz,采集1024 個模擬量樣本點,但僅對這些樣本點做平滑濾波后取平均值,作為此次模擬量采集的參考值,下文簡稱方法b。
特此說明,本文所提出的模擬量狹義指代的是電壓輸入,電流輸入,電阻輸入,頻率輸入等模擬量信號,而所有模擬量輸入信號在硬件輸入形式的本質只有兩種:即電壓輸入與電流輸入,因此本文只選取了最具代表性的電壓輸入與電流輸入作為此次模擬量濾波實驗的驗證項目。
電壓信號與電流信號作為最基本兩種模擬量信號,本質上是電路中的電磁場信號的變換,所以任何系統(tǒng)內部或外部的電磁場擾動都可能會對這兩種模擬量信號產(chǎn)生干擾,但是一般情況下這些噪聲相對于電路系統(tǒng)中的基準電壓都非常小,基本可以忽略不計。但是如果系統(tǒng)外部存在一個強電磁干擾源,例如大功率用電設備,就可能會對系統(tǒng)的輸入接口上產(chǎn)生一個較強擾動,從而影響該輸入電路的正常工作。本文在設計驗證實驗時反向利用了此特點,方法即為將該嵌入式系統(tǒng)的模擬量輸入接口從嵌入式系統(tǒng)的引腳引出,另一端連接一個微型天線結構的銅制導體,這些端口可以將附近環(huán)境中的電磁擾動以較大功率傳輸?shù)角度胧较到y(tǒng)的內置輸入接口電路上;而后本文將實驗環(huán)境選擇在有8 臺200W 以上的大功率用電設備周圍,用這些大型設備的關斷來模擬外部電磁干擾的強度。并且為了模擬電磁干擾信號的隨機性,會選擇在實驗中隨機開啟或關斷一些設備,制造一些電磁擾動的尖峰,來觀察本文所設計的模擬量濾波算法是否具有魯棒性。
實驗選擇0V 電壓,5V 電壓,0A 電流,2A 電流作為4路模擬量輸入信號,負載端為恒流恒壓源,實驗記錄5 次模擬量采集結果,實驗結果如表1 所示。
表1 實驗結果表
從實驗結果可以推知,本文所提出的濾波算法能夠有效濾除噪聲尖峰,以及噪聲的直流分量;而且對比方法b,該算法能夠更好避免模擬量超差問題。
本次實驗雖然驗證了本文所提出的模擬量采集濾波算法相較于平滑濾波算法能夠更好的濾除噪音,但依然存在對噪音尖峰超差的問題,這也從一定層面反映了僅依靠軟件濾波的局限性,在對于較大的尖峰,浪涌等噪聲信號的濾波上一般硬件濾波具有更明顯的效果,所以為了追求更強的安全性與可靠性,未來應該追求軟硬件有機結合的濾波方式,采取一定體系化,系統(tǒng)化的濾波設計,應該作為此類工作將來的一個重要方向。
本文提出了一種基于STM32 單片機的模擬量采集濾波算法,該算法雖然在一定程度解決了模擬量輸入采集的精度問題,但是該算法依然存在很多改進的空間。從時間復雜度和空間復雜度來看,方法a 的時間復雜度為O(1),空間復雜度為O(1);方法b 的時間復雜度為O(n),空間復雜度為O(n);本文所提出算法的時間復雜度為O(n2),空間復雜度為O(n2),如果為了獲得更好的濾波效果而將n 值取得過大,將會極大地占用嵌入式系統(tǒng)的內存資源,并且會對系統(tǒng)響應的實時性造成影響。未來工作的主要方向就是對該算法空間復雜度與時間復雜度的優(yōu)化。