電子發燒友網 > 模擬技術 > 正文

數字濾波算法克服隨機干擾的誤差具有哪些優點?

2020年07月08日 11:13 ? 次閱讀

單片機主要作用是控制外圍的器件,并實現一定的通信和數據處理。但在某些特定場合,不可避免地要用到數學運算,盡管單片機并不擅長實現算法和進行復雜的運算。下面主要是介紹如何用單片機實現數字濾波。

在單片機進行數據采集時,會遇到數據的隨機誤差,隨機誤差是由隨機干擾引起的,其特點是在相同條件下測量同一量時,其大小和符號會現無規則的變化而無法預測,但多次測量的結果符合統計規律。為克服隨機干擾引起的誤差,硬件上可采用濾波技術,軟件上可采用軟件算法實現數字濾波。濾波算法往往是系統測控算法的一個重要組成部分,實時性很強。

采用數字濾波算法克服隨機干擾的誤差具有以下優點:

1、數字濾波無需其他的硬件成本,只用一個計算過程,可靠性高,不存在阻抗匹配問題。尤其是數字濾波可以對頻率很低的信號進行濾波,這是模擬濾波器做不到的。

2、數字濾波使用軟件算法實現,多輸入通道可共用一個濾波程序,降低系統開支。

3、只要適當改變濾波器的濾波程序或運算,就能方便地改變其濾波特性,這對于濾除低頻干擾和隨機信號會有較大的效果。

4、在單片機系統中常用的濾波算法有限幅濾波法、中值濾波法、算術平均濾波法、加權平均濾波法、滑動平均濾波等。

(1)限幅濾波算法

該運算的過程中將兩次相鄰的采樣相減,求出其增量,然后將增量的絕對值,與兩次采樣允許的最大差值A進行比較。A的大小由被測對象的具體情況而定,如果小于或等于允許的最大差值,則本次采樣有效;否則取上次采樣值作為本次數據的樣本。

算法的程序代碼如下:

#defineA //允許的最大差值chardata; //上一次的數據char filter(){chardatanew; //新數據變量datanew=get_data(); //獲得新數據變量if((datanew-data)》A||(data-datanew》A))return data;elsereturndatanew;}

說明:限幅濾波法主要用于處理變化較為緩慢的數據,如溫度、物體的位置等。使用時,關鍵要選取合適的門限制A。通常這可由經驗數據獲得,必要時可通過實驗得到。

(2)中值濾波算法

該運算的過程是對某一參數連續采樣N次(N一般為奇數),然后把N次采樣的值按從小到大排列,再取中間值作為本次采樣值,整個過程實際上是一個序列排序的過程。

算法的程序代碼如下:

#define N11 //定義獲得的數據個數char filter(){charvalue_buff[N]; //定義存儲數據的數組char count,i,j,temp;for(count=0;count{value_buf[count]=get_data();delay(); //如果采集數據比較慢,那么就需要延時或中斷}for(j=0;j{for(value_buff[i]》value_buff[i+1]{temp=value_buff[i];value_buff[i]=value_buff[i+1];value_buff[i+1]=temp;}}returnvalue_buff[(N-1)/2];}

說明:中值濾波比較適用于去掉由偶然因素引起的波動和采樣器不穩定而引起的脈動干擾。若被測量值變化比較慢,采用中值濾波法效果會比較好,但如果數據變化比較快,則不宜采用此方法。

(3)算術平均濾波算法

該算法的基本原理很簡單,就是連續取N次采樣值后進行算術平均。

算法的程序代碼如下:

數字濾波算法克服隨機干擾的誤差具有哪些優點?

char filter(){int sum=0;for(count=0;count{sum+=get_data();delay():}return (char)(sum/N);}

說明:算術平均濾波算法適用于對具有隨機干擾的信號進行濾波。這種信號的特點是有一個平均值,信號在某一數值附近上下波動。信號的平均平滑程度完全到決于N值。當N較大時,平滑度高,靈敏度低;當N較小時,平滑度低,但靈敏度高。為了方便求平均值,N一般取4、8、16、32之類的2的整數冪,以便在程序中用移位操作來代替除法。

(4)加權平均濾波算法

由于前面所說的“算術平均濾波算法”存在平滑度和靈敏度之間的矛盾。為了協調平滑度和靈敏度之間的關系,可采用加權平均濾波。它的原理是對連續N次采樣值分別乘上不同的加權系數之后再求累加,加權系數一般先小后大,以突出后面若干采樣的效果,加強系統對參數變化趨勢的認識。各個加權系數均小于1的小數,且滿足總和等于1的結束條件。這樣加權運算之后的累加和即為有效采樣值。設D為N個采樣值的加權平均值:XN-i為第N-i次采樣值;N為采樣次數;Ci為加權系數。加權系數Ci體現了各種采樣值在平均值中所占的比例。一般來說采樣次數越靠后,取的比例越大,這樣可增加新采樣在平均值中所占的比重。加權平均值濾波法可突出一部分信號抵制另一部分信號,以提高采樣值變化的靈敏度。

樣例程序代碼如下:

char codejq[N]={1,2,3,4,5,6,7,8,9,10,11,12}; //code數組為加權系數表,存在程序存儲區char codesum_jq=1+2+3+4+5+6+7+8+9+10+11+12;char filter(){char count;char value_buff[N];int sum=0;for(count=0;count{value_buff[count]=get_data();delay();}for(count=0;countsum+=value_buff[count]*jq[count];return(char)(sum/sum_jq);}

(5)滑動平均濾波算法

以上介紹和各種平均濾波算法有一個共同點,即每獲取一個有效采樣值必須連續進行若干次采樣,當采速度慢時,系統的實時得不到保證。這里介紹的滑動平均濾波算法只采樣一次,將一次采樣值和過去的若干次采樣值一起求平均,得到的有效采樣值即可投入使用。如果取N個采樣值求平均,存儲區中必須開辟N個數據的暫存區。每新采集一個數據便存入暫存區中,同時去掉一個最老數據,保存這N個數據始終是最新更新的數據。采用環型隊列結構可以方便地實現這種數據存放方式。

程序代碼如下:

char value_buff[N];char i=0;char filter(){char count;int sum=0;value_buff[i++]=get_data();if(i==N)i=0;for(count=0;countsum=value_buff[count];return (char)(sum/N);}

(6)低通濾波

將普通硬件RC低通濾波器的微分方程用差分方程來表求,變可以采用軟件算法來模擬硬件濾波的功能,經推導,低通濾波算法如下:

Yn=a* Xn+(1-a) *Yn-1

式中 Xn——本次采樣值

Yn-1——上次的濾波輸出值;

,a——濾波系數,其值通常遠小于1;

Yn——本次濾波的輸出值。

由上式可以看出,本次濾波的輸出值主要取決于上次濾波的輸出值(注意不是上次的采樣值,這和加權平均濾波是有本質區別的),本次采樣值對濾波輸出的貢獻是比較小的,但多少有些修正作用,這種算法便模擬了具體有教大慣性的低通濾波器功能。濾波算法的截止頻率可用以下式計算:

fL=a/2Pit pi為圓周率3.14…

式中 a——濾波系數;

, t——采樣間隔時間;

例如:當t=0.5s(即每秒2次),a=1/32時;

fL=(1/32)/(2*3.14*0.5)=0.01Hz

當目標參數為變化很慢的物理量時,這是很有效的。另外一方面,它不能濾除高于1/2采樣頻率的干攪信號,本例中采樣頻率為2Hz,故對1Hz以上的干攪信號應采用其他方式濾除,低通濾波算法程序于加權平均濾波相似,但加權系數只有兩個:a和1-a。為計算方便,a取一整數,1-a用256-a,來代替,計算結果舍去最低字節即可,因為只有兩項,a和1-a,均以立即數的形式編入程序中,不另外設表格。雖然采樣值為單元字節(8位A/D)。為保證運算精度,濾波輸出值用雙字節表示,其中一個字節整數,一字節小數,否則有可能因為每次舍去尾數而使輸出不會變化。

設Yn-1存放在30H(整數)和31H(小數)兩單元中,Yn存放在32H(整數)和33H(小數)中。

小結一下吧:數字濾波器,說白了,就是多次采樣求平均值的一個過程,精確一點的,就是再順序排列,去掉首位再求平均值,就是求平均數??!
? ? ? ?責任編輯:pj

下載發燒友APP

打造屬于您的人脈電子圈

關注電子發燒友微信

有趣有料的資訊及技術干貨

關注發燒友課堂

鎖定最新課程活動及技術直播

電子發燒友觀察

一線報道 · 深度觀察 · 最新資訊
收藏 人收藏
分享:

評論

相關推薦

書童哥(龍順宇)62講生動課程帶您玩兒轉STM8單片機

【課程介紹】:朋友們大家好,本套視頻教程由本人錄制,現做為錄播課程上傳至電子發燒友網平臺,感謝電子發燒友網讓單片機學習的
發燒友學院發表于 2019-01-19 00:00? 3015次閱讀
書童哥(龍順宇)62講生動課程帶您玩兒轉STM8單片機

單片機開發串口是應用最為廣泛的通信接口

通用同步收發器(USART)是一種串行接口設備,可以對其進行編程以進行異步或同步通信。
發表于 2020-07-08 11:21? 22次閱讀
單片機開發串口是應用最為廣泛的通信接口

單片機和PLC之間有什么區別?

單片機的特點是編程、維護相對復雜,編程方式常用C語言或者匯編語言,成本較低,I/O接口相對有限。
發表于 2020-07-08 11:00? 53次閱讀
單片機和PLC之間有什么區別?

關于單片機系統EMC測試

它包括電磁干擾(EMI)和電磁敏感性(EMS)兩部分。由于電器產品在使用時對其它電器有電磁干擾,或受....
發表于 2020-07-08 10:56? 34次閱讀
關于單片機系統EMC測試

單片機和數字電路怎么抗干擾?

LED電源的工程師經常提及“恒流”驅動,其實,在很多電子設備中,有許多用電設備要求供給的電流(而不是....
發表于 2020-07-08 08:43? 36次閱讀
單片機和數字電路怎么抗干擾?

多個單片機用nRF24l01模塊做發射,一個做接收,如何實現的?

準備做一個簡易的家庭溫度測量儀,每個房間都放置一個單片機加發射模塊,在客廳里放置一個單片機加接收模塊,不知道多...
發表于 2020-07-08 07:45? 9次閱讀
多個單片機用nRF24l01模塊做發射,一個做接收,如何實現的?

手把手教程:各類數字電源設計實例(程序+原理圖)

本資料分享了數字電源設計實例,包含程序、原理圖等資料,手把手帶你獨立設計屬于自己的數字電源。 ...
發表于 2020-07-07 15:13? 336次閱讀
手把手教程:各類數字電源設計實例(程序+原理圖)

串口助手接收單片機發送過來的字符串,發送值與接收值不一樣

串口助手接收單片機發送過來的字符串,發送與接收不一樣,發送同一串字符串,每次接收到的都不一樣,但接收到都是...
發表于 2020-07-07 15:10? 117次閱讀
串口助手接收單片機發送過來的字符串,發送值與接收值不一樣

電流互感器采樣電路的工作原理

(2)采用電阻采樣的電流采樣單元如下圖(b)所示。電阻R320是串接在IGBT管e極與電源負極之間的....
發表于 2020-07-07 14:38? 56次閱讀
電流互感器采樣電路的工作原理

3.3V 單片機和 5V 單片機通信的兩種思路

個單片機由于電平不同,串口通信可能會失敗,這時候需要通過電平轉換電路來解決,本文給出了兩種方法,一種是通過三極...
發表于 2020-07-07 14:11? 403次閱讀
3.3V 單片機和 5V 單片機通信的兩種思路

51單片機 氣體煙霧報警器

大家好,我做一個氣體煙霧報警器,但是代碼有點問題,不會把氣體濃度等級顯示到數碼管上,而且報警不太靈敏,把等級降...
發表于 2020-07-07 10:17? 127次閱讀
51單片機 氣體煙霧報警器

RISC-V單片機玩轉ESP8266 WIFI模...

程序主要包括如下4個功能模塊:ESP01S初始化、串口處理、Event回調函數、事件處理;串口處理模....
發表于 2020-07-07 09:26? 59次閱讀
RISC-V單片機玩轉ESP8266 WIFI模...

40個經典單片機實驗幫你成功 206頁 2.6M

40個經典單片機實驗幫你成功 206頁 2.6M 非常適合初學者和畢設 資料分享來自網絡資源 ...
發表于 2020-07-06 22:13? 146次閱讀
40個經典單片機實驗幫你成功 206頁 2.6M

51單片機c程序

void tim( )interrupt 1 {     static  uchar count=0;     TH0=0xfc; &nb...
發表于 2020-07-06 12:41? 151次閱讀
51單片機c程序

當前常用單片機開發模式有哪些

單片機開發的過程肯定是需要單片機開發工具的支持的,進行程序的調試等是單片機開發過程更加順暢,縮短開發....
發表于 2020-07-05 11:12? 84次閱讀
當前常用單片機開發模式有哪些

低功耗MCU單片機如何選型

 小編給帶來分享低功耗MCU單片機如何選型,需要關注以下幾點。
發表于 2020-07-05 11:11? 108次閱讀
低功耗MCU單片機如何選型

單片機芯片生產工藝對單片機芯片良率的影響

單片機芯片生產工藝對單片機芯片良率的影響是至關重要的。這些因素可以細化到單片機芯片工藝制程步驟數量、....
發表于 2020-07-05 11:08? 60次閱讀
單片機芯片生產工藝對單片機芯片良率的影響

基于單片機的點火系統工作原理

汽車電子市場火熱,英銳恩科技分享基于單片機的點或市場。與傳統的機械調節式點火時刻控制系統相比,基于微....
發表于 2020-07-05 11:05? 93次閱讀
基于單片機的點火系統工作原理

8051單片機架構_封裝及原理圖

 繼8051單片機成功之后,許多其他半導體制造商紛紛以自己的品牌發布了使用MCS-51內核的單片機。....
發表于 2020-07-05 11:01? 75次閱讀
8051單片機架構_封裝及原理圖

學習單片機C語言,必知的數據存儲與程序編寫知識!

堆區(heap):就是那些由new分配的內存塊,它們的釋放編譯器不去管,由我們的應用程序去控制,一般....
發表于 2020-07-05 10:31? 232次閱讀
學習單片機C語言,必知的數據存儲與程序編寫知識!

插入uart不顯示COM號怎么解決?

[table] [tr][td]我插入jtag口顯示USB Serial Port(com2),插入UART只會顯示USB to UART Adapter,...
發表于 2020-07-04 13:40? 199次閱讀
插入uart不顯示COM號怎么解決?

單片機最小系統的設計資料概述

單片機最小系統特點:系統資源完全開放,配合其它模塊板或自行搭建用戶電路可實現任意實驗功能。接口設計靈....
發表于 2020-07-04 12:09? 464次閱讀
單片機最小系統的設計資料概述

使用單片機設計IC卡讀寫器的資料概述

本文對AT24系列存貯器和AT89系列單片機的特征及總線狀態作為介紹,并以AT24C01與AT89C....
發表于 2020-07-04 12:09? 536次閱讀
使用單片機設計IC卡讀寫器的資料概述

如何將PIC單片機AD轉換數據打包

pic單片機作用寬泛,對于pic單片機,大家已不再像若干年前一樣一無所知。隨著對pic單片機的使用,....
發表于 2020-07-04 11:13? 714次閱讀
如何將PIC單片機AD轉換數據打包

如何選擇合適的PIC單片機?PIC單片機或運算符...

pic單片機對于大家早已不再是琢磨不透的大山,隨著pic單片機的使用,大家對pic單片機的認識逐步增....
發表于 2020-07-04 09:28? 350次閱讀
如何選擇合適的PIC單片機?PIC單片機或運算符...

晶振應該如何實現秒信號

晶振的重要性顯而易見,缺少晶振,單片機等器件將不能良好運行。因此,大家有必要增進對晶振的認識。為此,....
發表于 2020-07-04 09:28? 291次閱讀
晶振應該如何實現秒信號

如何判斷晶振的好壞晶振對于單片機有怎么樣的影響

晶振的作用日漸突出,本文中,將基于三方面介紹晶振:1.如何判斷晶振好壞,2.石英晶振的運用準則,3.....
發表于 2020-07-04 09:27? 647次閱讀
如何判斷晶振的好壞晶振對于單片機有怎么樣的影響

國產航順芯(HK)高性價比32位MCU選型表分享

國產航順芯(HK)高性價比32位MCU選型表,有需要的可以了解下 ...
發表于 2020-07-03 16:51? 208次閱讀
國產航順芯(HK)高性價比32位MCU選型表分享

有大神用過瑞薩單片機開發過機車儀表盤嗎?

摩托車儀表盤的油量與速度采集算法優化是怎么做的? 油量是通過AD采樣,速度是外部中斷觸發計數,換算成頻率再折合...
發表于 2020-07-03 16:44? 182次閱讀
有大神用過瑞薩單片機開發過機車儀表盤嗎?

PCB板上電后的運行情況

對于手邊的一盒STC單片機,測試一下它們使用相同的ISP方案在下載過程中是否都可以按照相同的方式完成....
發表于 2020-07-03 09:14? 328次閱讀
PCB板上電后的運行情況

基于定時控制寄存器TCON

如果定時器工作在中斷方式下,則當定時器的當前值計滿溢出時,就會觸發定時器溢出中斷。
發表于 2020-07-03 09:11? 193次閱讀
基于定時控制寄存器TCON

51單片機系統板開發常見錯誤大全

對元件封裝沒有認真考慮,造成 PCB 與原理圖之間不對應
發表于 2020-07-02 18:01? 61次閱讀
51單片機系統板開發常見錯誤大全

基于AVR單片機的RFID閱讀器設計方案

無線射頻識別(Radio Frequency Identification,RFID)是利用感應、電....
發表于 2020-07-02 16:07? 58次閱讀
基于AVR單片機的RFID閱讀器設計方案

固件模塊可以分為哪幾種類型?

固件模塊原理固件開發中模塊化編程的基本概念是創建固件模塊。從概念上講,模塊代表關注點分離。在計算機科....
發表于 2020-07-01 17:05? 317次閱讀
固件模塊可以分為哪幾種類型?

單片機內部結構幾個基本概念

請大家自己寫上3盞燈的情況000 001 010 011 100 101 110 111我們來看,這....
發表于 2020-07-01 16:49? 265次閱讀
單片機內部結構幾個基本概念

單片機開發一個數據采集系統

本例題采用可調電阻 調節電壓值作為模擬信號的輸入量,通過A/D轉換芯片AD0808把模擬信號轉換為數....
發表于 2020-07-01 16:47? 308次閱讀
單片機開發一個數據采集系統

關于意法半導體STM32單片機的特性分析

MCU經過多年發展,性能也得到了很大的提升。因為MCU必須順序執行程序,所以適于做控制,較多地應用于....
發表于 2020-07-01 13:41? 37次閱讀
關于意法半導體STM32單片機的特性分析

單片機的I/O接口電路的擴展

單片機I/O (輸入/輸出)接口是其與外設交換數字信息的橋梁。事實上,真正用作I/O口線的只有P1口....
發表于 2020-06-30 15:37? 533次閱讀
單片機的I/O接口電路的擴展

新手教程:單片機的學習實踐步驟

運用單片機便是了解單片機硬件結構,以及內部資源的運用,在匯編或C語言中學會各種功用的初始化設置,以及....
發表于 2020-06-30 15:33? 525次閱讀
新手教程:單片機的學習實踐步驟

單片機入門需要了解的知識

好多人學習單片機始終不能入門,那怎么才能快速的入門呢?
發表于 2020-06-30 15:16? 386次閱讀
單片機入門需要了解的知識

32位單片機STM32F7外擴QSPI SRAM...

意法半導體STM32F7系列MCU采用高性能的ARM Cortex-M7核心,借助ST的ART Ac....
發表于 2020-06-30 14:32? 61次閱讀
32位單片機STM32F7外擴QSPI SRAM...
宁夏11选5遗漏数据查询