[問題] 如何用C語言寫低通濾波器

作者: cyBochu (Fathome)   2020-05-03 15:41:42
各位好
請問如何用C語言寫一個一階低通濾波器的程式
目前我了解到一階低通濾波器算法 Y(n) = aX(n)+(1-a)Y(n-1)
其中 a:濾波係數 X(n):本次採樣值 Y(n-1):上次濾波輸出值 Y(n):本次濾波值
然後也參考了網路上別人寫的code 但是看不懂到底是怎麼算的
參考網址如下: https://blog.csdn.net/kilotwo/article/details/78794450
請各位大大們解惑了
作者: Schottky (順風相送)   2020-05-03 16:02:00
先說說你想幹嘛,看你找來的範例不像要做訊號處理既然不是訊號處理那你究竟要什麼,定義清楚才能討論如果你真的是要做訊號處理,FFT 轉 freqency domain,切掉不要的頻率再轉回 time domain 即可。這樣你要高通、低通、帶通、甚至等化器效果都一次搞定
作者: Lipraxde (Lipraxde)   2020-05-03 16:06:00
先學好線性系統
作者: alan23273850   2020-05-03 16:14:00
why not MATLAB? uh?
作者: HSUFIT (FireDance)   2020-05-03 21:08:00
他的範例設計上直接跑在一個處理器,他假設這個處理器廠商提供了API可以讀到當前的輸入數值,所以你看到的讀取其實都是在做「採樣點」,這個範例也都是在時域做操作,所以把他做的事排一排其實就很好理解了算術平均率波和滑動率波其實很類似,可以對照著看,兩者差別在於平均只取當下這次的平均,而滑動的delay會寫在函式外面,是針對連續取值的變化型這份是比較偏實戰型的code,要拿來交作業的話要自己轉換一下思維,畢竟實體機器沒有可以看到所有採樣點的上帝視角,只能在連續時間下讀adc的值再delay一個點一個點拿囉
作者: qscgy4 (有點厲害)   2020-05-04 09:01:00
這公式沒什麼難的吧,很常見的濾波原理 a介於 0~1.0之間假設你可以讀到某個ADC值,又希望數值不要太random那你就可以寫一個簡單的公式 例如:新的ADC = 這次ADC x 0.9 + 上次ADC x 0.1以上式為例 a = 0.9,ADC = a*current_ADC+(1-a)old_ADC這也沒什麼好解釋的 就稍微自己看一下吧,另外要注意這種寫法最造成訊號延遲    會
作者: Lipraxde (Lipraxde)   2020-05-04 12:36:00
沒延遲的低通濾波器要怎麼寫?零相移的我倒是會一點
作者: qscgy4 (有點厲害)   2020-05-04 13:52:00
我比較好奇怎麼實現real time 零相移濾波器
作者: w0005151 (藍廳)   2020-05-04 15:32:00
zero phase shift怎麼實現的?理論上很小但不為0不是嗎
作者: Lipraxde (Lipraxde)   2020-05-04 17:51:00
要 real time 的話我只會線性相移的,很抱歉
作者: yoyololicon (蘿莉大好)   2020-05-04 18:52:00
FIR/IIR的差別和應用 了解一下 就會懂推文在說什麼了realtime zero phase shift寫出來應該能拿諾貝爾獎吧

Links booklink

Contact Us: admin [ a t ] ucptt.com