雷文英 刘 娜 张 龙
(1.西安石油大学光电油气测井与检测教育部重点实验室 陕西西安)
(2.西安电子科技大学通信工程学院 陕西西安) (3.中国石油集团测井有限公司长庆事业部 陕西高陵)
Visual Basic处理浮点DSP芯片数据的方法
雷文英1刘 娜2张 龙3
(1.西安石油大学光电油气测井与检测教育部重点实验室 陕西西安)
(2.西安电子科技大学通信工程学院 陕西西安) (3.中国石油集团测井有限公司长庆事业部 陕西高陵)
文章针对各DSP芯片中浮点数的特点,对计算机软件处理浮点DSP的数据的方法进行了分析并设计出相应的处理算法,最后在Visual Basic环境下对各自的算法描述进行了算法实现。实践表明,该算法处理结果误差小,稳定可靠,具有可移植性且能满足系统的实时性要求。
浮点数;DSP芯片;Visual Basic;数据处理
浮点DSP芯片数据的表示范围大,运算精度高,能够满足宽量程、高精度计算的要求[1],但一般情况下DSP芯片中数据是用16进制存储的,不能直观地得到具体的10进制浮点数值,而且数据处理方面浮点DSP的浮点数的处理比定点数复杂。本文针对浮点DSP芯片数据的处理问题,以单精度浮点数为例,论述了TI公司浮点DSP芯片中常用的IEEE754格式浮点数和TMS320C3x格式浮点数在Visual Basic中的处理算法,最后在TMS320VC33DSP芯片数据处理上的实际问题中对该算法进行了验证,并将成果应用于油气井井下压力测试地面系统中。
TI公司的浮点系列DSP芯片中用到了以下两种浮点数的存储格式:IEEE754格式和TMS320C3x格式[1]。比如在TMS320C67x系列中采用的是IEEE754格式的浮点数,而在TMS320C3x系列芯片中采用的则是TI公司定制的TMS320C3x格式的浮点数。以上两种浮点数的数值表示范围是一样的,区别在于TMS320C3x格式的浮点数的指数和尾数是以补码形式表示。下面分别对这两种浮点数进行讨论。
1.1 IEEE754单精度浮点数
IEEE754单精度浮点格式分为3部分:1位符号[31]、8位指数[30-23]和23位小数[22-00]。该格式具体表示的浮点数大小如下式所示[2]:
f=(-1)sign×2exponent-127×(1+fraction) (1)
从式(1)可以看出,该浮点数的计算过程中没有出现补码,很方便和简练。例如π的IEEE754格式浮点数内存中表示为0x40490FDA,如图1所示。
图1 π的IEEE754单精度浮点数的内存表示
从图1可知,sign=0,exponent=128,fraction= 0.10010010000111111011010b,根据式(1)计算其代表的浮点数。
1.2 TMS320C3x格式的浮点数
和IEEE754标准浮点数不同,TMS320C3x格式的浮点数由如下3部分组成:符号位s,指数e和小数f。TMS320C3x单精度浮点的各个部分在内存中的分布见图2。一般将符号位和小数部分合起来称为尾数,应该注意这里指数和尾数都是用补码的形式表示。
图2 TMS320C3x格式单精度浮点数的存储格式
TMS320C3x格式的浮点数代表的具体浮点数值为[3]
因为当s=0时表示 x为正数,(-2)0=1;当 s= 1时表示 x为负数,(-2)1=2,注意到 x=(0.f)×2e中的10恰是-2的2位二进制数的补码。如在TMS320C3x格式下 0x40490FDA表示的浮点数为2.897608e+19。
本文所采用的算法是一种通用算法,这里用Visual Basic语言对该算法进行具体的编程实现。我们可以根据以上介绍的两种不同的单精度浮点数在内存中的表示方式,选择相应的处理方案编写一个数据转换函数,实际需要处理数据时只需要对该函数通过反复的调用就可以对需要处理的数据按4个字节的16进制数表示的浮点数转换为实际需要的10进制表示的浮点数值。若要处理不同的浮点DSP数据只需根据具体需要选择调用响应的处理函数即可。具体的处理IEEE754单精度浮点数算法程序流程图如图3所示。
图3 IEEE754单精度浮点数和TMS320C3x格式单精度浮点数处理流程图
2.1 IEEE754格式的浮点数的处理
IEEE754格式的浮点数在现在的计算机软件和硬件芯片中有着广泛的应用。像PC机中的VB、VC++和MATLAB语言中的浮点数都采用该标准;Intel处理器,Analog公司和TI公司的浮点DSP芯片的大部分产品也采用该标准。
目前计算机内部的浮点数采用IEEE754格式进行存储,一般程序从内存中读取浮点数时操作系统已经将16进制数转换为浮点数值。处理IEEE754格式的浮点数可以结合此特点方便地得到处理结果:第一步,将4个字节的16进制数放到一个浮点数变量floatVal的内存存储空间中;第二步,读取该浮点数floatVal的数值就是处理后的结果。在Visual Basic中具体处理方法如下:首先将16进制的待处理的32位IEEE754格式的单精度浮点数分成4个字节放在Visual Basic语言中的Byte类型的数组中,然后定义一个Single类型的变量用于储存处理结果(Visual Basic中单精度浮点数在内存中占4个字节),最后调用Visual Basic API[4]提供的内存拷贝函数CopyMemory将存放IEEE754数据的4个字节的Byte类型的数组在内存中的内容原封不动地拷贝到Single类型变量对应的内存中,此时该Single类型的变量值即是转换的结果。这种处理方法的优点是避开了IEEE754格式浮点数的具体细节,直接利用内存拷贝机制方便地得到结果。利用此原理也可方便地将 16进制形式表示的IEEE754格式的双精度浮点数转换为相应的10进制形式的浮点数值,差别仅仅在于内存拷贝的字节大小应该是8个字节的长度。值得一提的是,由于计算机API接口的通用性,该浮点数的处理方法也可以方便地移植到Visual C++、Delphi或其他计算机语言的DSP浮点数处理的应用中,比如Visual C++中实现是采用的内存拷贝的函数为memcpy,同时应注意用Visual C++中的Char类型代替Visual Basic中的Byte类型。
2.2 TMS320C3x格式的浮点数的处理
由于计算机内部采用的浮点数存储格式采用的是IEEE754标准,故计算机处理TMS320C3x格式的浮点数时就没有处理IEEE754格式的浮点数方便,需要按照上面介绍的浮点数组成原理进行按尾数和指数拆分并对其进行相应的处理,然后将两部分结合在一起得到最终的结果。以 TMS320VC3x格式浮点数0x40490FDA计算机处理运算为例介绍具体的运算过程。
1)按位运算提取分数和指数部分
TMS320C3x浮点数0x40490FDA转换为32位二进制数记做
按照图2的TMS320C3x浮点数存储格式,将变量TMS320按位拆分成分数和指数部分的处理:
比如TMS320=0×40490FDA经过上述运算后指数部分expoResultl=0×40=64,分数部分为fractResult= 0x490FDA ×2-23= 4788186 ×2-23= 0.57079625129699707。
2)将分数部分和指数部分组合成十进制数
这一步将分离好的16进制的分数部分和指数部分按照式(5)转换成10进制数就可得到最终的处理结果。
以下举一个例子说明上述过程的具体处理步骤,求TMS320=0x40490FDA代表的浮点数的处理过程为floatResult={(-2)0+0.57079625129699707}×264= 2.897608e19。
为了解决实际工程中浮点DSP数据处理的问题,另外为了检验以上浮点DSP数据处理算法的正确性和鲁棒性,工作中采用 VisualBasic语言对TMS320VC33型号的DSP芯片的数据做了处理。结合一个油气井压力采集的工程应用的项目,采用以上描述的TMS320C3x系列芯片浮点数的处理算法思想对Visual Basic中对下位机上传到PC机上的10000条16进制格式的TMS320C3x单精度浮点进行处理,将DSP数据处理后的10进制结果绘制成曲线,如图4所示。列表框中的最右边一栏数据是采用浮点DSP数据处理算法处理后的传感器测量井下压力的浮点数结果,图像中横坐标是时间,纵坐标是压力值。从该软件对单精度浮点数的处理的结果和实际油气井下的压力分布来看,采用Visual Basic对DSP的浮点数进行处理结果准确,程序运行稳定,能够满足浮点DSP数据处理和实时性方面的要求。
图4 Visual Basic处理单精度浮点数算法在压力采集系统中的应用
目前,本文提出的Visual Basic处理浮点DSP数据的方法已经进行过验证并且以该方法为核心的数据处理系统已经成功应用于油井压力测试系统中。本文可以得到的结论主要有:第一,应用Visual Basic计算机软件编程取代复杂的硬件处理电路对浮点DSP芯片数据处理,具有较高的可靠性,易于整个系统的维护和测试。第二,该方法处理的数据完全能满足系统的精度要求,误差不超过1e-6数量级。第三,本方法处理速度快,实际中转换一组数据仅需大约0.1ms,能保证系统实时性的要求。实践证明,采用本文介绍的浮点数处理方法可以成功地解决浮点DSP测量数据的上位机处理问题。
[1] 张雄伟,陈 亮,徐光辉.DSP芯片的原理与开发应用(第3版)[M].北京:电子工业出版社,2003
[2] http://en.wikipedia.org/wiki/IEEE_754-1985
[3] 党 瑞,谢 雁,李利品.TMS320C3x DSP原理与应用[M].西安:陕西科技大学出版社,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年生,现为西安石油大学在读研究生,主要从事信号与信息处理方面的研究工作。邮编:710065
2009-09-20 编辑:姜 婷)
·方法研究·