|
幾天前測試了一下四軸的AD無極調(diào)速性能,雖說是用上了高精度電位器,但是效果還是不理想,電機(jī)還是有過沖的感覺。和以前用普通電位器的調(diào)速效果相比沒有什么改善。nxp,白瞎了老子38元人民幣。造成電機(jī)過沖的原因是采集到的AD轉(zhuǎn)換值跳變,于是借鑒了液晶觸摸屏的觸點(diǎn)校正原理,對采集的AD值進(jìn)行軟件濾波處理,通過程序數(shù)字濾波處理,飛行器電位器調(diào)速效果有了非常大的改善,我是滿意了。所以說,硬件的不足可以通過軟件來補(bǔ)充解決。反過來,軟件的不足可以通過硬件來彌補(bǔ),很顯然軟件模擬,仿真更經(jīng)濟(jì)。
說到數(shù)字濾波技術(shù),最近看到了一篇非常好的文章《單片機(jī)數(shù)字濾波算法研究》。好久沒有看到這么好的文章了,正是因?yàn)樽x了這篇文章受到啟示才解決了四軸的無極調(diào)速問題,F(xiàn)在裝逼一下,將其精華說一下。將其貼出來,閑來無事就可以看看。相信一定會有收獲。
本文以51 系列單片機(jī)為背景,針對電子系統(tǒng)中經(jīng)常出現(xiàn)的隨機(jī)干擾,介紹了幾種使用較為普遍的克服隨機(jī)干擾信號的單片機(jī)數(shù)字濾波算法。同時(shí)對這幾種算法進(jìn)行了比較,并指出了每一種算法的具體適用范圍和注意事項(xiàng)。
1, 在單片機(jī)應(yīng)用中經(jīng)常需要對輸入的信號進(jìn)行處理,當(dāng)由于存在隨機(jī)干擾使被測信號中混入了無用的成分時(shí),可以采用濾波器濾掉信號中的無用成分,從而提高信號質(zhì)量。模擬濾波器在其低頻和甚低頻時(shí)實(shí)現(xiàn)是比較困難的,而數(shù)字濾波器是不存在這些問題的。它具有精度高、高可靠性和高穩(wěn)定性的特點(diǎn),因此在單片機(jī)應(yīng)用系統(tǒng)中被廣泛用于克服隨機(jī)誤差。采用數(shù)字濾波算法克服隨機(jī)誤差主要有如下優(yōu)點(diǎn):
(1) 數(shù)字濾波是由軟件程序?qū)崿F(xiàn)的,不需要硬件,因此不存在阻抗匹配的問題。
(2) 對于多路信號輸入通道,可以共用一個(gè)軟件“濾波器”,從而降低儀表的設(shè)計(jì)成本。
(3) 只要只當(dāng)改變?yōu)V波器程序或元算參數(shù),就能方便的改變?yōu)V波特性,這對于低頻脈沖干擾和隨機(jī)噪聲的克服特別有效。
2 算法介紹:
為便于以下的程序書寫方便,這里做一個(gè)假設(shè):假定從8 位AD 中讀取數(shù)據(jù)(如果是更高位的AD 可定義數(shù)據(jù)類型為int) 。
1 ) 一階滯后濾波法:
硬件濾波電路中最常用的是一階慣性RC 模擬低通濾波器,當(dāng)采用這種模擬濾波器來抑制低頻干擾時(shí),要求濾波器有較大的時(shí)間常數(shù)和高精度的RC網(wǎng)絡(luò),增大時(shí)間常數(shù)有求增大R 值,其漏電流也隨之增大,從而降低了濾波效果。而采用數(shù)字濾波算法來實(shí)現(xiàn)動態(tài)的RC 濾波,則能很好的克服上述模擬濾波器的缺點(diǎn)。在模擬常數(shù)要求較大的場合這種方法顯得更為實(shí)用,一階慣性濾波算法對于周期干擾具有良好的抑制作用,其不足之處是帶來了相位滯后,導(dǎo)致靈敏度低。同時(shí)它不能濾除頻率高于采樣頻率二分之一(稱為奈奎斯特頻率) 的干擾信號。例如采樣頻率為100Hz ,則它不能濾除50Hz 以上的干擾信號。對于高于奈奎斯特頻率的干擾信號,應(yīng)該采用模擬濾波器。
2) 限副濾波法:
由于單片機(jī)系統(tǒng)中可能存在隨機(jī)脈沖干擾,或由于變送器不可靠而將脈沖干擾引入輸入端,從而造成測量信號的嚴(yán)重失真。對于這種隨機(jī)干擾,限副濾波是一種有效的方法。其基本方法是比較相鄰( n 和n - 1 時(shí)刻的兩個(gè)采樣值yn 和yn - 1。然后根據(jù)經(jīng)驗(yàn)確定兩次采樣允許的最大偏差。如果兩次采樣值yn 和yn - 1 的差值超過了所允許的最大偏差范圍,則認(rèn)為發(fā)生可隨機(jī)干擾,并認(rèn)為后一次采樣值
yn 為非法值,應(yīng)予刪除,刪除yn 后,可用yn - 1 代替yn。若未超過所允許的最大偏差范圍,則認(rèn)為本次采樣值有效。
3 ) 中位值濾波法:
中位值濾波法是對某一被測參數(shù)連續(xù)采樣n 次(一般n 取奇數(shù)) ,然后再把采樣值按大小排列,取中間值為本次采樣值。中位值濾波法能有效克服偶然因素引起的波動或采樣不穩(wěn)定引起的誤碼等脈沖干擾。對溫度、液位等緩慢變化的被測參數(shù)用此法能收到良好的濾波效果,但是對于流量壓力等快速變化的參數(shù)一般不宜采用中位值濾波法。
4) 算術(shù)平均濾波法:
算術(shù)平均濾波法適用于對一般的具有隨機(jī)干擾的信號進(jìn)行濾波。這種信號的特點(diǎn)是信號本身在某一數(shù)值范圍附近上下波動,如測量流量、液位時(shí)經(jīng)常遇到這種情況。算術(shù)平均濾波法是要按輸入的N 個(gè)采樣數(shù)據(jù),尋找這樣一個(gè)Y ,使得Y 與各個(gè)采樣值之間的偏差的平方和最小。
在編寫算術(shù)平均濾波法程序時(shí)嚴(yán)格注意兩點(diǎn):一是對于定時(shí)測量,為了減小數(shù)據(jù)的存儲容量,可對測得的值直接進(jìn)行計(jì)算,但由于某些應(yīng)用場合,為了加快數(shù)據(jù)測量的速度,可采用先測量數(shù)據(jù),并存放在存儲器中,測完N 點(diǎn)后,再對N 個(gè)數(shù)據(jù)進(jìn)行平均值計(jì)算。二是選取適當(dāng)?shù)臄?shù)據(jù)格式,也就是說采用定點(diǎn)數(shù)還是采用浮點(diǎn)數(shù)。采用浮點(diǎn)數(shù)計(jì)算比較方便,但計(jì)算時(shí)間較長,采用定點(diǎn)數(shù)可加快計(jì)算速度,但必須考慮累加時(shí)是否產(chǎn)生溢出。例如數(shù)據(jù)為14 位二進(jìn)制定點(diǎn)數(shù)時(shí),采用雙字節(jié)運(yùn)算,當(dāng)N > 4 時(shí),就可能產(chǎn)生溢出。
5) 遞推平均濾波法(又稱滑動平均值濾波法):
上面介紹的算術(shù)平均值濾波,每計(jì)算一次數(shù)據(jù),需要測量N 次。對于測量速度較慢或要求計(jì)算速度較高的實(shí)時(shí)系統(tǒng),該方法是無法使用的。例如某ADC 芯片的轉(zhuǎn)換速率為每秒鐘10 次,而要求每秒輸入4 次數(shù)據(jù)時(shí),則不能大于2。下面介紹一種只需要進(jìn)行一次測量,就能得到一個(gè)新的算術(shù)平均值的方法,即滑動平均值濾波法。滑動平均值濾波法采用隊(duì)列作為測量數(shù)據(jù)存儲器,設(shè)隊(duì)列的長度為N ,每進(jìn)行一次測量,把測量結(jié)
果放于隊(duì)尾,而扔掉原來隊(duì)首的一個(gè)數(shù)據(jù),這樣在隊(duì)列中始終就有N 個(gè)“最新”的數(shù)據(jù)。當(dāng)計(jì)算平均值時(shí),只要把隊(duì)列中的N 個(gè)數(shù)據(jù)進(jìn)行算數(shù)平均,就可得到新的算數(shù)平均值。這樣每進(jìn)行一次測量,就可得到一個(gè)新的算術(shù)平均值;瑒悠骄禐V波法中的隊(duì)列一般采用循環(huán)隊(duì)列來實(shí)現(xiàn)。
6 ) 加權(quán)滑動平均濾波法:
在算術(shù)平均濾波和滑動平均濾波法中,N 次采樣值在輸出結(jié)果中的比重是均等的,即1PN ,用這樣的濾波算法,對于時(shí)變信號會引入滯后,N 越大,滯后越嚴(yán)重。為了增加新的采樣數(shù)據(jù)在滑動平均濾波法中的比重,以提高系統(tǒng)對當(dāng)前采樣值中多受干擾的靈敏度,可以采用加權(quán)滑動平均濾波法。實(shí)質(zhì)上它是前面介紹的滑動平均濾波算法一種改進(jìn),即對不同時(shí)刻的數(shù)據(jù)加以不同的權(quán),通常越接近現(xiàn)時(shí)刻的數(shù)據(jù),權(quán)取得越大。加權(quán)滑動平均濾波算法適用于由較大純滯后時(shí)間常數(shù)的對象和采樣周期較短的系統(tǒng),而對于純滯后時(shí)間常數(shù)較小,采樣周期較長,變化緩慢的信號,則不能迅速反映系統(tǒng)當(dāng)前所受干擾的嚴(yán)重程度,濾波效果較差。
7 ) 復(fù)合濾波法:
單片機(jī)系統(tǒng)在實(shí)際應(yīng)用中,所受到的隨機(jī)干擾往往不是單一的,又是既要消除脈沖干擾的影響,又要做數(shù)據(jù)平滑處理。因此,在實(shí)際應(yīng)用中常常把前面介紹的兩種以上的方法結(jié)合起來使用,形成所謂的的復(fù)合濾波。例如,防脈沖擾動平均值濾波算法就是一種實(shí)例。這種算法的特點(diǎn)是先用中位值濾波算法濾掉采樣值中的脈沖干擾,然后把剩下的各個(gè)采樣值再進(jìn)行滑動平均濾波。由于這種濾波算法兼容了中位值平均濾波算法和滑動平均濾波算法的優(yōu)點(diǎn),所以無論是對緩慢變化的過程變量還是對快速變化的過程變量都能起到較好的濾波效果。
本文介紹了幾種使用較為普遍的克服隨機(jī)干擾的軟件算法,但是在一個(gè)具體的單片機(jī)系統(tǒng)中究竟應(yīng)該選用哪種算法,還取決于系統(tǒng)的使用場合以及在過程中所含有的隨機(jī)干擾情況。本文只說了每種數(shù)字濾波的思路,具體代碼比較簡單就不貼出來了。
如果通過一篇文章就能解決實(shí)際問題,那這樣的文章就是精品。本文精華采摘自二炮工程學(xué)院的研究生論文,本人加入了一些自己的理解。程序參考:http://www.torrancerestoration.com/bbs/dpj-30985-1.html
|
|