官术网_书友最值得收藏!

第3章 數(shù)字信號(hào)處理中的基本運(yùn)算

以數(shù)字方式進(jìn)行信號(hào)處理,歸根結(jié)底可分解為一些基本的數(shù)學(xué)運(yùn)算,如加法運(yùn)算、乘法運(yùn)算、累加運(yùn)算、比較運(yùn)算及開方運(yùn)算等。其中,加法運(yùn)算和乘法運(yùn)算是數(shù)字信號(hào)處理中的兩大主要運(yùn)算。既然是數(shù)學(xué)運(yùn)算,就涉及一個(gè)根本問題:數(shù)字的表示方法。而數(shù)字又可分為定點(diǎn)數(shù)和浮點(diǎn)數(shù),這使問題進(jìn)一步分解為定點(diǎn)數(shù)的表示和浮點(diǎn)數(shù)的表示。就FPGA而言,其勝任定點(diǎn)運(yùn)算的能力更為顯著。鑒于此,本章只討論定點(diǎn)數(shù)所涉及的相關(guān)內(nèi)容。

眾所周知,計(jì)算機(jī)以二進(jìn)制方式表示數(shù)字,所以深入理解二進(jìn)制原碼、反碼和補(bǔ)碼等基本概念是進(jìn)行邏輯設(shè)計(jì)的關(guān)鍵環(huán)節(jié)。本章將二進(jìn)制運(yùn)算貫穿其中,重點(diǎn)闡述基本運(yùn)算涉及的相關(guān)問題及相應(yīng)的電路設(shè)計(jì)。

3.1 定點(diǎn)數(shù)的表示

3.1.1 二進(jìn)制數(shù)的原碼與補(bǔ)碼

二進(jìn)制計(jì)數(shù)是數(shù)字電路的本質(zhì)。數(shù)字電路中的高、低電平即表征了1和0。為了能夠正確地使用二進(jìn)制計(jì)數(shù),就必須清楚二進(jìn)制表示數(shù)字的方法和特點(diǎn)。這里首先給出以下結(jié)論。

N位二進(jìn)制數(shù)所能表示的無(wú)符號(hào)整數(shù)范圍是[0,2N-1],所能表示的有符號(hào)整數(shù)范圍是[-2N-1,2N-1 -1]。

需要強(qiáng)調(diào)的是,N位二進(jìn)制數(shù)是無(wú)法表示有符號(hào)整數(shù)2N-1的。在表示無(wú)符號(hào)整數(shù)時(shí),采用的是二進(jìn)制原碼;而表示有符號(hào)整數(shù)時(shí),則采用二進(jìn)制補(bǔ)碼,此時(shí),最高位為符號(hào)位,0表示正數(shù),1表示負(fù)數(shù)。因此,在用二進(jìn)制數(shù)表示無(wú)符號(hào)整數(shù)時(shí),可虛擬出一個(gè)符號(hào)位作為最高位,此符號(hào)位始終為0,從而達(dá)到二進(jìn)制原碼與補(bǔ)碼的統(tǒng)一。

表3.1舉例給出了4位二進(jìn)制原碼與無(wú)符號(hào)整數(shù)的對(duì)應(yīng)關(guān)系[1],也給出了將二進(jìn)制原碼轉(zhuǎn)換為無(wú)符號(hào)整數(shù)的方法。例如,12=1 ×8+1 ×4。

表3.1 4位二進(jìn)制原碼與無(wú)符號(hào)整數(shù)的對(duì)應(yīng)關(guān)系

進(jìn)一步,將4位二進(jìn)制原碼從最高有效位(Most Significant Bit,MSB)到最低有效位(Least Significant Bit,LSB)依次展開縱向排列,如圖3.1所示,圖中DEC表示十進(jìn)制數(shù)。可以發(fā)現(xiàn),最低位波形變化速率是次低位的2倍,次低位波形變化速率是次高位的2倍,次高位波形變化速率又是最高位的2倍。這為設(shè)計(jì)等占空比的2的整數(shù)次冪的分頻器提供了依據(jù),也為測(cè)試模數(shù)轉(zhuǎn)換器(Analog Digital Converter,ADC)芯片提供了方法。同時(shí),也啟迪設(shè)計(jì)師從不同角度去看待事物,正如宋代著名詩(shī)人蘇軾那極富哲理的詩(shī)句“橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同”。

圖3.1 展開的4位二進(jìn)制原碼縱向排列

在設(shè)計(jì)計(jì)數(shù)器時(shí)常用無(wú)符號(hào)整數(shù),而在數(shù)學(xué)運(yùn)算中大多采用有符號(hào)整數(shù),這就涉及如何獲取負(fù)整數(shù)的二進(jìn)制補(bǔ)碼的問題。表3.2舉例給出了4位二進(jìn)制補(bǔ)碼與有符號(hào)整數(shù)的對(duì)應(yīng)關(guān)系,也給出了將二進(jìn)制補(bǔ)碼轉(zhuǎn)換為有符號(hào)整數(shù)的方法。例如,-4=1 ×(-8)+1 ×4。對(duì)比表3.1和表3.2,不難發(fā)現(xiàn)-7的補(bǔ)碼和9的原碼以4位二進(jìn)制表示時(shí)相同,且-7和9分別取絕對(duì)值并相加,其結(jié)果為24。這就為我們求取負(fù)整數(shù)的二進(jìn)制補(bǔ)碼提供了方法,如圖3.2所示,圖中給出了3種求取負(fù)整數(shù)二進(jìn)制補(bǔ)碼的方法。

表3.2 4位二進(jìn)制補(bǔ)碼與有符號(hào)整數(shù)的對(duì)應(yīng)關(guān)系

圖3.2 將整數(shù)轉(zhuǎn)換為二進(jìn)制補(bǔ)碼的方法

根據(jù)如圖3.2所示的求補(bǔ)碼的方法,求取有符號(hào)整數(shù)-4的4位二進(jìn)制補(bǔ)碼可按以下方法進(jìn)行。

方法1:24 -| -4|=12,12以4位二進(jìn)制原碼表示為1100,這即為-4的4位二進(jìn)制補(bǔ)碼。

方法2:|-4|=4,4以4位二進(jìn)制原碼表示為0100,其反碼為1011,加1為1100。

方法3:|-4|=4,4以4位二進(jìn)制原碼表示為0100,逐位取反直至最后一個(gè)1止,即為1100,次高位1及其后面的兩個(gè)0保持不變。

用同樣的方法可知,-4的5位二進(jìn)制補(bǔ)碼為11100。不難發(fā)現(xiàn),11100是1100將符號(hào)位擴(kuò)展1位得到的。所謂符合位擴(kuò)展,是指將符號(hào)位向高位復(fù)制。這說明符號(hào)位擴(kuò)展是不改變數(shù)值大小的,認(rèn)識(shí)這一點(diǎn)是非常重要的。

根據(jù)上述有符號(hào)整數(shù)與二進(jìn)制碼的對(duì)應(yīng)關(guān)系,對(duì)于給定的有符號(hào)整數(shù) X,可由式(3.1)確定其以二進(jìn)制補(bǔ)碼表示時(shí)的最小位寬ws

式中,ceil表示向上取整。

對(duì)于無(wú)符號(hào)整數(shù),因?yàn)椴恍枰?hào)位,故其以二進(jìn)制原碼表示時(shí)的最小位寬為

3.1.2 定點(diǎn)數(shù)的字長(zhǎng)問題

字長(zhǎng)(位寬)和小數(shù)部分字長(zhǎng)共同構(gòu)成了定點(diǎn)數(shù)的兩個(gè)要素。以wl表示字長(zhǎng),以fl表示小數(shù)部分字長(zhǎng),那么有符號(hào)定點(diǎn)數(shù)以Fix_wl_fl的形式表示,無(wú)符號(hào)定點(diǎn)數(shù)以UFix_wl_fl的形式表示。整數(shù)可看做是小數(shù)點(diǎn)在最后一位,即fl為0。對(duì)于定點(diǎn)小數(shù),一旦wl與fl確定,那么小數(shù)點(diǎn)的位置即可固定。表3.3舉例給出了Fix_5_3與十進(jìn)制小數(shù)的對(duì)應(yīng)關(guān)系。

在定點(diǎn)小數(shù)中,有一類值得關(guān)注,那就是只有一位整數(shù)位的定點(diǎn)小數(shù)。表3.4給出了Fix_5_4與十進(jìn)制小數(shù)的對(duì)應(yīng)關(guān)系。可見,此類定點(diǎn)小數(shù)只能表示(-1,1)區(qū)間內(nèi)的純小數(shù),范圍受限。在表3.4中,如果將小數(shù)點(diǎn)“抹掉”,把其視為整數(shù),那么也就是將數(shù)值放大了16倍,這對(duì)運(yùn)算結(jié)果并沒有實(shí)質(zhì)的影響。采用FPGA實(shí)現(xiàn)數(shù)字信號(hào)處理時(shí)是可以這么做的。

表3.3 Fix_5_3與十進(jìn)制小數(shù)的對(duì)應(yīng)關(guān)系

表3.4 Fix_5_4與十進(jìn)制小數(shù)的對(duì)應(yīng)關(guān)系

定點(diǎn)數(shù)據(jù)在運(yùn)算時(shí)要防止溢出,包括上溢(Overflow)和下溢(Underflow)。上溢是指運(yùn)算結(jié)果超出了定點(diǎn)數(shù)整數(shù)部分所能表示的范圍,下溢是指運(yùn)算結(jié)果超出了定點(diǎn)數(shù)小數(shù)部分所能表示的范圍。例如,UFix_4_2所能表示的定點(diǎn)數(shù)的范圍為[0,3.75],步進(jìn)(精度)為0.25,如果運(yùn)算結(jié)果為4,則發(fā)生上溢;如果運(yùn)算結(jié)果為0.125,則發(fā)生下溢。一旦溢出將會(huì)造成計(jì)算精度的損失甚至結(jié)果的錯(cuò)誤。因此,合理地選擇字長(zhǎng)尤為重要。

定點(diǎn)數(shù)據(jù)的量化模式?jīng)Q定了當(dāng)運(yùn)算結(jié)果的精度高于定點(diǎn)數(shù)所能表示的精度時(shí)如何對(duì)超出精度部分的比特處理。通常有兩種處理方式:Truncate和Round。Truncate為直接截尾,將超出精度部分的比特舍棄掉。Round即“四舍五入”,將舍去的比特的最高位加到要保留的比特的最低位。量化模式的兩種處理方式如圖3.3所示。顯然,采用Round可獲得更高的精度,但也需要額外的資源。這兩種方式都是針對(duì)發(fā)生下溢時(shí)的處理方式。

圖3.3 量化模式的兩種處理方式

定點(diǎn)數(shù)據(jù)的溢出模式?jīng)Q定了當(dāng)運(yùn)算結(jié)果大于定點(diǎn)數(shù)所能表示的最大值時(shí)如何對(duì)溢出部分處理。通常有兩種處理方式:Saturate和Wrap。Saturate為飽和處理,一旦溢出就將計(jì)算結(jié)果飽和處理為最大值。Wrap為截?cái)嗵幚怼R绯瞿J降膬煞N處理方式如圖3.4所示。不難看出溢出對(duì)計(jì)算結(jié)果的不利影響。這兩種方式都是針對(duì)發(fā)生上溢時(shí)的處理方式。

圖3.4 溢出模式的兩種處理方式

主站蜘蛛池模板: 湘阴县| 湖口县| 阿城市| 平罗县| 新绛县| 邵阳县| 华阴市| 新绛县| 大邑县| 盐池县| 黄大仙区| 海宁市| 治县。| 岳阳市| 台东县| 临沭县| 东乌珠穆沁旗| 临夏县| 临澧县| 吴桥县| 乌什县| 云南省| 鱼台县| 沭阳县| 陕西省| 岳阳县| 维西| 兴安县| 福建省| 广河县| 磐安县| 荣昌县| 安泽县| 长宁县| 宝坻区| 遂川县| 长寿区| 且末县| 龙州县| 天等县| 南充市|