大家好,我是專注分享職業(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ù)平滑:消除流體湍流引起的瞬時波動。
代碼優(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)低計算量濾波。
溫度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咨詢,高考/考研咨詢等,歡迎留言與我交流!