• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      馬志剛,劉文怡,張文棟

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

      2.中北大學(xué)儀器科學(xué)與動態(tài)測試教育部重點實驗室,電子測試技術(shù)重點實驗室,太原 030051)

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

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

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

      2.中北大學(xué)儀器科學(xué)與動態(tài)測試教育部重點實驗室,電子測試技術(shù)重點實驗室,太原 030051)

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

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

      引言

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

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

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

      1.1 C語言和C++語言中的文件操作

      在C語言中,文件操作可利用FILE結(jié)構(gòu)體進行。使用時,可先用fopen()函數(shù)返回一個指向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位無符號整型)。顯然,使用GetLength()函數(shù)只能獲得不超過4 GB文件的大小。如果文件大小超過4 GB,GetLength()函數(shù)就無能為力了。雖然在數(shù)據(jù)處理時,文件大小并不是必須要知道的,但獲得該參數(shù)可以在數(shù)據(jù)處理時估算出處理進度或其它必要信息,因此也是有意義的。

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

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

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

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

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

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

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

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

      測試數(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è)計了包計數(shù)(共4 bit),并且兩類數(shù)據(jù)包分別計數(shù)。

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

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

      數(shù)據(jù)分離前,需將數(shù)據(jù)從文件中讀出。當(dāng)數(shù)據(jù)量較小時(例如不超過50 MB),可直接將所有數(shù)據(jù)一次性讀入內(nèi)存(數(shù)組);當(dāng)數(shù)據(jù)量較大時(例如4 GB以上),則必須采用“分塊讀取”→“銜接數(shù)據(jù)”→“局部分析”,最后達到“完整分析”的方式。即先讀出一塊數(shù)據(jù)(例如128 KB)進行分析,并將該塊剩余的未分析部分緩存至臨時空間;再讀出下一塊,將該塊數(shù)據(jù)與上一塊剩余部分數(shù)據(jù)銜接后進行分析;依此類推,直到分析完所有數(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è)計上有規(guī)律可循,因此在設(shè)計分析算法時需考慮到程序的靈活性。典型的數(shù)據(jù)幀結(jié)構(gòu)由4部分組成,分別是:幀頭、數(shù)據(jù)內(nèi)容、幀計數(shù)和幀尾[2],如圖4所示。

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

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

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

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

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

      4 軟件功能測試和性能分析

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

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

      5 結(jié) 論

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

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

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

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

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

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

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

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

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

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

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

      [11]陳 康,鄭緯民.云計算:系統(tǒng)實例與研究現(xiàn)狀[J].軟件學(xué)報,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

      國家自然科學(xué)基金資助項目(51275491)

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

      猜你喜歡
      數(shù)據(jù)文件大容量數(shù)據(jù)處理
      認知診斷缺失數(shù)據(jù)處理方法的比較:零替換、多重插補與極大似然估計法*
      ILWT-EEMD數(shù)據(jù)處理的ELM滾動軸承故障診斷
      12-20升大容量PET瓶裝式吹瓶機
      數(shù)據(jù)文件恢復(fù)專題問答
      數(shù)據(jù)文件安全管控技術(shù)的研究與實現(xiàn)
      SQL數(shù)據(jù)文件恢復(fù)工具
      能變出雨衣的18升大容量背包
      基于希爾伯特- 黃變換的去噪法在外測數(shù)據(jù)處理中的應(yīng)用
      基于大容量指紋識別的實時身份認證系統(tǒng)
      大容量Flash在井下記錄儀中的應(yīng)用
      湖口县| 桃源县| 闸北区| 铜陵市| 通榆县| 金秀| 双流县| 西峡县| 安龙县| 油尖旺区| 濮阳市| 延寿县| 赤水市| 钟山县| 阜新| 汝阳县| 买车| 东源县| 农安县| 盱眙县| 始兴县| 鹿邑县| 河北区| 区。| 安多县| 万荣县| 谢通门县| 海宁市| 大兴区| 喜德县| 黄平县| 丽江市| 水富县| 苏尼特左旗| 南阳市| 五指山市| 临湘市| 京山县| 烟台市| 乡城县| 新沂市|