• 正文
    • 一、限幅濾波法:按鍵消抖場景原理
    • 二、中位值濾波:溫度傳感器去噪原理
    • 三、滑動平均濾波:流量實時監(jiān)測原理
    • 四、卡爾曼濾波:姿態(tài)傳感器數(shù)據(jù)融合原理
    • 五、一階滯后濾波:電機電流平滑控制原理
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

分享5種嵌入式開發(fā)常用的濾波算法

03/25 12:05
830
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大家好,我是專注分享職業(yè)規(guī)劃/技術(shù)科普/智能生活有關(guān)原創(chuàng)文章的allen康哥。

今天介紹下嵌入式系統(tǒng)中常見的信號處理與濾波算法。

一、限幅濾波法:按鍵消抖場景原理

通過設(shè)定最大允許偏差值(A),若新采樣值與歷史值的差值超過閾值則視為噪聲,保留舊值。該算法適合消除突發(fā)性脈沖干擾。

應用場景機械按鍵消抖:消除觸點接觸瞬間的抖動信號。

電機轉(zhuǎn)速突變檢測:防止因負載突變導致的異常值干擾控制邏輯。

代碼實現(xiàn)

#define?MAX_DELTA?5??//?最大允許偏差值

char?limit_filter(char?current_val)?{
????static?char?last_val;
????if?(abs(current_val?-?last_val)?>?MAX_DELTA)?
????????return?last_val;??//?超出閾值則保留舊值
????else?
????????last_val?=?current_val;
????return?current_val;
}

二、中位值濾波:溫度傳感器去噪原理

對連續(xù)奇數(shù)次采樣值排序后取中間值,有效抑制偶發(fā)干擾。

應用場景熱敏電阻測溫:消除環(huán)境電磁干擾導致的偶發(fā)跳變。

液位監(jiān)測:過濾因流體波動引起的瞬時異常數(shù)據(jù)。

代碼實現(xiàn)

#define?N?7??//?奇數(shù)采樣次數(shù)

char?median_filter()?{
????char?samples[N],?temp;
????for?(int?i=0;?i<N;?i++)?
????????samples[i]?=?get_adc();??//?獲取ADC采樣值
????
????//?冒泡排序取中值
????for?(int?i=0;?i<N-1;?i++)?{
????????for?(int?j=0;?j<N-i-1;?j++)?{
????????????if?(samples[j]?>?samples[j+1])?{
????????????????temp?=?samples[j];
????????????????samples[j]?=?samples[j+1];
????????????????samples[j+1]?=?temp;
????????????}
????????}
????}
????return?samples[N/2];??//?返回中間值
}

三、滑動平均濾波:流量實時監(jiān)測原理

維護固定長度的數(shù)據(jù)隊列,計算窗口內(nèi)數(shù)據(jù)的算術(shù)平均,動態(tài)響應變化。

應用場景流量計數(shù)據(jù)平滑:消除流體湍流引起的瞬時波動。

電池電流監(jiān)測:平衡實時性與噪聲抑制需求。

代碼優(yōu)化

#define?WINDOW_SIZE?8??//?窗口長度

int?moving_average()?{
????static?int?buffer[WINDOW_SIZE],?index?=?0;
????buffer[index]?=?get_adc();??//?新數(shù)據(jù)入隊
????index?=?(index?+?1)?%?WINDOW_SIZE;??//?環(huán)形隊列管理
????
????int?sum?=?0;
????for?(int?i=0;?i<WINDOW_SIZE;?i++)?
????????sum?+=?buffer[i];
????return?sum?/?WINDOW_SIZE;??//?計算均值
}

四、卡爾曼濾波:姿態(tài)傳感器數(shù)據(jù)融合原理

通過預測與校正機制,融合多傳感器數(shù)據(jù)并動態(tài)估計系統(tǒng)狀態(tài)。

應用場景無人機姿態(tài)解算:融合陀螺儀加速度計數(shù)據(jù)。

智能車定位:結(jié)合編碼器與視覺數(shù)據(jù)優(yōu)化位置估計。

代碼實現(xiàn)

typedef?struct?{
????float?q;????//?過程噪聲方差
????float?r;????//?測量噪聲方差
????float?x;????//?狀態(tài)估計值
????float?p;????//?估計誤差協(xié)方差
????float?k;????//?卡爾曼增益
}?KalmanFilter;

float?kalman_update(KalmanFilter?*kf,?float?measurement)?{
????//?預測階段
????kf->p?+=?kf->q;??
????//?更新階段
????kf->k?=?kf->p?/?(kf->p?+?kf->r);
????kf->x?+=?kf->k?*?(measurement?-?kf->x);
????kf->p?*=?(1?-?kf->k);
????return?kf->x;
}

五、一階滯后濾波:電機電流平滑控制原理

通過加權(quán)系數(shù)α平衡新采樣值與歷史輸出值,實現(xiàn)低計算量濾波。

應用場景PWM電流控制:抑制高頻開關(guān)噪聲。

溫度PID控制:減少執(zhí)行器頻繁動作。

代碼實現(xiàn)

#define?ALPHA?0.3??//?平滑系數(shù)(0<α<1)

float?first_order_filter(float?new_sample)?{
????static?float?prev_output?=?0;
????prev_output?=?ALPHA?*?new_sample?+?(1?-?ALPHA)?*?prev_output;
????return?prev_output;
}

選型建議資源受限場景(如8位MCU)優(yōu)先選擇限幅、中位值等輕量算法。動態(tài)系統(tǒng)控制(如無人機)推薦卡爾曼濾波,需平衡計算復雜度與精度。高頻信號處理(如電機電流)采用一階滯后或滑動平均濾波,避免相位延遲。

你好,我是Allen,CSDN博客專家,博客訪問超千萬。現(xiàn)任世界500強外企高級開發(fā)工程師,有多年國企和外企工作經(jīng)驗,擅長電子及嵌入式方向?qū)W習規(guī)劃,簡歷優(yōu)化及offer咨詢,高考/考研咨詢等,歡迎留言與我交流!

相關(guān)推薦