STM32F4關於AD取樣時資料不穩定時“消抖”處理的幾種方法
STM32在利用AD採集時,如果是採集的感測器資料或其他傳入的資料的靈敏度相當高,或者因為其他原因導致資料不穩定,AD取樣採集進去後,資料抖動明顯,影響後期的資料利用,就需要對波動資料進行簡單的處理,以下是慕塵提供的可供嘗試的思路。
一、平均值濾波
最為簡單且容易想到的就是平均值濾波,多次取樣資料,然後取平均值,比如取樣一組16包資料,對16包資料取平均,預設此時結果有效;但是均值濾波會將毛刺和錯誤的值也計算其中,同時,如果資料的波動不均勻,也會導致結果不穩定;再此基礎上,我們可以進一步考慮二次均值濾波,對多組取樣資料取平均,然後再對取得的平均值再次進行平均,最後得到結果。
二、四捨五入
如果是對取樣資料的精度要求不是很嚴格或者取樣的資料在某種程度上面滿足需要,就可以採取這種方法,以丟失部分精度來換取資料的穩定,便於後期處理。至於“四捨五入”,倒不一定非得是真的要按照四捨五入,比如,如果一組資料是3.23 4.45 5.78 6.88 7.01 8.34,按照需要可以進行整數位的四捨五入,或者小數十分位的四捨五入(可先將十分位資料倍乘十,再進行取整),以此類推;但是ha也可以按照一定的範圍來設定四捨五入,比如上面這組資料,不一定非得取整四捨五入,可以選取一定範圍,認為在這個範圍裡面的數就為有效,我們可以認為整數附近加減0.3的資料均為有效,這樣就可以篩選資料,可能這個方法適用於波動跳躍稍微大一些的情況。
三、中值濾波
多次取樣資料得到一組樣本,然後對取樣資料進行排列,取這組資料的中位值,即可;但是中值濾波會比較受到極值的干擾,兩端的波動會干擾最終資料的穩定,我們可以在中值濾波的基礎上再進一步處理,前面已經得到了一組取樣資料,我們可以取多組取樣資料,然後同時對多組取樣資料排列後取中位值,如果最終的資料結果被要求在某一範圍內,那麼我們可以設定這多組資料的中位值如果當中存在n次處於有效範圍內,就認為此次中值有效,否則重新進行取樣取值;如果最終結果沒有期望範圍,就可以直接再對這些中值排列取中位值,進行二次中值濾波,但是這樣會對取樣速率有一定要求。
四、方差
進行多組資料取樣,然後對每一組的資料進行方差處理,最後得到最小方差的一組資料,可以認為這組資料的波動最小,然後再取這組最小方差的資料取平均,得到結果;
小結:上述方法只是可供參考的簡單的,在實際面對AD取樣時資料抖動時的處理,當然還會存在更多更有效的濾波處理方法。可以想見的是上述方法都存在一定的缺陷,需要針對實際的情況來採取恰當的方法,比如上述的二次均值濾波,二次中值濾波,其實認真一看不過是加大采樣率擴大資料樣本的結果而已。
原創宣告:慕塵執筆,轉載請註明出處。