雷文英 劉 娜 張 龍
(1.西安石油大學(xué)光電油氣測井與檢測教育部重點(diǎn)實(shí)驗(yàn)室 陜西西安)
(2.西安電子科技大學(xué)通信工程學(xué)院 陜西西安) (3.中國石油集團(tuán)測井有限公司長慶事業(yè)部 陜西高陵)
Visual Basic處理浮點(diǎn)DSP芯片數(shù)據(jù)的方法
雷文英1劉 娜2張 龍3
(1.西安石油大學(xué)光電油氣測井與檢測教育部重點(diǎn)實(shí)驗(yàn)室 陜西西安)
(2.西安電子科技大學(xué)通信工程學(xué)院 陜西西安) (3.中國石油集團(tuán)測井有限公司長慶事業(yè)部 陜西高陵)
文章針對(duì)各DSP芯片中浮點(diǎn)數(shù)的特點(diǎn),對(duì)計(jì)算機(jī)軟件處理浮點(diǎn)DSP的數(shù)據(jù)的方法進(jìn)行了分析并設(shè)計(jì)出相應(yīng)的處理算法,最后在Visual Basic環(huán)境下對(duì)各自的算法描述進(jìn)行了算法實(shí)現(xiàn)。實(shí)踐表明,該算法處理結(jié)果誤差小,穩(wěn)定可靠,具有可移植性且能滿足系統(tǒng)的實(shí)時(shí)性要求。
浮點(diǎn)數(shù);DSP芯片;Visual Basic;數(shù)據(jù)處理
浮點(diǎn)DSP芯片數(shù)據(jù)的表示范圍大,運(yùn)算精度高,能夠滿足寬量程、高精度計(jì)算的要求[1],但一般情況下DSP芯片中數(shù)據(jù)是用16進(jìn)制存儲(chǔ)的,不能直觀地得到具體的10進(jìn)制浮點(diǎn)數(shù)值,而且數(shù)據(jù)處理方面浮點(diǎn)DSP的浮點(diǎn)數(shù)的處理比定點(diǎn)數(shù)復(fù)雜。本文針對(duì)浮點(diǎn)DSP芯片數(shù)據(jù)的處理問題,以單精度浮點(diǎn)數(shù)為例,論述了TI公司浮點(diǎn)DSP芯片中常用的IEEE754格式浮點(diǎn)數(shù)和TMS320C3x格式浮點(diǎn)數(shù)在Visual Basic中的處理算法,最后在TMS320VC33DSP芯片數(shù)據(jù)處理上的實(shí)際問題中對(duì)該算法進(jìn)行了驗(yàn)證,并將成果應(yīng)用于油氣井井下壓力測試地面系統(tǒng)中。
TI公司的浮點(diǎn)系列DSP芯片中用到了以下兩種浮點(diǎn)數(shù)的存儲(chǔ)格式:IEEE754格式和TMS320C3x格式[1]。比如在TMS320C67x系列中采用的是IEEE754格式的浮點(diǎn)數(shù),而在TMS320C3x系列芯片中采用的則是TI公司定制的TMS320C3x格式的浮點(diǎn)數(shù)。以上兩種浮點(diǎn)數(shù)的數(shù)值表示范圍是一樣的,區(qū)別在于TMS320C3x格式的浮點(diǎn)數(shù)的指數(shù)和尾數(shù)是以補(bǔ)碼形式表示。下面分別對(duì)這兩種浮點(diǎn)數(shù)進(jìn)行討論。
1.1 IEEE754單精度浮點(diǎn)數(shù)
IEEE754單精度浮點(diǎn)格式分為3部分:1位符號(hào)[31]、8位指數(shù)[30-23]和23位小數(shù)[22-00]。該格式具體表示的浮點(diǎn)數(shù)大小如下式所示[2]:
f=(-1)sign×2exponent-127×(1+fraction) (1)
從式(1)可以看出,該浮點(diǎn)數(shù)的計(jì)算過程中沒有出現(xiàn)補(bǔ)碼,很方便和簡練。例如π的IEEE754格式浮點(diǎn)數(shù)內(nèi)存中表示為0x40490FDA,如圖1所示。
圖1 π的IEEE754單精度浮點(diǎn)數(shù)的內(nèi)存表示
從圖1可知,sign=0,exponent=128,fraction= 0.10010010000111111011010b,根據(jù)式(1)計(jì)算其代表的浮點(diǎn)數(shù)。
1.2 TMS320C3x格式的浮點(diǎn)數(shù)
和IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù)不同,TMS320C3x格式的浮點(diǎn)數(shù)由如下3部分組成:符號(hào)位s,指數(shù)e和小數(shù)f。TMS320C3x單精度浮點(diǎn)的各個(gè)部分在內(nèi)存中的分布見圖2。一般將符號(hào)位和小數(shù)部分合起來稱為尾數(shù),應(yīng)該注意這里指數(shù)和尾數(shù)都是用補(bǔ)碼的形式表示。
圖2 TMS320C3x格式單精度浮點(diǎn)數(shù)的存儲(chǔ)格式
TMS320C3x格式的浮點(diǎn)數(shù)代表的具體浮點(diǎn)數(shù)值為[3]
因?yàn)楫?dāng)s=0時(shí)表示 x為正數(shù),(-2)0=1;當(dāng) s= 1時(shí)表示 x為負(fù)數(shù),(-2)1=2,注意到 x=(0.f)×2e中的10恰是-2的2位二進(jìn)制數(shù)的補(bǔ)碼。如在TMS320C3x格式下 0x40490FDA表示的浮點(diǎn)數(shù)為2.897608e+19。
本文所采用的算法是一種通用算法,這里用Visual Basic語言對(duì)該算法進(jìn)行具體的編程實(shí)現(xiàn)。我們可以根據(jù)以上介紹的兩種不同的單精度浮點(diǎn)數(shù)在內(nèi)存中的表示方式,選擇相應(yīng)的處理方案編寫一個(gè)數(shù)據(jù)轉(zhuǎn)換函數(shù),實(shí)際需要處理數(shù)據(jù)時(shí)只需要對(duì)該函數(shù)通過反復(fù)的調(diào)用就可以對(duì)需要處理的數(shù)據(jù)按4個(gè)字節(jié)的16進(jìn)制數(shù)表示的浮點(diǎn)數(shù)轉(zhuǎn)換為實(shí)際需要的10進(jìn)制表示的浮點(diǎn)數(shù)值。若要處理不同的浮點(diǎn)DSP數(shù)據(jù)只需根據(jù)具體需要選擇調(diào)用響應(yīng)的處理函數(shù)即可。具體的處理IEEE754單精度浮點(diǎn)數(shù)算法程序流程圖如圖3所示。
圖3 IEEE754單精度浮點(diǎn)數(shù)和TMS320C3x格式單精度浮點(diǎn)數(shù)處理流程圖
2.1 IEEE754格式的浮點(diǎn)數(shù)的處理
IEEE754格式的浮點(diǎn)數(shù)在現(xiàn)在的計(jì)算機(jī)軟件和硬件芯片中有著廣泛的應(yīng)用。像PC機(jī)中的VB、VC++和MATLAB語言中的浮點(diǎn)數(shù)都采用該標(biāo)準(zhǔn);Intel處理器,Analog公司和TI公司的浮點(diǎn)DSP芯片的大部分產(chǎn)品也采用該標(biāo)準(zhǔn)。
目前計(jì)算機(jī)內(nèi)部的浮點(diǎn)數(shù)采用IEEE754格式進(jìn)行存儲(chǔ),一般程序從內(nèi)存中讀取浮點(diǎn)數(shù)時(shí)操作系統(tǒng)已經(jīng)將16進(jìn)制數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)值。處理IEEE754格式的浮點(diǎn)數(shù)可以結(jié)合此特點(diǎn)方便地得到處理結(jié)果:第一步,將4個(gè)字節(jié)的16進(jìn)制數(shù)放到一個(gè)浮點(diǎn)數(shù)變量floatVal的內(nèi)存存儲(chǔ)空間中;第二步,讀取該浮點(diǎn)數(shù)floatVal的數(shù)值就是處理后的結(jié)果。在Visual Basic中具體處理方法如下:首先將16進(jìn)制的待處理的32位IEEE754格式的單精度浮點(diǎn)數(shù)分成4個(gè)字節(jié)放在Visual Basic語言中的Byte類型的數(shù)組中,然后定義一個(gè)Single類型的變量用于儲(chǔ)存處理結(jié)果(Visual Basic中單精度浮點(diǎn)數(shù)在內(nèi)存中占4個(gè)字節(jié)),最后調(diào)用Visual Basic API[4]提供的內(nèi)存拷貝函數(shù)CopyMemory將存放IEEE754數(shù)據(jù)的4個(gè)字節(jié)的Byte類型的數(shù)組在內(nèi)存中的內(nèi)容原封不動(dòng)地拷貝到Single類型變量對(duì)應(yīng)的內(nèi)存中,此時(shí)該Single類型的變量值即是轉(zhuǎn)換的結(jié)果。這種處理方法的優(yōu)點(diǎn)是避開了IEEE754格式浮點(diǎn)數(shù)的具體細(xì)節(jié),直接利用內(nèi)存拷貝機(jī)制方便地得到結(jié)果。利用此原理也可方便地將 16進(jìn)制形式表示的IEEE754格式的雙精度浮點(diǎn)數(shù)轉(zhuǎn)換為相應(yīng)的10進(jìn)制形式的浮點(diǎn)數(shù)值,差別僅僅在于內(nèi)存拷貝的字節(jié)大小應(yīng)該是8個(gè)字節(jié)的長度。值得一提的是,由于計(jì)算機(jī)API接口的通用性,該浮點(diǎn)數(shù)的處理方法也可以方便地移植到Visual C++、Delphi或其他計(jì)算機(jī)語言的DSP浮點(diǎn)數(shù)處理的應(yīng)用中,比如Visual C++中實(shí)現(xiàn)是采用的內(nèi)存拷貝的函數(shù)為memcpy,同時(shí)應(yīng)注意用Visual C++中的Char類型代替Visual Basic中的Byte類型。
2.2 TMS320C3x格式的浮點(diǎn)數(shù)的處理
由于計(jì)算機(jī)內(nèi)部采用的浮點(diǎn)數(shù)存儲(chǔ)格式采用的是IEEE754標(biāo)準(zhǔn),故計(jì)算機(jī)處理TMS320C3x格式的浮點(diǎn)數(shù)時(shí)就沒有處理IEEE754格式的浮點(diǎn)數(shù)方便,需要按照上面介紹的浮點(diǎn)數(shù)組成原理進(jìn)行按尾數(shù)和指數(shù)拆分并對(duì)其進(jìn)行相應(yīng)的處理,然后將兩部分結(jié)合在一起得到最終的結(jié)果。以 TMS320VC3x格式浮點(diǎn)數(shù)0x40490FDA計(jì)算機(jī)處理運(yùn)算為例介紹具體的運(yùn)算過程。
1)按位運(yùn)算提取分?jǐn)?shù)和指數(shù)部分
TMS320C3x浮點(diǎn)數(shù)0x40490FDA轉(zhuǎn)換為32位二進(jìn)制數(shù)記做
按照圖2的TMS320C3x浮點(diǎn)數(shù)存儲(chǔ)格式,將變量TMS320按位拆分成分?jǐn)?shù)和指數(shù)部分的處理:
比如TMS320=0×40490FDA經(jīng)過上述運(yùn)算后指數(shù)部分expoResultl=0×40=64,分?jǐn)?shù)部分為fractResult= 0x490FDA ×2-23= 4788186 ×2-23= 0.57079625129699707。
2)將分?jǐn)?shù)部分和指數(shù)部分組合成十進(jìn)制數(shù)
這一步將分離好的16進(jìn)制的分?jǐn)?shù)部分和指數(shù)部分按照式(5)轉(zhuǎn)換成10進(jìn)制數(shù)就可得到最終的處理結(jié)果。
以下舉一個(gè)例子說明上述過程的具體處理步驟,求TMS320=0x40490FDA代表的浮點(diǎn)數(shù)的處理過程為floatResult={(-2)0+0.57079625129699707}×264= 2.897608e19。
為了解決實(shí)際工程中浮點(diǎn)DSP數(shù)據(jù)處理的問題,另外為了檢驗(yàn)以上浮點(diǎn)DSP數(shù)據(jù)處理算法的正確性和魯棒性,工作中采用 VisualBasic語言對(duì)TMS320VC33型號(hào)的DSP芯片的數(shù)據(jù)做了處理。結(jié)合一個(gè)油氣井壓力采集的工程應(yīng)用的項(xiàng)目,采用以上描述的TMS320C3x系列芯片浮點(diǎn)數(shù)的處理算法思想對(duì)Visual Basic中對(duì)下位機(jī)上傳到PC機(jī)上的10000條16進(jìn)制格式的TMS320C3x單精度浮點(diǎn)進(jìn)行處理,將DSP數(shù)據(jù)處理后的10進(jìn)制結(jié)果繪制成曲線,如圖4所示。列表框中的最右邊一欄數(shù)據(jù)是采用浮點(diǎn)DSP數(shù)據(jù)處理算法處理后的傳感器測量井下壓力的浮點(diǎn)數(shù)結(jié)果,圖像中橫坐標(biāo)是時(shí)間,縱坐標(biāo)是壓力值。從該軟件對(duì)單精度浮點(diǎn)數(shù)的處理的結(jié)果和實(shí)際油氣井下的壓力分布來看,采用Visual Basic對(duì)DSP的浮點(diǎn)數(shù)進(jìn)行處理結(jié)果準(zhǔn)確,程序運(yùn)行穩(wěn)定,能夠滿足浮點(diǎn)DSP數(shù)據(jù)處理和實(shí)時(shí)性方面的要求。
圖4 Visual Basic處理單精度浮點(diǎn)數(shù)算法在壓力采集系統(tǒng)中的應(yīng)用
目前,本文提出的Visual Basic處理浮點(diǎn)DSP數(shù)據(jù)的方法已經(jīng)進(jìn)行過驗(yàn)證并且以該方法為核心的數(shù)據(jù)處理系統(tǒng)已經(jīng)成功應(yīng)用于油井壓力測試系統(tǒng)中。本文可以得到的結(jié)論主要有:第一,應(yīng)用Visual Basic計(jì)算機(jī)軟件編程取代復(fù)雜的硬件處理電路對(duì)浮點(diǎn)DSP芯片數(shù)據(jù)處理,具有較高的可靠性,易于整個(gè)系統(tǒng)的維護(hù)和測試。第二,該方法處理的數(shù)據(jù)完全能滿足系統(tǒng)的精度要求,誤差不超過1e-6數(shù)量級(jí)。第三,本方法處理速度快,實(shí)際中轉(zhuǎn)換一組數(shù)據(jù)僅需大約0.1ms,能保證系統(tǒng)實(shí)時(shí)性的要求。實(shí)踐證明,采用本文介紹的浮點(diǎn)數(shù)處理方法可以成功地解決浮點(diǎn)DSP測量數(shù)據(jù)的上位機(jī)處理問題。
[1] 張雄偉,陳 亮,徐光輝.DSP芯片的原理與開發(fā)應(yīng)用(第3版)[M].北京:電子工業(yè)出版社,2003
[2] http://en.wikipedia.org/wiki/IEEE_754-1985
[3] 黨 瑞,謝 雁,李利品.TMS320C3x DSP原理與應(yīng)用[M].西安:陜西科技大學(xué)出版社,2006
[4] http://msdn.microsoft.com/
Lei Wenying,Liu Na and Zhang Long.A float point data processing method for DSP chips by employing Visual Basic.PI,2010,24(4):67~68
This paper introduces a method of processing float point data through software programming by using Visual Basic, in which two algorithms dealing with two commonly used single precision float numbers of DSP chips are developed.As a result of applying Visual Basic program to implement these algorithms,stability and high-accuracy data handing performance is achieved in practical application.
float numbers;DSP chips;Visual Basic;data processing
TP311
B
1004-9134(2010)04-0069-03
雷文英,男,1985年生,現(xiàn)為西安石油大學(xué)在讀研究生,主要從事信號(hào)與信息處理方面的研究工作。郵編:710065
2009-09-20 編輯:姜 婷)
·方法研究·