一文詳解單片機(jī)濾波算法與應(yīng)用
單片機(jī)作為控制外圍器件、實(shí)現(xiàn)通信和數(shù)據(jù)處理的核心部件,在特定場(chǎng)合下也需應(yīng)對(duì)數(shù)學(xué)運(yùn)算的挑戰(zhàn),盡管這并非其強(qiáng)項(xiàng)。本文將深入探討如何利用單片機(jī)技術(shù)來(lái)實(shí)現(xiàn)數(shù)字濾波。
在單片機(jī)進(jìn)行數(shù)據(jù)采集時(shí),會(huì)遇到數(shù)據(jù)的隨機(jī)誤差,隨機(jī)誤差是由隨機(jī)干擾引起的,其特點(diǎn)是在相同條件下測(cè)量同一量時(shí),其大小和符號(hào)會(huì)現(xiàn)無(wú)規(guī)則的變化而無(wú)法預(yù)測(cè),但多次測(cè)量的結(jié)果符合統(tǒng)計(jì)規(guī)律。為克服隨機(jī)干擾引起的誤差,硬件上可采用濾波技術(shù),軟件上可采用軟件算法實(shí)現(xiàn)數(shù)字濾波。濾波算法往往是系統(tǒng)測(cè)控算法的一個(gè)重要組成部分,實(shí)時(shí)性很強(qiáng)。
采用數(shù)字濾波算法克服隨機(jī)干擾的誤差具有以下優(yōu)點(diǎn):
l 數(shù)字濾波無(wú)需其他的硬件成本,只用一個(gè)計(jì)算過(guò)程,可靠性高,不存在阻抗匹配問(wèn)題。尤其是數(shù)字濾波可以對(duì)頻率很低的信號(hào)進(jìn)行濾波,這是模擬濾波器做不到的。
l 數(shù)字濾波使用軟件算法實(shí)現(xiàn),多輸入通道可共用一個(gè)濾波程序,降低系統(tǒng)開(kāi)支。
l 只要適當(dāng)改變?yōu)V波器的濾波程序或運(yùn)算,就能方便地改變其濾波特性,這對(duì)于濾除低頻干擾和隨機(jī)信號(hào)會(huì)有較大的效果。
l 在單片機(jī)系統(tǒng)中常用的濾波算法有限幅濾波法、中值濾波法、算術(shù)平均濾波法、加權(quán)平均濾波法、滑動(dòng)平均濾波等。
> 隨機(jī)誤差與濾波方法
在單片機(jī)進(jìn)行數(shù)據(jù)采集的過(guò)程中,隨機(jī)誤差是一個(gè)不可避免的問(wèn)題。這種誤差源于隨機(jī)干擾,其特性是在相同條件下重復(fù)測(cè)量同一量時(shí),誤差的大小和符號(hào)會(huì)呈現(xiàn)無(wú)規(guī)律的變化,難以預(yù)測(cè),但多次測(cè)量的結(jié)果卻遵循統(tǒng)計(jì)規(guī)律。為了有效應(yīng)對(duì)這種隨機(jī)干擾引起的誤差,我們可以采取兩種策略:一是從硬件層面實(shí)施濾波技術(shù),二是通過(guò)軟件算法實(shí)現(xiàn)數(shù)字濾波。這兩種方法都是系統(tǒng)測(cè)控算法的關(guān)鍵環(huán)節(jié),具有很高的實(shí)時(shí)性要求。
> 數(shù)字濾波的優(yōu)越性
采用數(shù)字濾波算法來(lái)減少隨機(jī)干擾誤差的好處多多,包括提高信號(hào)質(zhì)量、增強(qiáng)數(shù)據(jù)可靠性等。數(shù)字濾波相較于模擬濾波,其優(yōu)勢(shì)顯而易見(jiàn)。它無(wú)需額外硬件成本,僅通過(guò)計(jì)算過(guò)程即可實(shí)現(xiàn),且可靠性極高,無(wú)需擔(dān)憂阻抗匹配問(wèn)題。尤為值得一提的是,數(shù)字濾波能輕松應(yīng)對(duì)頻率極低的信號(hào),這是模擬濾波器難以做到的。此外,軟件算法還能驅(qū)動(dòng)多個(gè)輸入通道共享同一套濾波程序,從而有效降低系統(tǒng)成本。數(shù)字濾波的靈活性極高,通過(guò)調(diào)整濾波器的程序或運(yùn)算方式,便能輕松改變其濾波特性。
> 常用濾波算法
單片機(jī)系統(tǒng)中常用的濾波算法包括限幅濾波法、中值濾波法、算術(shù)平均濾波法、加權(quán)平均濾波法以及滑動(dòng)平均濾波等。
> 算術(shù)平均濾波法
算術(shù)平均濾波法的核心思想是連續(xù)采樣N次后,對(duì)這些采樣值進(jìn)行算術(shù)平均。通過(guò)這種方式,能夠減少隨機(jī)干擾。平滑度與靈敏度主要通過(guò)N值的選擇進(jìn)行調(diào)整:N越大,平滑度越高而靈敏度越低;反之,N越小,平滑度越低而靈敏度越高。
程序代碼如下:
```c
char filter()
int sum=0;
for(count=0;count
sum += get_data();
delay();
return (char)(sum / N);
```
> 加權(quán)平均濾波法
為了更好地協(xié)調(diào)平滑度和靈敏度之間的關(guān)系,可采用加權(quán)平均濾波法。其原理是對(duì)連續(xù)N次采樣值賦予不同的加權(quán)系數(shù),然后進(jìn)行累加。加權(quán)系數(shù)通常先小后大,從而突出后續(xù)采樣的影響,增強(qiáng)系統(tǒng)對(duì)參數(shù)變化趨勢(shì)的感知。加權(quán)平均數(shù)字濾波的數(shù)學(xué)模型為:
D = Σ(XN-i Ci)
其中,D是N個(gè)采樣值的加權(quán)平均值,XN-i代表第N-i次采樣值,N是采樣次數(shù),而Ci則是相應(yīng)的加權(quán)系數(shù)。
> 滑動(dòng)平均濾波法
滑動(dòng)平均濾波僅需進(jìn)行一次采樣,具有良好的實(shí)時(shí)性。該算法將新采樣值與過(guò)去若干值的平均,以保持系統(tǒng)的實(shí)時(shí)性。
> 低通濾波簡(jiǎn)介
低通濾波簡(jiǎn)介可以通過(guò)差分方程來(lái)模擬低通濾波器。這種方程強(qiáng)調(diào)的是繼電器的慣性作用,從而抑制高頻干擾。低通濾波算法的表達(dá)式為:Yn = aXn + (1-a)Yn-1,其中Xn代表本次采樣值,Yn-1是上次的濾波輸出值,a是濾波系數(shù),Yn則是本次濾波的輸出值。該算法在處理變化緩慢的物理量時(shí)表現(xiàn)出色,但對(duì)于高頻干擾則需要其他方法處理。
單片機(jī)中實(shí)現(xiàn)的六種數(shù)字濾波算法詳解如下:
限幅濾波算法:
原理:通過(guò)連續(xù)采樣并進(jìn)行減法運(yùn)算,比較結(jié)果的絕對(duì)值與預(yù)設(shè)的門限值A(chǔ),以限制數(shù)據(jù)的變化范圍。
適用場(chǎng)景:適用于緩慢變化的數(shù)據(jù),如溫度和位置測(cè)量,能有效去除隨機(jī)誤差。
關(guān)鍵點(diǎn):選擇合適的門限值A(chǔ),可通過(guò)經(jīng)驗(yàn)或?qū)嶒?yàn)確定。
中值濾波算法:
原理:對(duì)連續(xù)采樣值進(jìn)行排序,取中間值作為濾波結(jié)果。
適用場(chǎng)景:適用于去除偶然波動(dòng)和采樣器不穩(wěn)定帶來(lái)的干擾,適用于變化較慢的數(shù)據(jù)。
限制:對(duì)快速變化信號(hào)不適用。
算數(shù)平均濾波算法:
原理:簡(jiǎn)單計(jì)算連續(xù)采樣值的平均值。
適用場(chǎng)景:適用于隨機(jī)干擾信號(hào)的濾波,平滑程度與采樣次數(shù)N相關(guān)。
特點(diǎn):N越大,平滑效果越好,但靈敏度降低。
加權(quán)平均濾波算法:
原理:通過(guò)加權(quán)系數(shù)調(diào)整采樣值的權(quán)重,以平衡平滑度和靈敏度。
適用場(chǎng)景:適用于信號(hào)變化趨勢(shì)的認(rèn)識(shí),能突出新數(shù)據(jù)的影響。
優(yōu)點(diǎn):相比算數(shù)平均濾波,能更好地適應(yīng)信號(hào)的變化趨勢(shì)。
滑動(dòng)平均濾波算法:
原理:利用環(huán)形隊(duì)列存儲(chǔ)和更新數(shù)據(jù),每次采樣僅更新隊(duì)列中的一個(gè)值,并計(jì)算新的平均值。
適用場(chǎng)景:適合實(shí)時(shí)性要求高的場(chǎng)景,能有效減少存儲(chǔ)空間的使用。
特點(diǎn):需占用一定的存儲(chǔ)空間,但能實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)濾波。
低通濾波算法:
原理:模擬硬件濾波器的行為,通過(guò)差分方程實(shí)現(xiàn)。
適用場(chǎng)景:適用于緩慢變化的參數(shù),能有效去除高頻噪聲。
限制:不能濾除高于采樣頻率一半的干擾信號(hào),即存在奈奎斯特頻率限制。
以上六種數(shù)字濾波算法在單片機(jī)中各有優(yōu)缺點(diǎn),應(yīng)根據(jù)具體應(yīng)用場(chǎng)景選擇合適的濾波算法,以實(shí)現(xiàn)最佳的數(shù)據(jù)處理效果。
濾波算法概述在單片機(jī)的應(yīng)用中,雖然單片機(jī) 擅長(zhǎng)控制和通信,但在數(shù)學(xué)運(yùn)算的處理上仍需借助各種算法的輔助。特別是在需要處理數(shù)學(xué)運(yùn)算的情境下,單片機(jī)的表現(xiàn)往往不盡如人意,因此通過(guò)算法的運(yùn)用來(lái)彌補(bǔ)這一弱點(diǎn)顯得尤為重要。
濾波算法在數(shù)據(jù)處理尤其是 單片機(jī)應(yīng)用中至關(guān)重要,用于減少干擾信號(hào)的影響。這些算法幫助信號(hào)處理從噪聲中提取出所需的信息,從而提高了單片機(jī)系統(tǒng)的穩(wěn)定性和可靠性。
02限幅濾波算法? 方法和實(shí)現(xiàn)
限幅濾波是一種基本的信號(hào)處理手段。 通過(guò)設(shè)定偏差閾值A(chǔ),判斷新采樣值的合理性進(jìn)而限制波動(dòng)。這種方法能夠有效保護(hù)傳感器免受瞬間電壓沖擊,確保數(shù)據(jù)的穩(wěn)定性和可靠性。實(shí)現(xiàn)時(shí),基于經(jīng)驗(yàn)設(shè)定兩次采樣間的最大允許偏差值A(chǔ),每次獲取新值時(shí),進(jìn)行判斷:如果當(dāng)前值與前一次的值之差小于或等于A,則當(dāng)前值有效;否則無(wú)效,用前一次的值替代。
? 優(yōu)缺點(diǎn)
該方法能夠有效克服脈沖干擾,但無(wú)法完全抑制周期性干擾,相對(duì)平滑度較差。
03中位值濾波法? 方法概述
中位值濾波法通過(guò) 對(duì)某一參數(shù)連續(xù)采樣N次并排序取中位值的方法,抗干擾能力出眾。它能夠有效對(duì)抗隨機(jī)波動(dòng)干擾,確保數(shù)據(jù)準(zhǔn)確性。這種方法對(duì)溫度等變化緩慢的參數(shù)尤其有效。
? 優(yōu)缺點(diǎn)分析
中位值濾波法能夠有效抑制波動(dòng)干擾,但對(duì)速度變化快的參數(shù)不甚適用。
? 代碼實(shí)現(xiàn)
```c
define N 11
char filter() {
char value\_buf[N];
char count, i, j, temp;
for (count = 0; count N; count++) {
// 獲取或生成采樣值
// ...
}
// 對(duì)value\_buf數(shù)組進(jìn)行排序
for (i = 0; i N - 1; i++) {
for (j = i + 1; j N; j++) {
if (value\_buf[i] > value\_buf[j]) {
temp = value\_buf[i];
value\_buf[i] = value\_buf[j];
value\_buf[j] = temp;
}
}
}
// 選取排序后的中間值作為本次的有效值
return value\_buf[N / 2];
}
```
01遞推平均濾波法? 方法與流程
遞推平均濾波法的基本思想是 通過(guò)加權(quán)系數(shù)進(jìn)行平滑處理。權(quán)衡當(dāng)前采樣與歷史結(jié)果,通過(guò)調(diào)整加權(quán)系數(shù)可以得到平滑的信號(hào)。
? 優(yōu)缺點(diǎn)
遞推平均濾波法對(duì)周期性干擾有良好抑制,但靈敏度較低且對(duì)脈沖干擾抵抗力差。
02中位值平均濾波法? 方法概述
中位值平均濾波法結(jié)合了 中位值和平均值的優(yōu)點(diǎn),能夠消除脈沖干擾。通常,它通過(guò)采樣的N個(gè)值去掉最大和最小的后計(jì)算平均來(lái)實(shí)現(xiàn)。
? 優(yōu)缺點(diǎn)分析
這種方法能消除隨機(jī)和脈沖干擾,但計(jì)算量大且周期性干擾抑制弱。
03一階滯后濾波的應(yīng)用? 核心思想
一階滯后濾波的核心在于 通過(guò)加權(quán)系數(shù)將當(dāng)前采樣與歷史結(jié)果混合,從而得到平滑的信號(hào)輸出。這種方法在處理波動(dòng)信號(hào)時(shí)尤其有效。
? 優(yōu)缺點(diǎn)
該方法在周期性干擾的過(guò)濾方面表現(xiàn)出色,但靈敏度較低且存在相位滯后問(wèn)題。
04加權(quán)遞推平均濾波法? 方法改進(jìn)
在遞推平均濾波的基礎(chǔ)上, 增強(qiáng)靈敏度的方法通過(guò)賦予不同時(shí)刻的數(shù)據(jù)不同權(quán)重來(lái)實(shí)現(xiàn)。然而,這增加了計(jì)算的復(fù)雜度,濾波長(zhǎng)度需根據(jù)實(shí)際調(diào)整。
? 優(yōu)缺點(diǎn)
加權(quán)遞推平均濾波法具有較強(qiáng)的靈敏度和平滑性,但計(jì)算復(fù)雜度較高。
? 代碼實(shí)現(xiàn)
```c
define a 30
char value;
char filter;
char new_value;
new_value = get_ad();
return (100 - a) value + a new_value;
```
01去抖動(dòng)濾波? 方法概述
去抖動(dòng)濾波通過(guò) 計(jì)數(shù)器監(jiān)測(cè)采樣一致性和有效值,進(jìn)而減少信號(hào)抖動(dòng)和提高穩(wěn)定性。這種方法特別適用于變化緩慢的信號(hào)處理。
? 優(yōu)缺點(diǎn)分析
在快速變化信號(hào)的處理中,其濾波效果相對(duì)較差。
02限幅消抖濾波? 方法和優(yōu)缺點(diǎn)
限幅消抖濾波法 綜合限幅與消抖的優(yōu)點(diǎn),在保持快速響應(yīng)的同時(shí)避免干擾值。通過(guò)融合限幅與消抖,這種方法在抗干擾方面具備較大優(yōu)勢(shì)。





