→ ksmrt0123:N=15 但 temp確 *9 /10? 是不是有寫錯? 03/23 21:33
→ ksmrt0123:且這樣要做很多次的 *與/, 好處是? 03/23 21:34
→ stool100:更正了 謝謝 03/23 21:56
※ 編輯: stool100 來自: 220.132.235.209 (03/23 21:56)
→ stool100:每次讀值 做一次./.*.更新目標值. 並不是做10次 03/23 21:58
推 ksmrt0123:這個方法需要的運算比求和再除多很多, 而且應該要用浮點 03/24 00:28
→ ksmrt0123:數算不然誤差可能會太大. 03/24 00:28
→ ksmrt0123:而且 *9, /10 應該是錯的, 正確的運算可能是 *i, /(i+1) 03/24 00:30
→ ksmrt0123:for(i=0;i<N;++i) avg=(avg*i+input)/(i+1); 03/24 00:31
→ ksmrt0123:好處是input還不到N個時, 都可以算出平均值 03/24 00:32
→ ksmrt0123:這在某些應用是必要的 03/24 00:33
有沒有誤解呢?
我認為的需求狀況是
在取得一筆資料時..計算平滑的結果
也就是"低通濾波".. 在我的運算中 只用了兩個變數(浮點數是當然最好)
k先生您是不是 用了i 個變數?然後每次都計算平均?
※ 編輯: stool100 來自: 220.132.235.209 (03/24 00:47)
推 ksmrt0123:以您的例子, 若讀10次va都是9, 迴圈結束後temp還是0 03/24 00:55
→ ksmrt0123:(0*9+9)/10 用整數運算算出來是 0 03/24 00:56
→ ksmrt0123:我用你的變數名改寫式子: 03/24 00:58
→ ksmrt0123:for(i=0;i<N;++i) temp=(temp*i+va)/(i+1); 03/24 00:59
→ ksmrt0123:這樣也許比較容易看出與你的不同 03/24 01:00
→ stool100:1.用浮點數處理.會理想很多.2.我的方式與迴圈不同. 03/24 01:52