APP下载

工业CT系统软件架构基础

2016-05-14赵飞谢里阳李佳张子骞

数字技术与应用 2016年5期
关键词:数据类型编程语言

赵飞 谢里阳 李佳 张子骞

摘要:工业CT扫描成像包含了试件运动扫描与投影数据重建计算两个重要步骤。这就要求工业CT扫描成像系统软件必须即能灵活地控制硬件,又能高效地处理数据。因此,工业CT扫描成像系统软件架构的设计应满足此要求。据此,本文针对编程语言环境与处理数据类型的选择以及硬件的虚拟方法等软件架构基础性问题进行了详细讨论。得出了以C语言作为编程语言、选择整型数据和浮点型数据进行处理以及利用C语言中的条件预编译语句进行硬件虚拟的结论。

关键词:工业CT 软件架构 编程语言 数据类型 虚拟硬件

中图分类号:TP311 文献标识码:B 文章编号:1007-9416(2016)05-0000-00

Abstract: Industrial Computed Tomography (ICT) includes two important steps: scan of the moving specimens and reconstruction from the projection data. That means the software of ICT system must be flexible to control the hardware and efficient to process the data. Therefore, the design of the software architecture for ICT system should meet the requirements above. According to this, the fundamental issues of the software architecture are discussed in this paper: the programming language environment, the processing data type selection and the methods for hardware virtualization. And the conclusions are: using C language as the programming language of ICT system, choosing integer and floating-point type as the processing data types and hardware virtualization by the precompiled statements of C language.

Key words: industrial computed tomography, software architecture, programming language, data type, hardware virtualization

1 引言

工业CT扫描成像系统是一种精密复杂的光学成像系统,其扫描成像过程包含了试件运动扫描与投影数据重建计算两个重要步骤。这就要求其管理者(软件)高效地处理数据,并且灵活地控制硬件。所有语言都有其技术瓶颈,一般说来,低级语言的编程效率较低但运行效率较高,高级语言编程效率较高而运行效率较低,各高级语言的库又侧重不同的应用。整型数据由于占用空间较小,其存储和传输的成本较低,且有利于图像灰度统计运算及显示;但很多投影数据重建算法又要求数据为浮点型。工业CT扫描成像系统中涉及较多硬件,由于设备供货周期和调试场地等因素的影响,调试软件的计算机通常无法同某些(或全部)硬件设备连接,虚拟硬件技术可以让计算机在调试某个硬件或算法软件时,得到其它所有硬件的虚拟的合理反馈信息。因此,必须合理选择编程的语言环境与所处理的数据类型,并适当进行硬件虚拟。

2 选择编程语言

机器语言是唯一不需要翻译而直接被计算机识别的程序设计语言[1],它是最低级的编程语言,可实现对计算机所有的操作,所有其它的语言都要由编译器编译成机器语言才能运行。汇编语言是机器语言的助记符,它将机器语言用有意义的英文字母缩写替代,可读性较好。它的级别、实现操作、运行效率均与机器语言相同,但也要编译器将其编译成机器语言才能运行。

除了汇编语言和机器语言,其它的编程工具都是高级语言。从汇编语言开始有库的概念,用户也可以自定义子函数,只不过高级语言中的库针对更具体的处理对象。

LabView的库中有很多控制硬件的专业控件[2,3],便于快速生成硬件控制代码,且按钮美观,是控制硬件的良好编程工具,但其处理数据的速度很慢。与之相反,Fortran(Formula Translate的缩写[4])是数值计算的良好工具,其语法和数据结构运算(如直接对数组和复数进行运算)都是为便于数值计算而专门设计[5],能够高效地实现CT所需的投影数据重建的运算,但它控制硬件能力很差。

控制硬件和数据处理效率都很高的高级语言是C语言(含C++和Visual C++[6])。它是高级语言中的最低级的编程语言,具有如下特点:

有强大的监控和调试环境,控制硬件的能力仅次于汇编语言;

(2)能够实现LabView的所有功能,它的代码编写速度相对较慢;

(3)数据处理能力仅次于Fortran和Matlab,必要时可嵌入汇编语言,速度即可与Fortran 相媲美,文献[7~9]详细阐述了C语言中嵌入汇编语言的方法。

Matlab与其说是一种编程语言,不如说是数值计算的实验终端,也有人称它为第四代计算机语言(前三代分别指机器语言、汇编语言和高级语言)[10]。早期的Matlab是用Fortran编写的,1984年的Matlab版本已经用C语言作了完全的改写[11]。它结合了C/C++数学库和图形库[10],全部由世界一流专家用C或者汇编语言编制,是世界一流水平的数值计算函数库[12],运行效率极高。它提供了一个终端平台,供使用者运行它的数学库。如果在matlab平台上逐次运行几条语句,其速度尚可以达到C语言水平;但如果要多条语句循环跳转,速度极慢。但它的代码编写效率极高,便于数据可视化,很适于实验室多变的实验条件和数据的分析处理。

由于Matlab的底核代码就是基于C语言的,其数学库易于做出与C语言的接口,便于C语言调用。文献[13~15]详细阐述了C语言调用Matlab库的方法。CT投影数据的计算机仿真精度依赖于随机数发生器的质量。有人开发C语言本身的实用数学库,但一般不适于大数据量的CT仿真。如文献[16]提供的正态分布随机序列,它的有效周期仅为5万左右,以它为噪声做大数据量的CT模拟重建,结果中有由噪声的周期性引起的周期性花纹。Matlab的库函数是由大型企业的多个专业人才合作开发的实用库,被世界各国广泛使用和验证,具有更高的运行效率和可靠性。C语言调用Matlab库,可提高C语言数值算法的编程效率。

上述各种编程语言的特性如表1所示:低级语言的编程效率低,运行效率高,功能强大;高级语言的编程效率高,运行效率一般不低,其函数库通常侧重某一方面的功能。所有语言都有其技术瓶颈,按照CT系统的要求,C语言的综合性能较好,但也需要其它语言的协助。

3 数据类型

本文中数据类型主要是指数据值在内存中存放的格式(不包括指针、字符和自定义结构体等):按小数点的位置可分为整型和浮点型。其中,浮点型数据按占用空间的大小可分为单精度和双精度。整型数据按占用空间的大小可分为超短、短、长和超长等,按表示的范围又可分为带符号整型和无符号整型[17]。

数据类型的不同将导致占用空间和运算速度的不同。CT扫描系统通常需要两种精度的数据:扫描投影数据一般由实际信号经A/D转换而成无符号整型数据,通常由无符号短整型即可表示,目的在于减小存储空间和便于快速处理;由于用投影数据重建后的数据通常为浮点型,一般用单精度浮点型表示即可。

投影数据和重建后的数据,通常需要进行相同的图像处理、显示和保存等操作。C语言虽然不是强类型语言,但随着它的发展,其类型检查机制已经得到了加强[18]。当变量被声明或者常量被写出时,就已经固定了它的数据类型,而且它本身无法更改。数据处理中,有些是可以统一处理的,但效率会降低。

以下通过数据的灰度直方图统计运算具体说明,如表2所示。其中:nA、nB和nX为无符号短整型变量;fX、fA、fB和fC为单精度浮点型变量;nH[·]、nH1[·]和fH[·]都是无符号长整型变量,它们要求其序号必须为整型变量;(UINT)(·)表示将目标变量的输出值强制转换成无符号长整型,但不改变目标变量本身的类型。nH1是对nH的内存移位,结果使nH1[nX]与nH[nX?nA]代表同一内存值,因此,投影数据统计结果存放变量可等效成nH1[nA]~nH1[nB]。但由于fA/fC的计算结果不一定是整数,故无法做类似的等效。

由表2知,与重建后的数据相比:处理投影数据的算法简单,且计算速度快。若数据处理采用不同的算法,则对很多函数必须写出两套代码,增加了编程的工作量;也可以利用C语言的模板关键字“template”[19],将两个函数统一用重建数据的算法计算,对于投影数据的计算又浪费了时间。

有一种折中的办法,将所有浮点类型的数据fX都利用下式转换成整型数据nX:

(1)

其中,fscale=65535/(fmax?fmin),fmin和fmax是整幅图像中的灰度最值,65535是无符号短整型数据可表示的最大值。在内存中只要保存数据nX和fmin、fscale的值,就可以在数据处理之后,通过下式恢复成目标区域中的数据:

(2)

此时,可对数据nX进行统一的数据处理。由于计算机数据的离散表示,即使没有经过任何处理,经由式(1)和式(2)变换之后,数据都有精度损失。因而,fX1与fX通常无法完全一致。

上述方法在计算速度、代码编写效率和精度方面各有利弊,组建软件架构的时,要根据实际情况做出合理的选择。

4 硬件虚拟方法

如前所述,工业CT扫描系统中涉及较多硬件,与计算机直接打交道的硬件主要有:运动控制器,图像采集卡,探测器的命令处理器和射线机的控制器。这些硬件需要接收计算机的命令,并返回信息。由于设备供货周期和调试场地等因素的影响,调试软件的计算机通常无法同某些(或全部)硬件设备连接,因而在调试过程中得不到相应的反馈信息。在C语言平台下,只要利用条件预编译语句(#define、#ifdef、#else和#endif),即可通过一条简单的命令,在真实硬件和模拟的仿真硬件之间随意切换[20]。

需要强调,仿真的信息一定要逼真,如:(1)采集完成的信息与采集开始命令之间必须延时;(2)采集到的各图像之间要有一定的灰度变化;(3)运动到位信息与运动开始命令之间也要有延时,且延时要在一定范围内波动。

以便于各硬件的分别调试,及后续的处理程序和多线程并行的修改。

5 结语

依据工业CT扫描成像系统对软件数据处理的高效性与硬件控制的灵活性要求,本文针对软件架构中的编程语言环境与处理数据类型的选择以及硬件的虚拟方法等基础问题进行了详细讨论。得出了以下结论:以C语言作为编程语言可兼顾软件数据处理的高效性与硬件控制的灵活性,并可虚拟硬件;C语言编程效率较低,通过调用其它语言的函数库可获得一定的提高;选择整型数据和浮点型数据进行处理可提高CT系统的运行效率。

参考文献

[1]姚爱国,杜瑞颖,谭成予.计算机导论[M].武汉:武汉大学出版社,2003.

[2]邓焱,王磊,傅琦 等.LabVIEW 7.1测试技术与仪器应用[M].北京:机械工业出版社,2004.

[3]张凯,周陬,郭栋.LabVIEW虚拟仪器工程设计与开发[M].北京:国防工业出版社,2004.

[4]钱乐秋,陈增荣,朱扬勇.FORTRAN语言程序设计与数值计算[M].上海:复旦大学出版社,1997.

[5]邓巍巍,王越男.Visual FORTRAN编程指南[M].北京:人民邮电出版社,2000.

[6]宋爱荣.工业控制系统的C语言[J].机电工程.1999,(3):43.

[7]邢敏.C语言与汇编语言的接口[J].通化师范学院学报.2002,23(5):33-35.

[8]郭咏梅.C语言程序与汇编语言程序的接口分析[J].电脑学习.2002,(1):30-31.

[9]李月娥,樊秀梅.C与汇编程序接口方法的研究[J].山西大学学报(自然科学版),1997,20(1):45-48.

[10]飞思科技产品研发中心.MATLAB6.5应用接口编程[M].北京:电子工业出版社,2003.

[11]余啸海.Matlab接口技术与应用[M].北京:国防工业出版社,2004.

[12]郑智琴.Simulink电子通信仿真与应用[M].北京:国防工业出版社,2004.

[13]况昌鹏,冯丽娟.VC中使用Matlab C++数学函数库[J].电脑学习,2001,(6):36-37.

[14]刘志俭,潘献飞,连军想.MATLAB外部程序接口(6.x)[M].北京:科学出版社,2002.

[15]蒋忠进,林君,陈祖斌.在Visual C++中调用MATLAB以实现数学算法[J].计算机应用研究,2004,(5):89-91.

[16]徐士良.C常用算法程序集(第二版)[M].北京:清华大学出版社,1996.

[17]孙经钰,邝孔武.C语言与数据结构[M].北京:北京航空航天大学出版社,2001.

[18]徐宝文,李帮清,刘杰 等.Brian W. Kernighan,Dennis M. Ritchie. C程序设计语言(第二版)[M].北京:机械工业出版社,2001.

[19]Gregory Satir,Doug Brown.C++语言核心[M].张铭泽.北京:中国电力出版社,2001.

[20]李一波,张森悦,孙玉霞 等.新概念C语言[M].沈阳:东北大学出版社,2004.

猜你喜欢

数据类型编程语言
基于JavaScript编程语言之 闭包技术在焦点轮播上的应用
压力-体积转换在CFC编程语言中的实现解析
详谈Java中的基本数据类型与引用数据类型
如何理解数据结构中的抽象数据类型
Java编程语言的特点与应用
常用计算机编程语言的分析及选用技巧
浅谈不同编程语言对计算机软件开发的影响
S7—400PLC系统时间设置方法及在炼钢厂中的应用
面向对象Web开发编程语言的的评估方法
范畴数据类型上的子类型*