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