- 基于FPGA的數(shù)字信號(hào)處理
- 高亞軍編著
- 297字
- 2019-01-09 14:45:59
第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 溢出模式的兩種處理方式
- 單片機(jī)基礎(chǔ)及應(yīng)用項(xiàng)目式教程
- ABAQUS 2016有限元分析從入門到精通
- VxWorks設(shè)備驅(qū)動(dòng)開發(fā)詳解
- 基于HCS12的嵌入式系統(tǒng)設(shè)計(jì)
- DSP技術(shù)與應(yīng)用實(shí)例
- 單片機(jī)原理與應(yīng)用:基于Keil+Proteus
- ANSYS Workbench 17.0有限元分析從入門到精通
- STM32W無(wú)線射頻Zigbee單片機(jī)原理與應(yīng)用
- 單片微型計(jì)算機(jī)原理及應(yīng)用
- 單片機(jī)應(yīng)用技術(shù)實(shí)訓(xùn)指導(dǎo)
- 零基礎(chǔ)學(xué)51單片機(jī)(C語(yǔ)言版)
- 我和PIC單片機(jī):基于PIC18
- 案例解說組態(tài)軟件典型控制應(yīng)用
- 嵌入式系統(tǒng):基于項(xiàng)目的分析和設(shè)計(jì)
- 嵌入式通信系統(tǒng)