(1)小數的表達
參考:x表示實際的數(*乙個浮點數), q表示它的qn型定點小數(乙個整數)。
q = (int) (x * 2^n)
x = (float)q/2^n
以q12為例:
假設定點小數用16位二進位制表達,最高位是符號位,那麼有效位就是15位。小數點之後可以有0 - 15位。
我們把小數點之後有n位叫做qn,例如小數點之後有12位叫做q12格式的定點小數,而q0就是我們所說的整數。
q12的正數的最大值是 0 111 . 111111111111,第乙個0是符號位,後面的數都是1
那麼這個數表示的小數為0x7fff / 2^12 = 7.999755859375。
對於qn格式的定點小數的表達的數值就它的整數值除以2^n。
那麼把乙個實際所要表達的值x轉換qn型的定點小數的時候,就是x*2^n了。
例如 0.2的q12型定點小數為:0.2*2^12 = 819.2,由於這個數要用整數儲存, 所以是819 即 0x0333。
因為捨棄了小數部分,所以0x0333不是精確的0.2,實際上它是819/2^12 =0.199951171875。
(2)xilinx fpga實現定點數轉小數
選用floating-point ip核,這個ip核很強大,可以實現求解絕對值、加減乘除、定點浮點互轉等。我們選擇定點轉浮點fixed-to-float.
第二部設定輸入訊號的精度表達,我們的輸入是16bit的有符號數,因此選擇custom,設定整形位寬為16,小數字寬為0
第三步設定需要的輸出格式,再此我們選擇單精度的浮點數,exponent width設定為8,小數部分設定為24
在此,有必要詳細的說明一下單精度浮點數的表達方式:
標準的單精度浮點數,總位寬為32 bit,其中包含
1個符號位,表示正負
8個指數字,決定表示的最大值,
23個小數字,決定表示的精度,單精度數的尾數用23位儲存,加上預設的小數點前的1位1,2^(23+1) = 16777216。因為 10^7 < 16777216 < 10^8,所以說單精度浮點數的有效位數是7位。
第四步,其他選項設定為預設即可
(3)**驗證
設定輸入的16bit數為有符號數,初始值為0
reg signed [15:0] s_axis_a_tdata = 0;
執行**後檢視,右鍵設定s_axis_a_tdata顯示為signed decimal模式,可以看到從0逐漸遞增
檢視ip核的輸出,設定m_axis_result_tdata為單精度浮點模式,我們可以看到ip核輸出遞增,數字正確,同時和輸入相比延遲了7個時鐘
DSP中浮點轉定點運算
5 舉例及程式設計中的心得 5 1舉例 第3章 dsp晶元的定點運算.doc 這篇文章中給了乙個很簡單有能說明問題的例子,不想動大腦了,直接引用過來如下。這是乙個對語音頻號 0.3khz 3.4khz 進行低通濾波的c語言程式,低通濾波的截止頻率為800hz,濾波器採用19點的有限衝擊響應fir濾波...
在Xilinx FPGA上快速實現JESD204B
jesd204是一種連線資料轉換器 adc和dac 和邏輯器件的高速序列介面,該標準的 b 修訂版支援高達 12.5 gbps序列資料速率,並可確保 jesd204 鏈路具有可重複的確定性延遲。隨著轉換器的速度和解析度不斷提公升,jesd204b介面在adi高速轉換器和整合rf收發器中也變得更為常見...
基於xilinx FPGA實現LZW壓縮演算法
1 lzw演算法簡介 資料壓縮分為有失真壓縮和無失真壓縮。有失真壓縮是對壓縮後的資料進行重構 解壓縮 重構後的資料與原來的資料有所不同,換來了大的壓縮比。無失真壓縮指對壓縮後的資料進行重構 重構後的資料與原來的資料完全相同。這裡只介紹lzw無失真壓縮和解壓縮演算法。lzw壓縮演算法是一種通用的無失真...