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

看板C_and_CPP (C/C++)作者 (drinktea)時間5年前 (2020/05/03 15:41), 編輯推噓7(7026)
留言33則, 7人參與, 5年前最新討論串1/1
各位好 請問如何用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 請各位大大們解惑了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.165.134.238 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1588491709.A.36B.html

05/03 16:02, 5年前 , 1F
先說說你想幹嘛,看你找來的範例不像要做訊號處理
05/03 16:02, 1F

05/03 16:02, 5年前 , 2F
既然不是訊號處理那你究竟要什麼,定義清楚才能討論
05/03 16:02, 2F

05/03 16:04, 5年前 , 3F
如果你真的是要做訊號處理,FFT 轉 freqency domain,
05/03 16:04, 3F

05/03 16:04, 5年前 , 4F
切掉不要的頻率再轉回 time domain 即可。
05/03 16:04, 4F

05/03 16:05, 5年前 , 5F
這樣你要高通、低通、帶通、甚至等化器效果都一次搞定
05/03 16:05, 5F

05/03 16:06, 5年前 , 6F
先學好線性系統
05/03 16:06, 6F

05/03 16:14, 5年前 , 7F
why not MATLAB? uh?
05/03 16:14, 7F

05/03 21:08, 5年前 , 8F
他的範例設計上直接跑在一個處理器,他假設這個處理器廠商
05/03 21:08, 8F

05/03 21:08, 5年前 , 9F
提供了API可以讀到當前的輸入數值,所以你看到的讀取其實
05/03 21:08, 9F

05/03 21:08, 5年前 , 10F
都是在做「採樣點」,這個範例也都是在時域做操作,所以把
05/03 21:08, 10F

05/03 21:08, 5年前 , 11F
他做的事排一排其實就很好理解了
05/03 21:08, 11F

05/03 21:24, 5年前 , 12F
算術平均率波和滑動率波其實很類似,可以對照著看,兩者差
05/03 21:24, 12F

05/03 21:24, 5年前 , 13F
別在於平均只取當下這次的平均,而滑動的delay會寫在函式
05/03 21:24, 13F

05/03 21:24, 5年前 , 14F
外面,是針對連續取值的變化型
05/03 21:24, 14F

05/03 21:38, 5年前 , 15F
這份是比較偏實戰型的code,要拿來交作業的話要自己轉換一
05/03 21:38, 15F

05/03 21:38, 5年前 , 16F
下思維,畢竟實體機器沒有可以看到所有採樣點的上帝視角,
05/03 21:38, 16F

05/03 21:38, 5年前 , 17F
只能在連續時間下讀adc的值再delay一個點一個點拿囉
05/03 21:38, 17F

05/04 09:01, 5年前 , 18F
這公式沒什麼難的吧,很常見的濾波原理 a介於 0~1.0之間
05/04 09:01, 18F

05/04 09:02, 5年前 , 19F
假設你可以讀到某個ADC值,又希望數值不要太random
05/04 09:02, 19F

05/04 09:03, 5年前 , 20F
那你就可以寫一個簡單的公式 例如:
05/04 09:03, 20F

05/04 09:04, 5年前 , 21F
新的ADC = 這次ADC x 0.9 + 上次ADC x 0.1
05/04 09:04, 21F

05/04 09:06, 5年前 , 22F
以上式為例 a = 0.9,ADC = a*current_ADC+(1-a)old_ADC
05/04 09:06, 22F

05/04 09:07, 5年前 , 23F
這也沒什麼好解釋的 就稍微自己看一下吧,另外要注意
05/04 09:07, 23F

05/04 09:07, 5年前 , 24F
這種寫法最造成訊號延遲
05/04 09:07, 24F

05/04 09:08, 5年前 , 25F
    會
05/04 09:08, 25F

05/04 12:36, 5年前 , 26F
沒延遲的低通濾波器要怎麼寫?零相移的我倒是會一點
05/04 12:36, 26F

05/04 13:52, 5年前 , 27F
我比較好奇怎麼實現real time 零相移濾波器
05/04 13:52, 27F

05/04 15:32, 5年前 , 28F
zero phase shift怎麼實現的?理論上很小但不為0不是嗎
05/04 15:32, 28F

05/04 17:51, 5年前 , 29F
要 real time 的話我只會線性相移的,很抱歉
05/04 17:51, 29F

05/04 18:52, 5年前 , 30F
FIR/IIR的差別和應用 了解一下 就會懂推文在說什麼
05/04 18:52, 30F

05/04 18:52, 5年前 , 31F
05/04 18:52, 31F

05/04 18:54, 5年前 , 32F
realtime zero phase shift寫出來應該能拿諾貝爾獎
05/04 18:54, 32F

05/04 18:54, 5年前 , 33F
05/04 18:54, 33F
文章代碼(AID): #1UhdMzDh (C_and_CPP)
文章代碼(AID): #1UhdMzDh (C_and_CPP)