羅伯特祥 2020-08-09 12:46:14
分類專欄: ▶ 運動控制
▶ linux/嵌入式
▶ 訊號處理 文章標籤: 低通濾波器
rc濾波器 版權
一階濾波,又叫一階慣性濾波,或一階低通濾波,軟體實現rc低通濾波器的功能。
y ( n ) = α x ( n ) + ( 1 − α ) y ( n − 1 ) y(n)=αx(n) + (1-α)y(n-1)y(n)=αx(n)+(1−α)y(n−1)
式中:α αα為濾波係數,x ( n ) x(n)x(n)為本次取樣值,y ( n − 1 ) y(n-1)y(n−1)為上次濾波輸出值,y ( n ) y(n)y(n)為本次濾波輸出值
傳遞函式推導可參考該博文:傳送門
一階濾波無法完美地兼顧靈敏度和平穩度。有時,我們只能尋找乙個平衡,在可接受的靈敏度範圍內取得盡可能好的平穩度。而在一些場合,我們希望擁有這樣一種接近理想狀態的濾波演算法。即:當資料快速變化時,濾波結果能及時跟進(靈敏度優先);當資料趨於穩定,在乙個固定的點上下振盪時,濾波結果能趨於平穩(平穩度優先)。
案例1:油門資料濾波
案例2:// 油門濾波
thr_lpf+=(1/(1+1/(2.0f*3.14f*t)))*(height_thr-thr_lpf)
案例3:matlab測試#define a 0.01 // 濾波係數a(0-1)
static float oldoutdata = 0;
char filter(void)
/*程式中整數運算比小數運算快,為加快程式的處理速度,
為計算方便,a取一整數,1-a用256-a來代替,
a則取0~255,代表新取樣值在濾波結果中的權重
(也可將1-a的基數改為100-a,計算結果做相應處理,這裡不做說明)
*/#define a 128
char value; //上次濾波值
char filter()
思路:先將新取樣值與上次濾波結果進行比較,然後根據比較採用不同的公式計算,這樣程式的運算效率提高了一倍% 一階低通濾波器測試
close all;
t = 0.003;
a = 1/(1+(1/(2*pi*t)));
tt = 0:t:25;
y = sin(0.5*tt);
y_noise = awgn(y,35);
y_proce = y_noise;
for i = 2:length(y)
y_proce(i) = (1-a) * y_proce(i-1) + a * y_noise(i);
endplot(tt,y,'r');
figure(2)
plot(tt,y_noise,'g');hold on;
plot(tt,y_proce,'b');
hold off;
分析:實現功能:/*入口:new_data 新取樣值
old_data 上次濾波結果
k 濾波係數(0~255)(代表在濾波結果中的權重)
出口: 本次濾波結果
*/ char filter_1(char new_data,char old_data,char k)
else result=old_data;
return((char)result);
}

幾個常量引數及其取值範圍(不同的取值會影響濾波的靈敏度和穩定度):
消抖計數加速反應閾值,取值根據資料情況確定
消抖計數最大值,一般取值10;
濾波係數增量,一般取值範圍為10~30
濾波係數最大值,一般取值255;
在呼叫一階濾波程式前,先呼叫調整濾波係數程式,對係數進行即時調整。濾波效果:
當取樣資料偶然受到干擾,濾波結果中的干擾完全被濾除
當資料在乙個範圍內振盪時,濾波結果曲線非常平滑,幾乎是一根直線
當取樣資料發生真實的變化時,濾波結果也能比較及時地跟進
當取樣資料趨於穩定時,濾波結果逐漸逼近並最終等於取樣資料
//用mpu6050測得資料;對x軸濾波處理
#define threshold_1 8 //閾值1用於一階帶參濾波器,變化角度大於此值時,計數增加
#define threshold_2 30 //閾值2用於一階帶參濾波器,計數值大於此值時,增大引數,增強濾波跟隨
float k_x=0; //濾波係數
u8 new_flag_x=0;//本次資料變化方向
u8 num_x=0;//濾波計數器
/*****帶係數修改的一階濾波函式
入口: new_data 新取樣的角度值
old_data 上次濾波獲得的角度結果
k 濾波係數(代表在濾波結果中的權重)
flag 上次資料變化方向
出口: result 本次濾波角度結果
*/float filter_1_x(float new_data,float old_data,float k,u8 flag)
}else
old_data=(1-k_x)*old_data+k_x*new_data;
return old_data;
}
一階低通濾波器方程 一階低通濾波原理詳解
在汽車標定中,使用最多的濾波演算法即低通濾波,很多朋友可能知道怎麼標定,但是不清楚具體的原理,因此本文將介紹一階低通濾波的原理 演算法建模 和優缺點 一階濾波演算法的原理 一階濾波,又叫一階慣性濾波,或一階低通濾波。一階低通濾波的演算法公式為 y n x n 1 y n 1 式中 濾波係數 x n ...
RC一階低通濾波器
由於工作原因一直在接觸濾波器,但是對其詳細概念和原理一知半解,所以一直想好好學習一下。最近終於抽出時間搜遍各種資料,但總覺得知識點太散,不太方便系統的理解,所以自己整理了一下,希望有所幫助。第一次編輯發部落格,實在不易,word編輯好了,想直接拷貝上來還不行,公式無法複製,只好乙個個截圖,實在尷尬!...
演算法學習筆記之一階低通濾波演算法
一階濾波,又叫一階慣性濾波,或一階低通濾波。是使用軟體程式設計實現普通硬體rc低通濾波器的功能。一階低通濾波的演算法公式為 y n x n 1 y n 1 式中 濾波係數 x n 本次取樣值 y n 1 上次濾波輸出值 y n 本次濾波輸出值。一階低通濾波法採用本次取樣值與上次濾波輸出值進行加權,得...