国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

工業(yè)CT系統(tǒng)軟件架構(gòu)基礎(chǔ)

2016-05-14 04:35趙飛謝里陽李佳張子騫
關(guān)鍵詞:數(shù)據(jù)類型編程語言

趙飛 謝里陽 李佳 張子騫

摘要:工業(yè)CT掃描成像包含了試件運(yùn)動(dòng)掃描與投影數(shù)據(jù)重建計(jì)算兩個(gè)重要步驟。這就要求工業(yè)CT掃描成像系統(tǒng)軟件必須即能靈活地控制硬件,又能高效地處理數(shù)據(jù)。因此,工業(yè)CT掃描成像系統(tǒng)軟件架構(gòu)的設(shè)計(jì)應(yīng)滿足此要求。據(jù)此,本文針對(duì)編程語言環(huán)境與處理數(shù)據(jù)類型的選擇以及硬件的虛擬方法等軟件架構(gòu)基礎(chǔ)性問題進(jìn)行了詳細(xì)討論。得出了以C語言作為編程語言、選擇整型數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)進(jìn)行處理以及利用C語言中的條件預(yù)編譯語句進(jìn)行硬件虛擬的結(jié)論。

關(guān)鍵詞:工業(yè)CT 軟件架構(gòu) 編程語言 數(shù)據(jù)類型 虛擬硬件

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):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 引言

工業(yè)CT掃描成像系統(tǒng)是一種精密復(fù)雜的光學(xué)成像系統(tǒng),其掃描成像過程包含了試件運(yùn)動(dòng)掃描與投影數(shù)據(jù)重建計(jì)算兩個(gè)重要步驟。這就要求其管理者(軟件)高效地處理數(shù)據(jù),并且靈活地控制硬件。所有語言都有其技術(shù)瓶頸,一般說來,低級(jí)語言的編程效率較低但運(yùn)行效率較高,高級(jí)語言編程效率較高而運(yùn)行效率較低,各高級(jí)語言的庫(kù)又側(cè)重不同的應(yīng)用。整型數(shù)據(jù)由于占用空間較小,其存儲(chǔ)和傳輸?shù)某杀据^低,且有利于圖像灰度統(tǒng)計(jì)運(yùn)算及顯示;但很多投影數(shù)據(jù)重建算法又要求數(shù)據(jù)為浮點(diǎn)型。工業(yè)CT掃描成像系統(tǒng)中涉及較多硬件,由于設(shè)備供貨周期和調(diào)試場(chǎng)地等因素的影響,調(diào)試軟件的計(jì)算機(jī)通常無法同某些(或全部)硬件設(shè)備連接,虛擬硬件技術(shù)可以讓計(jì)算機(jī)在調(diào)試某個(gè)硬件或算法軟件時(shí),得到其它所有硬件的虛擬的合理反饋信息。因此,必須合理選擇編程的語言環(huán)境與所處理的數(shù)據(jù)類型,并適當(dāng)進(jìn)行硬件虛擬。

2 選擇編程語言

機(jī)器語言是唯一不需要翻譯而直接被計(jì)算機(jī)識(shí)別的程序設(shè)計(jì)語言[1],它是最低級(jí)的編程語言,可實(shí)現(xiàn)對(duì)計(jì)算機(jī)所有的操作,所有其它的語言都要由編譯器編譯成機(jī)器語言才能運(yùn)行。匯編語言是機(jī)器語言的助記符,它將機(jī)器語言用有意義的英文字母縮寫替代,可讀性較好。它的級(jí)別、實(shí)現(xiàn)操作、運(yùn)行效率均與機(jī)器語言相同,但也要編譯器將其編譯成機(jī)器語言才能運(yùn)行。

除了匯編語言和機(jī)器語言,其它的編程工具都是高級(jí)語言。從匯編語言開始有庫(kù)的概念,用戶也可以自定義子函數(shù),只不過高級(jí)語言中的庫(kù)針對(duì)更具體的處理對(duì)象。

LabView的庫(kù)中有很多控制硬件的專業(yè)控件[2,3],便于快速生成硬件控制代碼,且按鈕美觀,是控制硬件的良好編程工具,但其處理數(shù)據(jù)的速度很慢。與之相反,F(xiàn)ortran(Formula Translate的縮寫[4])是數(shù)值計(jì)算的良好工具,其語法和數(shù)據(jù)結(jié)構(gòu)運(yùn)算(如直接對(duì)數(shù)組和復(fù)數(shù)進(jìn)行運(yùn)算)都是為便于數(shù)值計(jì)算而專門設(shè)計(jì)[5],能夠高效地實(shí)現(xiàn)CT所需的投影數(shù)據(jù)重建的運(yùn)算,但它控制硬件能力很差。

控制硬件和數(shù)據(jù)處理效率都很高的高級(jí)語言是C語言(含C++和Visual C++[6])。它是高級(jí)語言中的最低級(jí)的編程語言,具有如下特點(diǎn):

有強(qiáng)大的監(jiān)控和調(diào)試環(huán)境,控制硬件的能力僅次于匯編語言;

(2)能夠?qū)崿F(xiàn)LabView的所有功能,它的代碼編寫速度相對(duì)較慢;

(3)數(shù)據(jù)處理能力僅次于Fortran和Matlab,必要時(shí)可嵌入?yún)R編語言,速度即可與Fortran 相媲美,文獻(xiàn)[7~9]詳細(xì)闡述了C語言中嵌入?yún)R編語言的方法。

Matlab與其說是一種編程語言,不如說是數(shù)值計(jì)算的實(shí)驗(yàn)終端,也有人稱它為第四代計(jì)算機(jī)語言(前三代分別指機(jī)器語言、匯編語言和高級(jí)語言)[10]。早期的Matlab是用Fortran編寫的,1984年的Matlab版本已經(jīng)用C語言作了完全的改寫[11]。它結(jié)合了C/C++數(shù)學(xué)庫(kù)和圖形庫(kù)[10],全部由世界一流專家用C或者匯編語言編制,是世界一流水平的數(shù)值計(jì)算函數(shù)庫(kù)[12],運(yùn)行效率極高。它提供了一個(gè)終端平臺(tái),供使用者運(yùn)行它的數(shù)學(xué)庫(kù)。如果在matlab平臺(tái)上逐次運(yùn)行幾條語句,其速度尚可以達(dá)到C語言水平;但如果要多條語句循環(huán)跳轉(zhuǎn),速度極慢。但它的代碼編寫效率極高,便于數(shù)據(jù)可視化,很適于實(shí)驗(yàn)室多變的實(shí)驗(yàn)條件和數(shù)據(jù)的分析處理。

由于Matlab的底核代碼就是基于C語言的,其數(shù)學(xué)庫(kù)易于做出與C語言的接口,便于C語言調(diào)用。文獻(xiàn)[13~15]詳細(xì)闡述了C語言調(diào)用Matlab庫(kù)的方法。CT投影數(shù)據(jù)的計(jì)算機(jī)仿真精度依賴于隨機(jī)數(shù)發(fā)生器的質(zhì)量。有人開發(fā)C語言本身的實(shí)用數(shù)學(xué)庫(kù),但一般不適于大數(shù)據(jù)量的CT仿真。如文獻(xiàn)[16]提供的正態(tài)分布隨機(jī)序列,它的有效周期僅為5萬左右,以它為噪聲做大數(shù)據(jù)量的CT模擬重建,結(jié)果中有由噪聲的周期性引起的周期性花紋。Matlab的庫(kù)函數(shù)是由大型企業(yè)的多個(gè)專業(yè)人才合作開發(fā)的實(shí)用庫(kù),被世界各國(guó)廣泛使用和驗(yàn)證,具有更高的運(yùn)行效率和可靠性。C語言調(diào)用Matlab庫(kù),可提高C語言數(shù)值算法的編程效率。

上述各種編程語言的特性如表1所示:低級(jí)語言的編程效率低,運(yùn)行效率高,功能強(qiáng)大;高級(jí)語言的編程效率高,運(yùn)行效率一般不低,其函數(shù)庫(kù)通常側(cè)重某一方面的功能。所有語言都有其技術(shù)瓶頸,按照CT系統(tǒng)的要求,C語言的綜合性能較好,但也需要其它語言的協(xié)助。

3 數(shù)據(jù)類型

本文中數(shù)據(jù)類型主要是指數(shù)據(jù)值在內(nèi)存中存放的格式(不包括指針、字符和自定義結(jié)構(gòu)體等):按小數(shù)點(diǎn)的位置可分為整型和浮點(diǎn)型。其中,浮點(diǎn)型數(shù)據(jù)按占用空間的大小可分為單精度和雙精度。整型數(shù)據(jù)按占用空間的大小可分為超短、短、長(zhǎng)和超長(zhǎng)等,按表示的范圍又可分為帶符號(hào)整型和無符號(hào)整型[17]。

數(shù)據(jù)類型的不同將導(dǎo)致占用空間和運(yùn)算速度的不同。CT掃描系統(tǒng)通常需要兩種精度的數(shù)據(jù):掃描投影數(shù)據(jù)一般由實(shí)際信號(hào)經(jīng)A/D轉(zhuǎn)換而成無符號(hào)整型數(shù)據(jù),通常由無符號(hào)短整型即可表示,目的在于減小存儲(chǔ)空間和便于快速處理;由于用投影數(shù)據(jù)重建后的數(shù)據(jù)通常為浮點(diǎn)型,一般用單精度浮點(diǎn)型表示即可。

投影數(shù)據(jù)和重建后的數(shù)據(jù),通常需要進(jìn)行相同的圖像處理、顯示和保存等操作。C語言雖然不是強(qiáng)類型語言,但隨著它的發(fā)展,其類型檢查機(jī)制已經(jīng)得到了加強(qiáng)[18]。當(dāng)變量被聲明或者常量被寫出時(shí),就已經(jīng)固定了它的數(shù)據(jù)類型,而且它本身無法更改。數(shù)據(jù)處理中,有些是可以統(tǒng)一處理的,但效率會(huì)降低。

以下通過數(shù)據(jù)的灰度直方圖統(tǒng)計(jì)運(yùn)算具體說明,如表2所示。其中:nA、nB和nX為無符號(hào)短整型變量;fX、fA、fB和fC為單精度浮點(diǎn)型變量;nH[·]、nH1[·]和fH[·]都是無符號(hào)長(zhǎng)整型變量,它們要求其序號(hào)必須為整型變量;(UINT)(·)表示將目標(biāo)變量的輸出值強(qiáng)制轉(zhuǎn)換成無符號(hào)長(zhǎng)整型,但不改變目標(biāo)變量本身的類型。nH1是對(duì)nH的內(nèi)存移位,結(jié)果使nH1[nX]與nH[nX?nA]代表同一內(nèi)存值,因此,投影數(shù)據(jù)統(tǒng)計(jì)結(jié)果存放變量可等效成nH1[nA]~nH1[nB]。但由于fA/fC的計(jì)算結(jié)果不一定是整數(shù),故無法做類似的等效。

由表2知,與重建后的數(shù)據(jù)相比:處理投影數(shù)據(jù)的算法簡(jiǎn)單,且計(jì)算速度快。若數(shù)據(jù)處理采用不同的算法,則對(duì)很多函數(shù)必須寫出兩套代碼,增加了編程的工作量;也可以利用C語言的模板關(guān)鍵字“template”[19],將兩個(gè)函數(shù)統(tǒng)一用重建數(shù)據(jù)的算法計(jì)算,對(duì)于投影數(shù)據(jù)的計(jì)算又浪費(fèi)了時(shí)間。

有一種折中的辦法,將所有浮點(diǎn)類型的數(shù)據(jù)fX都利用下式轉(zhuǎn)換成整型數(shù)據(jù)nX:

(1)

其中,fscale=65535/(fmax?fmin),fmin和fmax是整幅圖像中的灰度最值,65535是無符號(hào)短整型數(shù)據(jù)可表示的最大值。在內(nèi)存中只要保存數(shù)據(jù)nX和fmin、fscale的值,就可以在數(shù)據(jù)處理之后,通過下式恢復(fù)成目標(biāo)區(qū)域中的數(shù)據(jù):

(2)

此時(shí),可對(duì)數(shù)據(jù)nX進(jìn)行統(tǒng)一的數(shù)據(jù)處理。由于計(jì)算機(jī)數(shù)據(jù)的離散表示,即使沒有經(jīng)過任何處理,經(jīng)由式(1)和式(2)變換之后,數(shù)據(jù)都有精度損失。因而,fX1與fX通常無法完全一致。

上述方法在計(jì)算速度、代碼編寫效率和精度方面各有利弊,組建軟件架構(gòu)的時(shí),要根據(jù)實(shí)際情況做出合理的選擇。

4 硬件虛擬方法

如前所述,工業(yè)CT掃描系統(tǒng)中涉及較多硬件,與計(jì)算機(jī)直接打交道的硬件主要有:運(yùn)動(dòng)控制器,圖像采集卡,探測(cè)器的命令處理器和射線機(jī)的控制器。這些硬件需要接收計(jì)算機(jī)的命令,并返回信息。由于設(shè)備供貨周期和調(diào)試場(chǎng)地等因素的影響,調(diào)試軟件的計(jì)算機(jī)通常無法同某些(或全部)硬件設(shè)備連接,因而在調(diào)試過程中得不到相應(yīng)的反饋信息。在C語言平臺(tái)下,只要利用條件預(yù)編譯語句(#define、#ifdef、#else和#endif),即可通過一條簡(jiǎn)單的命令,在真實(shí)硬件和模擬的仿真硬件之間隨意切換[20]。

需要強(qiáng)調(diào),仿真的信息一定要逼真,如:(1)采集完成的信息與采集開始命令之間必須延時(shí);(2)采集到的各圖像之間要有一定的灰度變化;(3)運(yùn)動(dòng)到位信息與運(yùn)動(dòng)開始命令之間也要有延時(shí),且延時(shí)要在一定范圍內(nèi)波動(dòng)。

以便于各硬件的分別調(diào)試,及后續(xù)的處理程序和多線程并行的修改。

5 結(jié)語

依據(jù)工業(yè)CT掃描成像系統(tǒng)對(duì)軟件數(shù)據(jù)處理的高效性與硬件控制的靈活性要求,本文針對(duì)軟件架構(gòu)中的編程語言環(huán)境與處理數(shù)據(jù)類型的選擇以及硬件的虛擬方法等基礎(chǔ)問題進(jìn)行了詳細(xì)討論。得出了以下結(jié)論:以C語言作為編程語言可兼顧軟件數(shù)據(jù)處理的高效性與硬件控制的靈活性,并可虛擬硬件;C語言編程效率較低,通過調(diào)用其它語言的函數(shù)庫(kù)可獲得一定的提高;選擇整型數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)進(jìn)行處理可提高CT系統(tǒng)的運(yùn)行效率。

參考文獻(xiàn)

[1]姚愛國(guó),杜瑞穎,譚成予.計(jì)算機(jī)導(dǎo)論[M].武漢:武漢大學(xué)出版社,2003.

[2]鄧焱,王磊,傅琦 等.LabVIEW 7.1測(cè)試技術(shù)與儀器應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2004.

[3]張凱,周陬,郭棟.LabVIEW虛擬儀器工程設(shè)計(jì)與開發(fā)[M].北京:國(guó)防工業(yè)出版社,2004.

[4]錢樂秋,陳增榮,朱揚(yáng)勇.FORTRAN語言程序設(shè)計(jì)與數(shù)值計(jì)算[M].上海:復(fù)旦大學(xué)出版社,1997.

[5]鄧巍巍,王越男.Visual FORTRAN編程指南[M].北京:人民郵電出版社,2000.

[6]宋愛榮.工業(yè)控制系統(tǒng)的C語言[J].機(jī)電工程.1999,(3):43.

[7]邢敏.C語言與匯編語言的接口[J].通化師范學(xué)院學(xué)報(bào).2002,23(5):33-35.

[8]郭詠梅.C語言程序與匯編語言程序的接口分析[J].電腦學(xué)習(xí).2002,(1):30-31.

[9]李月娥,樊秀梅.C與匯編程序接口方法的研究[J].山西大學(xué)學(xué)報(bào)(自然科學(xué)版),1997,20(1):45-48.

[10]飛思科技產(chǎn)品研發(fā)中心.MATLAB6.5應(yīng)用接口編程[M].北京:電子工業(yè)出版社,2003.

[11]余嘯海.Matlab接口技術(shù)與應(yīng)用[M].北京:國(guó)防工業(yè)出版社,2004.

[12]鄭智琴.Simulink電子通信仿真與應(yīng)用[M].北京:國(guó)防工業(yè)出版社,2004.

[13]況昌鵬,馮麗娟.VC中使用Matlab C++數(shù)學(xué)函數(shù)庫(kù)[J].電腦學(xué)習(xí),2001,(6):36-37.

[14]劉志儉,潘獻(xiàn)飛,連軍想.MATLAB外部程序接口(6.x)[M].北京:科學(xué)出版社,2002.

[15]蔣忠進(jìn),林君,陳祖斌.在Visual C++中調(diào)用MATLAB以實(shí)現(xiàn)數(shù)學(xué)算法[J].計(jì)算機(jī)應(yīng)用研究,2004,(5):89-91.

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

[17]孫經(jīng)鈺,鄺孔武.C語言與數(shù)據(jù)結(jié)構(gòu)[M].北京:北京航空航天大學(xué)出版社,2001.

[18]徐寶文,李幫清,劉杰 等.Brian W. Kernighan,Dennis M. Ritchie. C程序設(shè)計(jì)語言(第二版)[M].北京:機(jī)械工業(yè)出版社,2001.

[19]Gregory Satir,Doug Brown.C++語言核心[M].張銘澤.北京:中國(guó)電力出版社,2001.

[20]李一波,張森悅,孫玉霞 等.新概念C語言[M].沈陽:東北大學(xué)出版社,2004.

猜你喜歡
數(shù)據(jù)類型編程語言
基于JavaScript編程語言之 閉包技術(shù)在焦點(diǎn)輪播上的應(yīng)用
壓力-體積轉(zhuǎn)換在CFC編程語言中的實(shí)現(xiàn)解析
詳談Java中的基本數(shù)據(jù)類型與引用數(shù)據(jù)類型
如何理解數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型
Java編程語言的特點(diǎn)與應(yīng)用
常用計(jì)算機(jī)編程語言的分析及選用技巧
淺談不同編程語言對(duì)計(jì)算機(jī)軟件開發(fā)的影響
S7—400PLC系統(tǒng)時(shí)間設(shè)置方法及在煉鋼廠中的應(yīng)用
面向?qū)ο骔eb開發(fā)編程語言的的評(píng)估方法
范疇數(shù)據(jù)類型上的子類型*