Re: [問題] 8051的一些小問題(修正)

看板ASM (組合語言)作者 (思念是毒妳是解藥)時間15年前 (2010/03/23 13:02), 編輯推噓2(2014)
留言16則, 2人參與, 最新討論串5/5 (看更多)
參考一下我的寫法 不限asm 或是 c temp是暫存值 va是當前值 假設取平均的次數是10 --------------------------- temp=0 迴圈開始 va=取得輸入值 temp=(temp*9+va)/10; ...................... ..................... 迴圈結束 ----------------------------- 當平均次數是16.就可以用右移4 BIT來取 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.235.209

03/23 21:33, , 1F
N=15 但 temp確 *9 /10? 是不是有寫錯?
03/23 21:33, 1F

03/23 21:34, , 2F
且這樣要做很多次的 *與/, 好處是?
03/23 21:34, 2F

03/23 21:56, , 3F
更正了 謝謝
03/23 21:56, 3F
※ 編輯: stool100 來自: 220.132.235.209 (03/23 21:56)

03/23 21:58, , 4F
每次讀值 做一次./.*.更新目標值. 並不是做10次
03/23 21:58, 4F

03/24 00:28, , 5F
這個方法需要的運算比求和再除多很多, 而且應該要用浮點
03/24 00:28, 5F

03/24 00:28, , 6F
數算不然誤差可能會太大.
03/24 00:28, 6F

03/24 00:30, , 7F
而且 *9, /10 應該是錯的, 正確的運算可能是 *i, /(i+1)
03/24 00:30, 7F

03/24 00:31, , 8F
for(i=0;i<N;++i) avg=(avg*i+input)/(i+1);
03/24 00:31, 8F

03/24 00:32, , 9F
好處是input還不到N個時, 都可以算出平均值
03/24 00:32, 9F

03/24 00:33, , 10F
這在某些應用是必要的
03/24 00:33, 10F
有沒有誤解呢? 我認為的需求狀況是 在取得一筆資料時..計算平滑的結果 也就是"低通濾波".. 在我的運算中 只用了兩個變數(浮點數是當然最好) k先生您是不是 用了i 個變數?然後每次都計算平均? ※ 編輯: stool100 來自: 220.132.235.209 (03/24 00:47)

03/24 00:55, , 11F
以您的例子, 若讀10次va都是9, 迴圈結束後temp還是0
03/24 00:55, 11F

03/24 00:56, , 12F
(0*9+9)/10 用整數運算算出來是 0
03/24 00:56, 12F

03/24 00:58, , 13F
我用你的變數名改寫式子:
03/24 00:58, 13F

03/24 00:59, , 14F
for(i=0;i<N;++i) temp=(temp*i+va)/(i+1);
03/24 00:59, 14F

03/24 01:00, , 15F
這樣也許比較容易看出與你的不同
03/24 01:00, 15F

03/24 01:52, , 16F
1.用浮點數處理.會理想很多.2.我的方式與迴圈不同.
03/24 01:52, 16F
文章代碼(AID): #1Bg4jUg_ (ASM)
文章代碼(AID): #1Bg4jUg_ (ASM)