<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è) > 嵌入式系統 > 設計應用 > 定點(diǎn)DSP C55X實(shí)現浮點(diǎn)相關(guān)運算

定點(diǎn)DSP C55X實(shí)現浮點(diǎn)相關(guān)運算

作者: 時(shí)間:2008-03-18 來(lái)源: 收藏

  引 言

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

  結構可以分為定點(diǎn)和浮點(diǎn)型兩種。其中,定點(diǎn)型可以實(shí)現整數、小數和特定的指數運算,它具有運算速度快、占用資源少、成本低等特點(diǎn);靈活地使用定點(diǎn)型進(jìn)行浮點(diǎn)運算能夠提高運算的效率。目前對定點(diǎn)DSP結構支持下的浮點(diǎn)需求也在不斷增長(cháng),主要原因是:實(shí)現算法的代碼往往是采用C/C++編寫(xiě),如果其中有標準型的浮點(diǎn)數據處理,又必須采用定點(diǎn)DSP器件,那么就需要將浮點(diǎn)算法轉換成定點(diǎn)格式進(jìn)行運算。同時(shí),定點(diǎn)DSP結構下的浮點(diǎn)運算有很強的可行性,因為C語(yǔ)言和匯編語(yǔ)言分別具有可移植性強和運算效率高的特點(diǎn),因此在定點(diǎn)DSP中結合C語(yǔ)言和匯編語(yǔ)言的混合編程技術(shù)將大大提高編程的靈活度,以及運算速度。

  大多數DSP的開(kāi)發(fā)工具只是在C語(yǔ)言的基礎上支持標準的浮點(diǎn)運算,而定點(diǎn)DSP硬件一般都是面向定點(diǎn)的運算,不支持標準的浮點(diǎn)運算,缺乏硬件的支持極大地限制了浮點(diǎn)的應用,因而標準的浮點(diǎn)運算在實(shí)際定點(diǎn)DSP應用中并不多見(jiàn)。C5509是一款16位定點(diǎn)DSP。在本文中,對C5509輸入FTSK信號,用C語(yǔ)言和匯編語(yǔ)言混合編程的方式對輸入浮點(diǎn)型的FTSK信號進(jìn)行相關(guān)運算,并輸出浮點(diǎn)運算結果。這種方法的特點(diǎn)是:在C語(yǔ)言中方便地進(jìn)行數據格式轉化,在匯編語(yǔ)言中進(jìn)行乘法和加法運算,既達到很高的運算精度,又極大地提高了運算效率。

  1 定點(diǎn)DSP C語(yǔ)言開(kāi)發(fā)環(huán)境中的浮點(diǎn)數據格式

  在定點(diǎn)DSP中,整型數是用16位二進(jìn)制格式來(lái)存儲的,但是DSP的C語(yǔ)言和匯編語(yǔ)言中定義的單精度浮點(diǎn)型數據都是標準C語(yǔ)言浮點(diǎn)表示格式。這種格式在C55X中,符合IEEE754標準。它定義了單精度32位和雙精度64位的格式。32位IEEE754單精度標準中,第一位是符號位,其后8位用來(lái)存放指數,最后23位用來(lái)存放小數尾數,如下:

  

定點(diǎn)DSP C語(yǔ)言開(kāi)發(fā)環(huán)境中的浮點(diǎn)數據格式

 

  在IEEE754單精度浮點(diǎn)標準中,明確包含了符號位,第32位用作符號位。尾數進(jìn)行了歸一化,以產(chǎn)生一個(gè)1.f格式的數,f是小數部分,占用分配的23位。因為規格化的數最左一位總是1,所以不需要存儲該位,在該格式中它是隱式的。這樣一個(gè)n位的尾數實(shí)際上存放了一個(gè)n+l位數。為使尾數規格化,指數被適當增減,來(lái)跟蹤規格化所需的左右移位數以及小數點(diǎn)。

  最常用的是用8位指數表示0~255,即0

公式

 

  其中:s是符號位,0為正數,1為負數;e是指數位,無(wú)符號8位;f是尾數的小數部分,23位。

  例如:IEEE754格式下浮點(diǎn)正數00110001001111l000000001000000000的十進(jìn)制表示為:

  

IEEE754格式下浮點(diǎn)正數00110001001111l000000001000000000的十進(jìn)制表示

 

  2 相關(guān)運算的實(shí)現

  2.1 數據提取方式

  在本軟件設計中,FTSK輸入數據的頻率包含800Hz,1200Hz、1600Hz、2020Hz,通過(guò)相關(guān)運算提取800Hz信號。具體參數是:FTSK輸入數據的采樣率為8000Hz。相關(guān)運算輸入數據:每次運算對輸入數據先提取l600個(gè)點(diǎn),并分離出這些數據的最后40個(gè)點(diǎn);然后對下一個(gè)輸入數據提取1600個(gè)點(diǎn),并把剛才取的40個(gè)點(diǎn)加在這1600個(gè)點(diǎn)后面組成l640長(cháng)度的數組,作為相關(guān)運算的輸入。這樣做的原因是,最大限度地消除每次提取的l600個(gè)點(diǎn)相鄰部分的影響,提高相關(guān)輸出的精準度。相關(guān)運算的輸入數據都為浮點(diǎn)型,而通過(guò)MATLAB仿真計算出來(lái)的系數也都為小于l的浮點(diǎn)數。通過(guò)在C語(yǔ)言中調用匯編語(yǔ)言,在定點(diǎn)C5509中實(shí)現此浮點(diǎn)運算,并輸出用800Hz相關(guān)運算提取出的波形。

  2.2 C5509中實(shí)現浮點(diǎn)運算方法

  此相關(guān)運算的輸人是浮點(diǎn)型數據,相關(guān)系數是小于1的單精度浮點(diǎn)型數。對于定點(diǎn)DSP,由于不能直接進(jìn)行浮點(diǎn)數的乘法運算,因此必須對輸入數據進(jìn)行類(lèi)型轉換。首先,相關(guān)運算的輸入數據是FTSK浮點(diǎn)數據。在C語(yǔ)言中,單精度浮點(diǎn)數據是以IEEE754標準存儲的32位數據,而C5509中C語(yǔ)言調用匯編語(yǔ)言,是通過(guò)寄存器AR0從C語(yǔ)言傳遞給匯編語(yǔ)言的是數據指針,這個(gè)指針是指向16位數據的,所以相關(guān)的輸入32位浮點(diǎn)數要先轉化為16位整型數據。本文這樣實(shí)現:C程序中先把浮點(diǎn)數據乘以10后(提高運算精度),強制類(lèi)型轉化為整型數據,然后把此16位數據的指針賦給調用匯編的入口參數,即通過(guò)寄存器AR0傳遞到匯編程序中。然后,在匯編程序中,相關(guān)的系數是小于l的小數;在DSP中,匯編語(yǔ)言直接定義的格式是將其轉換為16位二進(jìn)制2的補碼表示形式(例如0.8用8×32 768/lO來(lái)表示)。從匯編程序入口進(jìn)入的、經(jīng)過(guò)強制類(lèi)型轉換的整型數據也是以16位二進(jìn)制形式存儲的,通過(guò)與16位的小數相乘得到的是32位數,存儲在累加器A中。其中,前16位是運算結果的整數部分,后16位是小數部分。由于從匯編語(yǔ)言程序返回C程序的參數是16位的,故取運算結果的高16位(此前已經(jīng)把輸入數據乘以lO,最大限度地提高了運算精度,這里直接取高16位)。把這16位數據返回C程序,得到整型數據,再強制類(lèi)型轉化為單精度浮點(diǎn)型數據,再除以10,即得到了最后相關(guān)運算的結果。經(jīng)實(shí)際運算檢驗,通過(guò)這種方法在C5509里進(jìn)行浮點(diǎn)運算,最終結果實(shí)現了很高的精度,而且通過(guò)調用匯編語(yǔ)言,極大地提高了運算的效率。

  2.3 仿真

  實(shí)際在用戶(hù)板上用TI公司提供的CCS Emulator調試程序,實(shí)現了硬件仿真;而對此DSP算法來(lái)說(shuō),也可用TI公司提供的軟件仿真器(Simulator)實(shí)現軟件仿真。

  TI公司提供的軟件CCS中有一項強大的探測點(diǎn)功能。它是一個(gè)開(kāi)發(fā)算法的工具,將計算機數據文件傳送到目標板或計算機的緩沖區中提供DSP軟件應用,而且可以通過(guò)CCS提供的圖形窗口觀(guān)察輸入/輸出數據波形。

  本次算法設計中利用CCS的斷點(diǎn)和探測點(diǎn)進(jìn)行數據的輸入,利用圖形窗口觀(guān)察輸入/輸出的波形。

  2.4 實(shí)際運算的結果分析

  從輸入波形可以看到,有4種不同的頻率,可以算出最低頻率是800 Hz,經(jīng)過(guò)800 Hz相關(guān)運算得出的輸入波形與輸出波形對比如圖1所示。

  

經(jīng)過(guò)800 Hz相關(guān)運算得出的輸入波形與輸出波形對比

 

  在圖l中,可以看到輸入波形中頻率最低的波形。2個(gè)波峰時(shí)間差(即周期)是0.0054-0.00416=0.00124s,取倒數是806.45,所以此波形是800Hz部分;再看輸出波形,4個(gè)尖峰正好分別對應輸入4個(gè)800 Hz頻率分量。如果在后面再加上低通濾波器。就可以濾出更平滑的曲線(xiàn),如圖2所示。

  

經(jīng)過(guò)800 Hz相關(guān)運算得出的輸入波形與輸出波形對比

 

  2.5 測試程序運行時(shí)間

  CCS中提供了~種評價(jià)器(profiler)。它通過(guò)收集在指定代碼區間程序執行的統計性能,確定程序中各段所花費的處理器時(shí)間,從而識別并消除性能發(fā)揮的瓶頸,縮短程序的執行時(shí)間,使程序更有效;利用評價(jià)器分析可以確定執行某個(gè)特殊的函數花費了多少個(gè)時(shí)鐘周期,以及對它調用的頻繁度等。

  本設計中相關(guān)浮點(diǎn)運算通過(guò)C語(yǔ)言編程和C、匯編語(yǔ)言混合編程兩種方式的對比,用CCS提供的評價(jià)器可以測出,調用匯編語(yǔ)言的方式比純C語(yǔ)言編程方式,速度提高了51.2%。

  結語(yǔ)

  在定點(diǎn)DSP中進(jìn)行浮點(diǎn)運算,要經(jīng)過(guò)復雜的數據格式轉化,因此用定點(diǎn)DSP取代浮點(diǎn)DSP,在降低設備成本的情況下,必定會(huì )提高研發(fā)的成本。

  如果直接把IEEE754標準的32位單精度浮點(diǎn)數據轉化為16位整型數,要經(jīng)過(guò)相當復雜的過(guò)程,在滿(mǎn)足一定精度的前提下,可以使用本文的轉化方式。使用C語(yǔ)言和匯編語(yǔ)言混合編程的方法,達到了大大提高運算效率的目的,不失為很靈活的編程方法。



關(guān)鍵詞: DSP

評論


相關(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>