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

?

航天測(cè)試系統(tǒng)大容量數(shù)據(jù)處理方法研究*

2014-06-15 17:34馬志剛劉文怡張文棟
火力與指揮控制 2014年10期
關(guān)鍵詞:數(shù)據(jù)文件大容量數(shù)據(jù)處理

馬志剛,劉文怡,張文棟

(1.山西農(nóng)業(yè)大學(xué)信息科學(xué)與工程學(xué)院,山西 太谷 030801;

2.中北大學(xué)儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室,電子測(cè)試技術(shù)重點(diǎn)實(shí)驗(yàn)室,太原 030051)

航天測(cè)試系統(tǒng)大容量數(shù)據(jù)處理方法研究*

馬志剛1,2,劉文怡2,張文棟2

(1.山西農(nóng)業(yè)大學(xué)信息科學(xué)與工程學(xué)院,山西 太谷 030801;

2.中北大學(xué)儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室,電子測(cè)試技術(shù)重點(diǎn)實(shí)驗(yàn)室,太原 030051)

在航天測(cè)試系統(tǒng)中,經(jīng)常需要處理大容量數(shù)據(jù)。討論了C語(yǔ)言、C++語(yǔ)言、MFC中文件的操作方法。結(jié)合Win32 API相關(guān)函數(shù),分析了大容量數(shù)據(jù)文件的讀取、解包、分析等處理方法。在Visual C++6.0編程環(huán)境下,根據(jù)實(shí)際需求編寫了數(shù)據(jù)分析處理軟件。經(jīng)過實(shí)驗(yàn)驗(yàn)證和實(shí)際數(shù)據(jù)測(cè)試,提出的方法可以有效地對(duì)大容量數(shù)據(jù)文件進(jìn)行分析、處理,且已成功應(yīng)用于多個(gè)航天測(cè)試項(xiàng)目,取得了較為理想的分析結(jié)果,為相關(guān)測(cè)試、試驗(yàn)提供了依據(jù)。

航天測(cè)試,大容量數(shù)據(jù),數(shù)據(jù)處理,Visual C++6.0,應(yīng)用程序接口

引言

隨著信息技術(shù)的迅速發(fā)展,各測(cè)試領(lǐng)域均需要處理大量數(shù)據(jù)。在航天測(cè)試中經(jīng)常需要采集并存儲(chǔ)各類緩變、振動(dòng)、沖擊、高速圖像等數(shù)據(jù),有些數(shù)據(jù)通常要求很高的采樣率和較長(zhǎng)的采集時(shí)間。因此,需要分析計(jì)算機(jī)處理的數(shù)據(jù)量非常大,通常可以達(dá)到幾個(gè)GB到十幾個(gè)GB,甚至高達(dá)幾十GB[1-2]。面對(duì)如此巨大的數(shù)據(jù)量,在編寫數(shù)據(jù)處理軟件時(shí),必須采用高效的程序設(shè)計(jì)語(yǔ)言,并設(shè)計(jì)合理的算法。本文討論的大容量數(shù)據(jù)處理算法是基于C++的,開發(fā)環(huán)境是Visual C++6.0。

1 數(shù)據(jù)文件的操作

“文件”是存儲(chǔ)在計(jì)算機(jī)外部介質(zhì)上數(shù)據(jù)信息的集合,一般分為文本文件和二進(jìn)制文件。本文討論的數(shù)據(jù)文件屬于二進(jìn)制文件[2]。通常,程序中的數(shù)據(jù)在程序運(yùn)行結(jié)束之后,就會(huì)從內(nèi)存中清除,如果不及時(shí)保存,這些數(shù)據(jù)將永久消失。而在實(shí)際應(yīng)用中,不可避免地會(huì)遇到需要將某些數(shù)據(jù)永久保存的問題,例如:希望當(dāng)程序運(yùn)行結(jié)束后,依然可以使用這些數(shù)據(jù),這時(shí)就需要進(jìn)行文件操作。C語(yǔ)言、C++語(yǔ)言、MFC和Win32 API均對(duì)文件操作提供了大量支持。

1.1 C語(yǔ)言和C++語(yǔ)言中的文件操作

在C語(yǔ)言中,文件操作可利用FILE結(jié)構(gòu)體進(jìn)行。使用時(shí),可先用fopen()函數(shù)返回一個(gè)指向FILE結(jié)構(gòu)體的指針,文件的讀寫則采用fread()和fwrite()函數(shù)[3]。在C++中,可利用ofstream(文件流)類來完成文件的讀、寫操作,相關(guān)函數(shù)有read()、write()等[4]。

1.2 MFC中的文件操作

MFC中提供了與文件操作有關(guān)的基類:CFile,它提供了很多函數(shù),寫入數(shù)據(jù)可以調(diào)用Write()函數(shù),讀取數(shù)據(jù)則調(diào)用Read()函數(shù)[5]。

另外,如果要獲得數(shù)據(jù)文件的大小(字節(jié)數(shù)),可通過調(diào)用GetLength()函數(shù)完成,其返回值為DWORD型(32位無符號(hào)整型)。顯然,使用GetLength()函數(shù)只能獲得不超過4 GB文件的大小。如果文件大小超過4 GB,GetLength()函數(shù)就無能為力了。雖然在數(shù)據(jù)處理時(shí),文件大小并不是必須要知道的,但獲得該參數(shù)可以在數(shù)據(jù)處理時(shí)估算出處理進(jìn)度或其它必要信息,因此也是有意義的。

1.3 利用Win32 API函數(shù)操作文件

Win32 API提供的與文件操作相關(guān)的函數(shù)主要包括:CreateFile()、ReadFile()、WriteFile()和Find-FirstFile()等[5]。CreateFile()函數(shù)用于打開或創(chuàng)建一個(gè)文件,WriteFile()和ReadFile()函數(shù)可以向指定文件中寫入或從文件中讀出數(shù)據(jù)。為獲得文件的詳細(xì)信息,可調(diào)用FindFirstFile()函數(shù)。其語(yǔ)法格式為:

該函數(shù)執(zhí)行后,變量lpFindFileData將返回一個(gè)WIN32_FIND_DATA類型結(jié)構(gòu)體,該結(jié)構(gòu)體包含大量文件信息,本文比較關(guān)心的是參數(shù)nFileSizeHigh和nFileSizeLow,二者分別表示文件大小的高32位和低32位。因此,使用該函數(shù)可以獲得不超過16EB(16MTB)文件的大小,現(xiàn)階段可以滿足實(shí)際需要。

2 大容量數(shù)據(jù)分析

在航天測(cè)試系統(tǒng)中,從各個(gè)測(cè)試通道獲得的數(shù)據(jù)需要先傳輸至分析計(jì)算機(jī)形成數(shù)據(jù)文件,然后進(jìn)行處理。數(shù)據(jù)處理包括:通道數(shù)據(jù)分離,各通道數(shù)據(jù)的完整性分析,野點(diǎn)剔除、漏點(diǎn)插補(bǔ)、譜分析、統(tǒng)計(jì)分析等。必要時(shí),還要對(duì)連續(xù)變化的模擬信號(hào)(溫度、液位、壓力等)進(jìn)行曲線再現(xiàn)或?qū)С鑫锢砹俊M瑫r(shí),通常還需生成日志文件,該文件用于給出數(shù)據(jù)分析結(jié)果,包括:有效幀數(shù)、是否有丟幀、丟幀位置、丟幀數(shù)據(jù)量等信息。如圖1所示。

圖1 數(shù)據(jù)處理的一般流程

2.1 通道數(shù)據(jù)分離

由于各類測(cè)試數(shù)據(jù)較多,其采樣率、采樣時(shí)間等也不盡相同,因此,獲得的原始數(shù)據(jù)通常由各類數(shù)據(jù)混合編幀形成。所以,在分析數(shù)據(jù)之前,需先將各類(或各通道)數(shù)據(jù)進(jìn)行分離,一般要生成單獨(dú)文件,每個(gè)文件對(duì)應(yīng)一類(或通道)數(shù)據(jù)。如圖2所示。

測(cè)試數(shù)據(jù)是以圖2所示的若干包數(shù)據(jù)組成的。該示例中包含兩類數(shù)據(jù),分別是“數(shù)字量”數(shù)據(jù)(包尾是0X"ABCD")和“模擬量”數(shù)據(jù)(包尾是0X "DCBA"),兩類數(shù)據(jù)包的包頭均為0X"EB90"。為了便于判斷數(shù)據(jù)包的完整性,包結(jié)構(gòu)中設(shè)計(jì)了包計(jì)數(shù)(共4 bit),并且兩類數(shù)據(jù)包分別計(jì)數(shù)。

圖2 某混合編幀數(shù)據(jù)的包結(jié)構(gòu)

“數(shù)據(jù)分離”也叫“數(shù)據(jù)解包”,用于從原始混編數(shù)據(jù)中分離各通道數(shù)據(jù),并生成新的數(shù)據(jù)文件。在分離過程中,要判斷包計(jì)數(shù)的連續(xù)性,如果不連續(xù),應(yīng)生成一條錯(cuò)誤信息并存入日志文件。

數(shù)據(jù)分離前,需將數(shù)據(jù)從文件中讀出。當(dāng)數(shù)據(jù)量較小時(shí)(例如不超過50 MB),可直接將所有數(shù)據(jù)一次性讀入內(nèi)存(數(shù)組);當(dāng)數(shù)據(jù)量較大時(shí)(例如4 GB以上),則必須采用“分塊讀取”→“銜接數(shù)據(jù)”→“局部分析”,最后達(dá)到“完整分析”的方式。即先讀出一塊數(shù)據(jù)(例如128 KB)進(jìn)行分析,并將該塊剩余的未分析部分緩存至臨時(shí)空間;再讀出下一塊,將該塊數(shù)據(jù)與上一塊剩余部分?jǐn)?shù)據(jù)銜接后進(jìn)行分析;依此類推,直到分析完所有數(shù)據(jù)[2]。該流程如圖3所示,圖中的“分析數(shù)據(jù)”是指判斷當(dāng)前塊數(shù)據(jù)中的所有包結(jié)構(gòu),以確定該包數(shù)據(jù)屬于“數(shù)字量”或“模擬量”數(shù)據(jù),并將有效數(shù)據(jù)存入相應(yīng)的文件。

圖3 數(shù)據(jù)分離流程圖

2.2 通道數(shù)據(jù)分析

雖然每類通道數(shù)據(jù)的幀結(jié)構(gòu)不同,但在幀結(jié)構(gòu)設(shè)計(jì)上有規(guī)律可循,因此在設(shè)計(jì)分析算法時(shí)需考慮到程序的靈活性。典型的數(shù)據(jù)幀結(jié)構(gòu)由4部分組成,分別是:幀頭、數(shù)據(jù)內(nèi)容、幀計(jì)數(shù)和幀尾[2],如圖4所示。

圖4 典型的數(shù)據(jù)幀結(jié)構(gòu)

為盡可能多地適應(yīng)不同類型數(shù)據(jù)的分析,相關(guān)分析參數(shù)(幀頭、幀尾、數(shù)據(jù)長(zhǎng)度和幀計(jì)數(shù)個(gè)數(shù)等)應(yīng)當(dāng)是可設(shè)置的。典型C語(yǔ)言代碼如下:

3 數(shù)據(jù)處理軟件設(shè)計(jì)

數(shù)據(jù)處理軟件可分成“數(shù)據(jù)解包”、“通道數(shù)據(jù)分析”、“通道數(shù)據(jù)導(dǎo)出或曲線顯示”等模塊??紤]到待分析處理的數(shù)據(jù)量很大,因此,程序執(zhí)行效率必須考慮。程序執(zhí)行的效率與數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)、程序的控制結(jié)構(gòu)、所處理的數(shù)據(jù)量等因素有關(guān)。在當(dāng)前流行的編程語(yǔ)言中,C語(yǔ)言被普遍認(rèn)為執(zhí)行效率較高[2]。因此,經(jīng)過綜合考慮,數(shù)據(jù)處理軟件采用Visual C++ 6.0設(shè)計(jì),軟件界面如圖5所示。

圖5 數(shù)據(jù)分析軟件界面

4 軟件功能測(cè)試和性能分析

為檢驗(yàn)軟件功能和性能,本文選擇多組數(shù)據(jù)對(duì)軟件進(jìn)行了驗(yàn)證。下頁(yè)圖6給出了數(shù)據(jù)文件大小和解包時(shí)長(zhǎng)的關(guān)系曲線??梢钥吹剑簲?shù)據(jù)解包所耗時(shí)間隨文件大小的增大而逐漸變長(zhǎng),整個(gè)呈現(xiàn)上升趨勢(shì),這是合理的情況;但在曲線上出現(xiàn)了一個(gè)拐點(diǎn)(箭頭所指處),說明解包時(shí)長(zhǎng)還與文件本身的特點(diǎn)等其它因素有關(guān)。同時(shí),解包8 GB左右的文件需耗時(shí)400余秒(6 min~7 min)之多,盡管處理軟件在設(shè)計(jì)時(shí)已經(jīng)進(jìn)行了算法優(yōu)化,但耗時(shí)仍顯較長(zhǎng)。如果文件大小達(dá)到16 GB,解包時(shí)間將超過10 min,而這僅僅是解包花費(fèi)的時(shí)間,后續(xù)的通道數(shù)據(jù)分析還會(huì)占用不少時(shí)間。顯然,這在很多情況下是難以容忍的。因此,在滿足功能的情況下,軟件的執(zhí)行效率還有待提高。

圖6 數(shù)據(jù)文件大小與解包時(shí)長(zhǎng)關(guān)系曲線

5 結(jié) 論

數(shù)據(jù)是考核待測(cè)系統(tǒng)性能和設(shè)備工作狀態(tài)的重要指標(biāo)和依據(jù)。本文從航天測(cè)試系統(tǒng)大容量數(shù)據(jù)處理問題出發(fā),結(jié)合C++、Win32 API函數(shù)等對(duì)文件操作的支持,討論了大容量數(shù)據(jù)的分析處理方法,提出了“分塊讀取”→“銜接數(shù)據(jù)”→“局部分析”,最后達(dá)到“完整分析”的思路,并采用Visual C++6.0編寫了數(shù)據(jù)分析軟件。通過對(duì)自檢數(shù)據(jù)和實(shí)際測(cè)試數(shù)據(jù)的分析處理,結(jié)果表明該處理方法具有較高的穩(wěn)定性,能夠滿足實(shí)際需求。此外,如何對(duì)大容量甚至海量數(shù)據(jù)[1]進(jìn)行分析需要借助更多先進(jìn)技術(shù),例如:多線程編程[6-7]、內(nèi)存映射、并行技術(shù)[7-8]、多核技術(shù)[9]、大數(shù)據(jù)技術(shù)[10]、云計(jì)算[11]等。與此同時(shí),必須考慮軟件的執(zhí)行效率,盡量縮短分析時(shí)間,這些都是本文后續(xù)工作需要繼續(xù)研究的內(nèi)容。

[1]王桂強(qiáng).海量數(shù)據(jù)分析處理方法的研究[D].上海:上海交通大學(xué),2010.

[2]馬志剛,劉文怡.航天測(cè)試系統(tǒng)大容量數(shù)據(jù)曲線繪制方法的研究[J].圖學(xué)學(xué)報(bào),2014,35(4):623-629.

[3]譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)[M].(第4版).北京:清華大學(xué)出版社,2010:331-337.

[4]陳維興,林小茶.C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程[M].(第3版).北京:清華大學(xué)出版社,2009:314-321.

[5]孫 鑫.VC++深入詳解(修訂版)[M].北京:電子工業(yè)出版社,2012:437-466.

[6]唐軼軒,吳俊敏,陳國(guó)良,等.面向多線程程序基于效用的Cache優(yōu)化策略[J].計(jì)算機(jī)研究與發(fā)展,2013,50(1): 170-180.

[7]胡 杏,潘送軍,胡 瑜,等.基于存儲(chǔ)級(jí)并行的同時(shí)多線程電壓緊急容錯(cuò)技術(shù)[J].計(jì)算機(jī)學(xué)報(bào),2013,36(5):1065-1075.

[8]魏海濤,于俊清,余華飛,等.一種面向數(shù)據(jù)流程序的軟件流水并行化方法[J].計(jì)算機(jī)學(xué)報(bào),2011,34(5):889-898.

[9]劉虎球,趙 鵬.一種多核間內(nèi)存公平調(diào)度模型[J].計(jì)算機(jī)學(xué)報(bào),2013,36(11):2191-2199.

[10]孟小峰,慈 祥.大數(shù)據(jù)管理概念技術(shù)與挑戰(zhàn)[J].計(jì)算機(jī)研究與發(fā)展,2013,50(1):146-169.

[11]陳 康,鄭緯民.云計(jì)算:系統(tǒng)實(shí)例與研究現(xiàn)狀[J].軟件學(xué)報(bào),2009,20(5):1337-1348.

Research on Processing Method of Massive Data in Space Measurement System

MA Zhi-gang1,2,LIU Wen-yi2,ZHANG Wen-dong2
(1.School of Information Science and Engineering,Shanxi Agricultural University,Taigu 030801,China;
2.Key Laboratory of Instrumentation Science&Dynamic Measurement(North University of China),Ministry of Education,Science and Technology on Electronic Test&Measurement Laboratory,Taiyuan 030051,China)

In space measurement system,massive data is always necessary to be processed.File processing method based on C,C++and MFC is introduced in this paper.Based on functions in Win32 API,data reading,data decomposing and analysis method of massive data file are presented.According to practical requirement,the data processing software is programmed in Visual C++6.0.By experimental verification and practical data testing,the processing method proposed in this paper can analyze and process massive data file effectively.The processing method has been employed in several space measurement projects successfully and obtained satisfactory analysis result,which provided the reliable basis for relational tests and experiments.

space measurement,massive data,data processing,Visual C++6.0,Application Program Interface(API)

TP391

A

1002-0640(2014)10-0074-04

2013-07-05

2013-10-15

國(guó)家自然科學(xué)基金資助項(xiàng)目(51275491)

馬志剛(1982- ),男,山西文水人,在讀博士。研究方向:航天智能測(cè)量系統(tǒng)數(shù)據(jù)處理、慣性感知與測(cè)控技術(shù)等。

猜你喜歡
數(shù)據(jù)文件大容量數(shù)據(jù)處理
認(rèn)知診斷缺失數(shù)據(jù)處理方法的比較:零替換、多重插補(bǔ)與極大似然估計(jì)法*
基于低頻功率數(shù)據(jù)處理的負(fù)荷分解方法
無人機(jī)測(cè)繪數(shù)據(jù)處理關(guān)鍵技術(shù)及運(yùn)用
某大容量電驅(qū)系統(tǒng)配套同步電機(jī)電磁分析與計(jì)算
大容量同步電機(jī)低比轉(zhuǎn)速離心風(fēng)扇的設(shè)計(jì)與數(shù)值分析
航空用大容量鋰離子電池研究
基于表空間和數(shù)據(jù)文件探討MIS中數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)
基于MATLAB語(yǔ)言的物理實(shí)驗(yàn)數(shù)據(jù)處理探討
大容量光伏發(fā)電關(guān)鍵技術(shù)及對(duì)并網(wǎng)的影響
基于網(wǎng)絡(luò)環(huán)境的社區(qū)協(xié)同辦公問題探討(二)