最近在影象演算法的中間遇到一下小數的運算問題,雖然之前也遇到很多次,但是這次記錄下來。
r = 1.164(y-16) + 1.596(cr-128)
g = 1.164(y-16) - 0.391(cb-128) - 0.813(cr-128)
b = 1.164(y-16) + 2.018(cb-128)
遇到的一些問題是,色彩空間的轉換問題,其中使用到的小數運算。
來看乙個例項 dout = data*1.8 + 32; 在整個算式中需要用到一次小數的乘法
加入quartus2中進行編譯 會發現 在小數乘法這一行會報錯,這說明小數是沒有辦法直接進行乘法的。
解決這個問題的一般思路就是,先對小數進行擴大,計算之後再進行相同倍數的縮小,當然其中避免不了精度的丟失,以及計算效率的問題。
經過上述思路,我們對程式進行簡單的變換,看一下**結果,可以發現 經過3個clk輸出的結果是正確的(有保留)。
綜合出來的rtl如圖所示,為了解決計算中的效率問題,提高整個時鐘的執行速度可以增加pipline進行優化。
FPGA定點小數運算
謂定點小數,就是小數點的位置是固定的。我們是要用整數來表示定點小數,由於小數點的位置是固定的,所以就沒有必要儲存它 如果儲存了小數點的位置,那就是浮點數了 既然沒有儲存小數點的位置,那麼計算機當然就不知道小數點的位置,所以這個小數點的位置是我們寫程式的人自己需要牢記的。先以10進製為例。如果我們能夠...
FPGA中實現對數運算
fpga中實現對數運算主要有三種方法 1 在外部直接算好對數值,按照數值範圍做個表,存在ram裡,到時候查表。為了減少表深度,提高資源利用率,可以考慮去掉部分低位數值,損失一定的精度。2 使用cordic演算法求解對數。3 log10 x ln x log10 e log10 e 是常數可以手動先計...
FPGA內部計算小數
謂定點小數,就是小數點的位置是固定的。我們是要用整數來表示定點小數,由於小數點的位置是固定的,所以就沒有必要儲存它 如果儲存了小數點的位置,那就是浮點數了 既然沒有儲存小數點的位置,那麼計算機當然就不知道小數點的位置,所以這個小數點的位置是我們寫程式的人自己需要牢記的。先以10進製為例。如果我們能夠...