看板 Electronics 關於我們 聯絡資訊
各位大大好 最近在修改學長姐的硬體遇到一些問題 有一筆data[15:0]運算完後最後會乘上一個常數K=0.6073 parameter signed K=14'b01001101101111 我有算過 2^(-1)+2^(-4)+2^(-5)+2^(-7)+2^(-8)+2^(-10)+2^(-11)+2^(-12)+2^(-13) 會趨近於0.6073沒錯 data_m = data*k; data_out = {data_m[29],data_m[27:13]}; 想請問最後data_out為什麼是這樣取... 還有想請問我有嘗試將data改成14bits 但我最後異想天開的改成 data_out = {data_m[27],data_m[25:13]} 可是最後發現結果會跟演算法不符 感謝各位大大了 P.S. data的部分學長姐應該是假設前8bits為整數,後8bits為小數 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.13.192.206 ※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1459429274.A.A49.html ※ 編輯: StrKO (101.13.192.206), 03/31/2016 21:05:46
s48102003: 常數14bit,有1個是sign bit,所以你有13bit的小數,你 03/31 21:13
s48102003: 的data有8位小數,與常數相乘後會變為21位,為了維持位 03/31 21:13
s48102003: 元寬度所以才會去掉後面新增的13bit小數從14位開始取。 03/31 21:13
StrKO: 那請問[28]是因為k跟data的sign bit最後統一用[29]來代表, 03/31 22:16
StrKO: 所以[28]被省略掉了嗎? 03/31 22:16
s48102003: 取29是因為相乘之後29是最高位元,為Sign Bit,你取28 03/31 23:16
s48102003: 或27的話就變成取到你整數部份了。 03/31 23:16
dasala: cordic電路哦? 04/01 12:17
StrKO: 是的... 04/01 13:27
StrKO: 後來發現原來是我自己發蠢 04/01 13:28
StrKO: 改成14bits 直接取data_out = {data_m[27],data_m[25:13]} 04/01 13:29
StrKO: 是可以的 04/01 13:29