<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于FPGA的數字信號處理--什么是定點(diǎn)數?

基于FPGA的數字信號處理--什么是定點(diǎn)數?

作者: 時(shí)間:2024-05-11 來(lái)源:頭條 收藏

在實(shí)際的工程應用中,往往會(huì )進(jìn)行大量的數學(xué)運算。運算時(shí)除了會(huì )用到整數,很多時(shí)候也會(huì )用到小數。而我們知道在數字電路底層,只有「高電平1」和「低電平0」的存在,那么僅憑 0和1 該如何表示小數呢?

本文引用地址:http://dyxdggzs.com/article/202405/458588.htm

數字電路中,小數可以用兩種形式來(lái)表示:「」和「浮點(diǎn)數」。浮點(diǎn)數的內容我們下篇文章再講,本文只講。

什么是?

首先要明確的是,「定點(diǎn)數」的說(shuō)法是相對「浮點(diǎn)數」來(lái)說(shuō)的。要理解什么是定點(diǎn)數,可以先從要理解它的名字開(kāi)始–定是什么?點(diǎn)又是什么?

「定點(diǎn)數」是英語(yǔ)「fixed-point number」的中文翻譯,fixed的意思是固定的,point的意思是小數點(diǎn),所以「定點(diǎn)數」其實(shí)也可以叫「固定小數點(diǎn)的數」。同樣的,「浮點(diǎn)數」自然就是「浮動(dòng)小數點(diǎn)的數」。

在10進(jìn)制中,小數的表示是通過(guò)小數點(diǎn)和它所在位置來(lái)實(shí)現的。比如12.5,它表示的值是十二點(diǎn)五;而1.25則是一點(diǎn)二五。盡管12.5和1.25都用了「1 2 5」這3個(gè)數來(lái)表示,但由于小數點(diǎn)位置的不同,使得前者的數值是后者的十倍。

遺憾的是,電路只能表示1和0,無(wú)法直接表示小數點(diǎn),所以上面的方法在電路中是行不通的。

假如你現在收到一條信息「我傳一個(gè)小數過(guò)來(lái),10100111」,看到這樣一條信息,你恐怕只會(huì )覺(jué)得莫名其妙!10100111是哪門(mén)子小數?慢著(zhù),10100111如果直接轉換成10進(jìn)制數就是167,167當然不是小數,因為它沒(méi)有小數點(diǎn)。但是仔細想想?它真的沒(méi)有小數點(diǎn)嗎?如果把167看做是167.0呢?也就是默認它的小數點(diǎn)是在最右邊呢?

image-20240407204338665

接著(zhù)你很快又收到了第二條信息「我再傳一個(gè)小數過(guò)來(lái),10100111,它的小數點(diǎn)在從右往左數第1位」。這次你終于能看懂了 ,這不就是1010011.1嗎?也就是10進(jìn)制數83.5。那么直接說(shuō)83.5不就完事了嗎?說(shuō)這么多干嗎?

image-20240407204521135

然后是第三條消息「我再傳一個(gè)小數過(guò)來(lái),10100111,它的小數點(diǎn)在從右往左數第2位」。這次傳的是101001.11,即10進(jìn)制數41.75。

image-20240407204616934

······(省略后面的10086條消息)······

看到這是不是清晰很多了–盡管我們無(wú)法直接用小數點(diǎn)來(lái)表示2進(jìn)制小數,但可以通過(guò)指定小數點(diǎn)的位置來(lái)說(shuō)明這是一個(gè)小數??!

約定小數點(diǎn)的位置,且這個(gè)位置固定不變,小數點(diǎn)前、后的數字,分別用2進(jìn)制表示,組合起來(lái)就可以用來(lái)表示和使用2進(jìn)制小數了。用這種方式表示的數就叫做「定點(diǎn)數」。

定點(diǎn)數如何表示數字?

很容易想到,定點(diǎn)數除了能表示小數外,也可以表示整數。因為你可以把小數點(diǎn)的位置約定在最右面,這樣其實(shí)相當于沒(méi)有小數點(diǎn),所以表示的都是整數;同樣的,你也可以把小數點(diǎn)規定在最左邊,這樣表示的就是一個(gè)整數部分為0的小數。

所以定點(diǎn)數的表示可以分為三種情況:

純整數

這種情況約定小數點(diǎn)在最右邊。例如10進(jìn)制數85用8位無(wú)符號2進(jìn)制數表示就是0101_0101,因為小數點(diǎn)在最右邊,所以可以看做是0101_0101.0 。

image-20240407205843367

純小數

定點(diǎn)純小數是指整數部分為0的小數。根據是無(wú)符號數還是有符號數,分為兩種情況:

(1)無(wú)符號數

無(wú)符號數的最高位不表示符號,僅表示數值。這種情況約定小數點(diǎn)的位置在最左邊。例如10進(jìn)制數0.125用8位無(wú)符號2進(jìn)制數表示就是0.0010_0000,因為小數點(diǎn)在最左邊,所以是0010_0000。

image-20240407210804688

(2)有符號數

有符號數的最高位表示符號,不表示數值。這種情況約定小數點(diǎn)的位置在次高位。例如10進(jìn)制數-0.125用8位無(wú)符號2進(jìn)制數表示就是1.0010_000,因為小數點(diǎn)在次高位,所以是1010_0000。

image-20240407211159470

整數 + 小數

除了純整數和純小數這兩種情況外,其實(shí)定點(diǎn)數主要是用來(lái)表示 「整數 + 小數」的情況,例如3.14、1.5、25.125等等。這種情況需要確定以下信息才能正確表示該數:

  • 整數部分長(cháng)度

  • 小數部分長(cháng)度

  • 是否有符號位

image-20240407211936944

整數和小數的長(cháng)度之和確定了用多大的電路來(lái)表示定點(diǎn)數,而二者的長(cháng)度之比則確定了小數點(diǎn)的位置。符號位則確定了該數是一個(gè)有符號數還是一個(gè)無(wú)符號數。

光說(shuō)不練云玩家,接下來(lái)看幾個(gè)例子。

(1)1.25 的定點(diǎn)數表示

首先約定用無(wú)符號數來(lái)表示,然后約定5 位為整數部分,3 位為小數部分。所以有:

1.25(D) = 1.01(B) = 00001.010 = 000010101

(2)-9.5 的定點(diǎn)數表示

首先需要用有符號數來(lái)表示,因為整數9需要4位來(lái)表示,而小數0.5僅需1位就可表示。為此可以約定5位為整數部分(注意最高位為符號位),3 位為小數部分。所以有:

-9.5(D) = 10110.1(B) = 10110.100 = 101101001

定點(diǎn)數的數值范圍

定點(diǎn)數用來(lái)表示小數很方便,但是它也有個(gè)很大的問(wèn)題–它的表示范圍很小。

以5 位表示整數部分,3 位表示小數部分的無(wú)符號定點(diǎn)數為例,它的整數部分可以表示的范圍是00000-11111,即0-31,步長(cháng)是1;小數部分的范圍是0.000-0.111,即0-0.875,步長(cháng)是0.125。綜合起來(lái)范圍是0-31.875,步長(cháng)為0.125。

有符號數的因為是用補碼表示,所以它的范圍取值比較特殊。以5 位表示整數部分,3 位表示小數部分的有符號定點(diǎn)數為例,它能表示的最小值是10000_000,即-32,它能表示的最大值是01111_111,即15.875。

若以m表示定點(diǎn)數的整數位寬(m不包含符號位),以n表示定點(diǎn)數的小數位寬,則有符號數和無(wú)符號數的定點(diǎn)數的表示范圍為:

有符號數-2^m ~ (2^m - 2^-n)
無(wú)符號數0 ~ (2^m - 2^-n)

如果想表示更大范圍、更高精度的值,怎么辦?

  • 擴大整體位寬:比如使用 16位、32位來(lái)表示, 這樣相應地整數部分和小數部分的寬度都可以增加,自然表示范圍也就變大了。但是位寬的增加,也會(huì )帶來(lái)更多的硬件開(kāi)銷(xiāo)

  • 改變小數點(diǎn)的位置:小數點(diǎn)向后移動(dòng),那么整個(gè)數字范圍就會(huì )擴大,但是小數部分的精度就會(huì )越來(lái)越低。小數點(diǎn)向前移,表示的精度會(huì )變高,但是數字的表示范圍又會(huì )降低。所以說(shuō)定點(diǎn)數小數點(diǎn)位置的確定是一個(gè)范圍和精度的trade off(權衡)

一些定點(diǎn)數的表示格式

除了可以用類(lèi)似「以5 位表示整數部分,3 位表示小數部分的無(wú)符號定點(diǎn)數」的語(yǔ)言來(lái)描述定點(diǎn)數的格式外,還有多種定點(diǎn)數的表示格式。常見(jiàn)的有以下幾種:

Q格式(Q notation)

Q格式的一般形式是:

Qm.n

默認情況下,用Q格式描述的都是有符號定點(diǎn)數。其中m表示整數部分的長(cháng)度(這個(gè)值不包括符號位),n表示小數部分的長(cháng)度。所以用Q格式描述的定點(diǎn)數的整體長(cháng)度為:

w = m + n + 1 //整數部分長(cháng)度 + 小數部分長(cháng)度 + 符號位長(cháng)度

例如 「 Q3.12 」描述的是一個(gè)整體長(cháng)度為16位的2進(jìn)制有符號定點(diǎn)數,它的整數部分長(cháng)度是3,而小數部分長(cháng)度是12。根據小數部分的長(cháng)度,可以推斷出分辨率為 2^-12。

在Q前面加一個(gè) U 即可用來(lái)表示無(wú)符號的2進(jìn)制定點(diǎn)數。例如 「 UQ1.15」描述的就是一個(gè)整數部分長(cháng)度為1,小數部分長(cháng)度為15的無(wú)符號的2進(jìn)制定點(diǎn)數。

整數部分的長(cháng)度值和小數點(diǎn)可以被省略,而只描述小數部分的長(cháng)度。例如「 Q12 」描述的就是一個(gè)小數部分長(cháng)度是12的2進(jìn)制有符號定點(diǎn)數,但是它的整體長(cháng)度是不確定的,你可以額外指定整體長(cháng)度,或者說(shuō)整體長(cháng)度就取決于存儲這個(gè)定點(diǎn)數的寄存器。

如果這個(gè)定點(diǎn)數存儲一個(gè)16位的寄存器,那它的值就是:

xxxx . xxxx_xxxx_xxxx

如果這個(gè)定點(diǎn)數存儲一個(gè)32位的寄存器,那它的值就是:

xxxx_xxxx_xxxx_xxxx_xxxx_xxxx . xxxx_xxxx_xxxx

其實(shí)也可以看出來(lái),這種表示方法就是把它的值乘以 2^-12 。

這種整數長(cháng)度m不包括符號位的Q格式主要是TI公司的DSP在使用,ARM公司也有一種類(lèi)似的Q格式,但是它的整數長(cháng)度m是包含符號位的。表示方式的不同不是什么大不了的事,只要是使用過(guò)程中確定好了就行,為此你甚至也可以自己創(chuàng )造一套定點(diǎn)數表示方式(只要不怕沒(méi)人用就行,嘿嘿)。

S表示法

S表示法的一般形式是:

Sm.n

其中S表示這是一個(gè)有符號的定點(diǎn)數,m表示整數位數(m不包括符號位),n表示小數位數。這種方法其實(shí)跟Q格式很像,只不過(guò)它的表示無(wú)符號定點(diǎn)數的方法不是在前面加 U ,而是去掉 S,像這樣:

m.n

例如「 2.4 」表示的就是一個(gè)整數位數為2,小數位數為4的無(wú)符號定點(diǎn)數。

總結

總的來(lái)說(shuō),用定點(diǎn)數表示的小數,不僅數值的范圍表示有限,而且其精度也很低。要想解決這 2 個(gè)問(wèn)題,人們就提出了使用「浮點(diǎn)數」的方式表示數字,關(guān)于浮點(diǎn)數的表示方法,我們會(huì )在下一篇文章進(jìn)行講解。

定點(diǎn)數和浮點(diǎn)數都可以表示小數,而定點(diǎn)數的精度固定,表現范圍比較有限;但是,定點(diǎn)數在硬件上比較容易實(shí)現,在實(shí)際的數據算法中,定點(diǎn)數運算效率比浮點(diǎn)數的運算效率高很多,同時(shí)定點(diǎn)數使用的資源也比較少。因此,定點(diǎn)數被廣泛地應用在處理的各種應用場(chǎng)景中。

  1. 定點(diǎn)數是在計算機中表示數字的一種方式,它既可以表示整數,也可以表示小數

  2. 在固定 bit 下,約定小數點(diǎn)的位置,然后把整數部分和小數部分分別轉換為二進(jìn)制,就是定點(diǎn)數的結果

  3. 受限于小數點(diǎn)的位置,用定點(diǎn)數表示小數時(shí),數值的范圍和小數精度是有限的

  4. 在現代計算機中,定點(diǎn)數通常用來(lái)表示整數,對于高精度的小數,通常用浮點(diǎn)數表示




關(guān)鍵詞: FPGA 數字信號 定點(diǎn)數

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>