日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一阶RC低通滤波

發布時間:2024/3/7 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一阶RC低通滤波 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一階RC低通濾波

從模擬到數字?
本文整理自網絡、《匠人手記》等書籍文章

  • 模擬電路低通濾波時域、頻域
  • 軟件低通濾波

典型電路

?
圖1 典型RC電路?
直流、交流、脈沖信號都可以用它

時域

電容電流:?

Ic=dqdt=d(C?Uo)dt=CdUodt
基爾霍夫電壓定律得:?
Ui=RCdUodt+Uo
Ui的單位是伏特,RC的單位為秒,τ=RC;?
解得:?
Uo(t)=Ui(1?e(?t/RC))
假設電容初始電壓值為0?
R=1000Ω?
C=4.7uF?
Ui=1V?
t=0.0001~0.1s?
τ=RC?
Vc(τ)=0.632?
?
圖2 一階RC系統的階躍響應曲線

頻域

u1=Ui;u2=Uo;?
以電容電壓作為輸出,電路的網絡函數為:?

H(jω)=U2U1=1jωCR+1jωC=11+jωRC
令ωc= 1RC=1τ
ωc即為截止頻率;

幅值和相角函數:?

|H(jω)|=11+(ωωc)2????????

θ(ω)=?arctanωωc

各變量取值:?
R=1000Ω?
C=4.7uF?

j=?1???
ω=1RC
fc=12πRC
A(f)=1j2πfRC+1
|A(fc)|=0.707?
θ(f)=180arg(A(f))π
θ(fc)=-45

f=0.001、1、…….100000

幅頻和相頻特性圖:?
?
圖3?
?
圖4?
幅頻特性圖的對數表示:?
?
圖5

-當ω<ωc時,幅值是平行于坐標的直線,基本無衰減; 

-當ω>>ωc時,是斜率與-20dB/十倍頻成比例的一條直線; 

-當ω=ωc時,增益衰減至0.707,即-3dB,相位滯后45度,對應低通濾波器,該頻率通常被稱為截止頻率。

缺點:?
采用這種模擬濾波器抑制低頻干擾時,要求濾波器有較大的時間常數和高精度的RC網絡,增大時間常數要求增大R值,其漏電流也隨之增大,從而降低了濾波效果;

軟件上的一階低通濾波

優點:

-采用數字濾波算法來實現動態的RC濾波,則能很好的克服模擬濾波器的缺點;?
-在模擬常數要求較大的場合這種算法顯得更為實用;?
-其對于周期干擾有良好的抑制作用,?
-比較節省RAM空間

缺點

-不足之處是帶來了相位滯后,導致靈敏度低;?
-同時它不能濾除頻率高于采樣頻率的二分之一(稱為奈奎斯特頻率)的干擾(例如采樣頻率為100Hz,則它不能濾除50Hz以上的干擾信號)對于高于奈奎斯特頻率的干擾信號,應該采用模擬濾波器。?
-對沒有乘、除法運算指令的單片機來說,程序運算工作量較大

基本濾波算法:

算法由來:?
頻率分析中一階RC低通濾波在S域的傳遞函數:?

VoutVin=1RCs+1,(s=jω)
通過z變換(方法很多,如一階前向差分、雙線性變換等這里用一階后向差分法)?
s=1?z(?1)T,T

帶入S域傳遞函數中:?

Y(z)X(z)=1RC1?z(?1)T+1=TRC(1?z(?1))+T
推導轉化為差分方程后可得:?
Y(n)=TT+RCX(n)+RCT+RCY(n?1)
通過Z變換把S域的傳遞函數轉化成時域的差分方程,分析可得到

一階RC數字濾波的基本算法

X為輸入,Y為濾波后得輸出值,則:?

Y(n)=a?X(n)+(1?a)?Y(n?1)

a為與RC值有關的一個參數,稱為濾波系數,其值決定新采樣值在本次濾波結果中所占的權重,其值通常遠小于1,當采樣間隔t足夠小的時候,?

a=tRC

-濾波系數越小,濾波結果越平穩,但是靈敏度越低;
-濾波系數越大,靈敏度越高,但是濾波結果越不穩定

-本次輸出值主要取決于上次濾波輸出值,當前采樣值對本次輸出貢獻比較小,起到修正作用;

-截止頻率:

fl=a2πt
例如:t=0.5s (f=2Hz), a=1/32?
則fl=(1/32)/(2*3.14*0.5)=0.01Hz;

基本程序:

按照一階濾波的基本原理與公式寫程序,如下:

/*程序中整數運算比小數運算快,為加快程序的處理速度,為計算方便,a取一整數,1-a用256-a來代替,a則取0~255,代表新采樣值在濾波結果中的權重(也可將1-a的基數改為100-a,計算結果做相應處理,這里不做說明)*/#define a 128 char value; //上次濾波值 char filter() {char new_value;new_value=get_ad();//本次采樣值return(256-a)*value/256+a*new_value/256; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

程序初步優化

減少乘、除的運算次數以提高運算速度。?
具體優化辦法:?
先將新采樣值與上次濾波結果進行比較,然后根據比較采用不同的公式計算,這樣程序的運算效率提高了一倍;?
化解基本公式可得:?

Xn<Y(n?1)Yn=Y(n?1)?(Y(n?1)?Xn)×a÷256;
Xn>Y(n?1)Yn=Y(n?1)+(Xn?Y(n?1))×a÷256;

流程圖:?

程序:

/*入口:NEW_DATA 新采樣值OLD_DATA 上次濾波結果k 濾波系數(0~255)(代表在濾波結果中的權重)出口: 本次濾波結果*/char filter_1(char NEW_DATA,char OLD_DATA,char k) {int result;if(NEW_DATA<OLD_DATA){result=OLD_DATA-NEW_DATA;result=result*k;result=result+128;//+128是為了四色五入result=result/256;result=OLD_DATA-result;}else if(NEW_DATA>OLD_DATA){result=NEW_DATA-OLD_DATA;result=result*k;result=result+128;//+128是為了四色五入result=result/256;result=OLD_DATA-result;}else result=OLD_DATA;return((char)result); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

濾波分析:?
當濾波系數為30的時候:?
?
當濾波系數為128的時候:?
?
當濾波系數為200的時候:?
?
可見濾波系數越小,濾波結果越平穩,但是靈敏度越低;濾波系數越大,靈敏度越高,但濾波結果也越不穩定;

不足

-靈敏度和平穩度間的矛盾

-小數舍棄帶來的誤差?
比如:本次采樣值=25,上次濾波結果=24,濾波系數=10;?
根據算法得本次結果=24.0390625?
在單片機中,很少采用浮點數,小數部分要么舍棄,要么進行四色五入。這樣結果就變成24;假如采樣值一直為25那么,結果永遠是24;濾波結果和實際數據一直存在無法消除的誤差。?
嚴重時會導致,在數據采樣數據穩定在某一數值上時,濾波結果曲線偏離實際值(即濾波結果在穩定時與實際結果存在較大誤差);

改善辦法

改變濾波系數,增大會導致平穩度降低,濾波系數太大濾波也就喪失意義;?
將小數位參與計算,會給CPU帶來沉重運算壓力;

優化方法 —– 動態調整濾波系數

1、實現功能:?
-當數據快速變化時,濾波結果能及時跟進,并且數據的變化越快,靈敏度應該越高(靈敏度優先原則)?
-當數據趨于穩定,并在一個范圍內振蕩時,濾波結果能趨于平穩(平穩度優先原則)?
-當數據穩定后,濾波結果能逼近并最終等于采樣數據(消除因計算中小數帶來的誤差)?
2、調整前判斷:?
-數據變化方向是否為同一個方向(如當連續兩次的采樣值都比其上次濾波結果大時,視為變化方向一致,否則視為不一致)?
-數據變化是否較快(主要是判斷采樣值和上一次濾波結果之間的差值)?
3、調整原則:?
-當兩次數據變化不一致時,說明有抖動,將濾波系數清零,忽略本次新采樣值?
-當數據持續向一個方向變化時,逐漸提高濾波系數,提供本次采樣值得權;?
-當數據變化較快(差值>消抖計數加速反應閾值)時,要加速提高濾波系數

調整濾波系數的程序流程:

幾個常量參數及其取值范圍:?
(不同的取值會影響濾波的靈敏度和穩定度)?
1、消抖計數加速反應閾值,取值根據數據情況確定?
2、消抖計數最大值,一般取值10;?
3、濾波系數增量,一般取值范圍為10~30?
4、濾波系數最大值,一般取值255;?

在調用一階濾波程序前,先調用調整濾波系數程序,對系數進行即時調整

濾波效果

1、當采樣數據偶然受到干擾,濾波結果中的干擾完全被濾除?
2、當數據在一個范圍內振蕩時,濾波結果曲線非常平滑,幾乎是一根直線?
3、當采樣數據發生真實的變化時,濾波結果也能比較及時地跟進?
4、當采樣數據趨于穩定時,濾波結果逐漸逼近并最終等于采樣數據

-最終改進算法,兼顧了靈敏度和平穩度的要求;同時又不太消耗系統的RAM;?
-只要合理調整幾個常量,以使得算法更合適實際應用;

應用

下面是一個使用了動態調整濾波的例子:

程序:

//用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) {//角度變化方向,new_flag=1表示角度增加,=0表示角度正在減小if((NEW_DATA-OLD_DATA)>0)new_flag_x=1;else if((NEW_DATA-OLD_DATA)<0)new_flag_x=0;if(new_flag_x==flag) //此次變化與前一次變化方向是否一致,相等表示角度變化方向一致{num_x++;if(fabs((NEW_DATA-OLD_DATA))>Threshold_1)//當變化角度大于Threshold_1度的時候,進行計數器num快速增加,以達到快速增大K值,提高跟隨性num_x+=5; if(num_x>Threshold_2) //計數閾值設置,當角度遞增或遞減速度達到一定速率時,增大K值{K_x=k+0.2; //0.2為K_x的增長值,看實際需要修改num_x=0;}}else {num_x=0;K_x=0.01; //角度變化穩定時K_x值,看實際修改}OLD_DATA=(1-K_x)*OLD_DATA+K_x*NEW_DATA;return OLD_DATA; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

上幾張圖片:?

-

-

修改程序中的閾值1和閾值2,可獲得不同的濾波效果

————————————

再次聲明:本文整理自網絡、《匠人手記》等書籍文章,僅作為個人學習筆記

總結

以上是生活随笔為你收集整理的一阶RC低通滤波的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。