鞏健文,楊日杰
(海軍航空工程學院,山東 煙臺 264001)
?
基于Visual C++的水聲目標數(shù)據(jù)庫設(shè)計
鞏健文,楊日杰
(海軍航空工程學院,山東 煙臺264001)
摘要:針對水聲目標實測數(shù)據(jù)量龐大,LOFAR和DEMON分析計算量大的問題,設(shè)計了一個基于Visual C++ 6.0的數(shù)據(jù)庫管理系統(tǒng)。管理系統(tǒng)通過ADO接口實現(xiàn)與SQL Server 2005數(shù)據(jù)庫管理程序的數(shù)據(jù)交換,保證了數(shù)據(jù)穩(wěn)定存儲和高效傳輸。通過內(nèi)存映射文件技術(shù),實現(xiàn)了對大數(shù)據(jù)文件的快速讀取。采用CPU與GPU并行計算進行了LOFAR和DEMON分析,實現(xiàn)了LOFAR和DEMON譜圖的實時顯示。整個數(shù)據(jù)庫管理系統(tǒng)操作簡潔高效,可靠性高,具有廣泛的實際應(yīng)用價值。
關(guān)鍵詞:Visual C++;ADO接口;SQL Sever;內(nèi)存映射文件;CPU與GPU并行計算
Citation format:GONG Jian-wen, YANG Ri-jie.Database Design of Underwater Acoustic Target Based on Visual C++[J].Journal of Ordnance Equipment Engineering,2016(3):82-85.
水聲目標實測數(shù)據(jù)是驗證在實際工作環(huán)境中,各種算法的有效性以及系統(tǒng)的穩(wěn)定性的關(guān)鍵信息。在數(shù)據(jù)積累過程中,如何將不同時間、地點采集的各種數(shù)據(jù)進行方便有效地整理保存,并能高效地查詢、提取,建立數(shù)據(jù)庫是實現(xiàn)數(shù)據(jù)管理的最有效手段[1-5]。在實測信號數(shù)據(jù)的基礎(chǔ)上,對原始音頻信號進行處理,LOFAR及DEMON分析都可以為目標狀態(tài)判決提供一定的依據(jù)。由LOFAR分析可獲得反映艦船目標各部件結(jié)構(gòu)特征的寬頻帶特征,而DEMON分析則獲得較低頻段的調(diào)制強線譜特征,彌補了LOFAR分析在低頻端的不足,共同描繪了目標信號的譜系特征。
由于實測數(shù)據(jù)通常較大,讀取時間相對較長,本文采用內(nèi)存映射文件技術(shù)對文件進行讀取。針對LOFAR和DEMON分析計算量大、實時性差的問題,本文采用CPU與GPU并行計算的方法對LOFAR譜圖和DEMON譜圖進行匯總。
1水聲目標實測數(shù)據(jù)庫設(shè)計
本研究是基于Visual C++6.0的ADO接口技術(shù)調(diào)用SQL Server 2005數(shù)據(jù)庫管理系統(tǒng)。本系統(tǒng)由前臺和后臺兩部分組成。前臺實現(xiàn)人機交互界面顯示功能,用戶通過前臺界面可以對數(shù)據(jù)庫進行操作;后臺實現(xiàn)數(shù)據(jù)維護、管理、存儲功能,管理員通過后臺可以直接對數(shù)據(jù)庫進行底層操作和系統(tǒng)維護。
ADO接口技術(shù)的結(jié)構(gòu)分為3層:Visual C++應(yīng)用程序(人機交互界面)、SQL Server數(shù)據(jù)庫管理系統(tǒng)和數(shù)據(jù)庫、表(數(shù)據(jù)層),它們之間的數(shù)據(jù)交換由ADO接口和數(shù)據(jù)庫引擎實現(xiàn),其結(jié)構(gòu)如圖1所示。
圖1 ADO接口結(jié)構(gòu)
2內(nèi)存映射文件技術(shù)
水聲目標是實測數(shù)據(jù)在計算機中是以無損音質(zhì)WAV音樂格式存儲的,這種存儲方法具有跨平臺性、易移植性和穩(wěn)定性等特點,同時避免了使用大型數(shù)據(jù)庫軟件帶來的不必要的開銷。然而在文件的管理和處理速度上則遠不如專業(yè)數(shù)據(jù)庫軟件。實測信號往往動輒數(shù)百MB,甚至GB級的數(shù)據(jù)的操作,使用WinAPI函數(shù)及MFC文件操作類中的文件操作方法,在功能和效率上顯然難以滿足要求。而使用內(nèi)存映射文件技術(shù)則可以較好地解決此類問題。
內(nèi)存映射文件方式是windows的一種內(nèi)存管理方法,提供了一個統(tǒng)一的內(nèi)存管理特征[6-7]。內(nèi)存映射文件與虛擬內(nèi)存有些類似,通過內(nèi)存映射文件可以保留一個地址空間的區(qū)域,同時將物理存儲器提交給此區(qū)域,只是內(nèi)存文件映射的物理存儲器來自一個己經(jīng)存在于磁盤上的文件,而非系統(tǒng)的頁文件,而且在對該文件進行操作之前必須首先對文件進行映射,就如同將整個文件從磁盤加載到內(nèi)存。由此可以看出,使用內(nèi)存映射文件處理存儲于磁盤上的文件時,將不必再對文件執(zhí)行工I/O操作,這意味著在對文件進行處理時將不必再為文件申請并分配緩存,所有的文件緩存操作均由系統(tǒng)直接管理,由于取消了將文件數(shù)據(jù)加載到內(nèi)存、數(shù)據(jù)從內(nèi)存到文件的回寫以及釋放內(nèi)存塊等步驟,使得內(nèi)存映射文件處理大數(shù)據(jù)量的文件時能起到相當重要的作用。以下列出內(nèi)存映射文件技術(shù)關(guān)鍵函數(shù)說明:
1) CreateFile()函數(shù)用于創(chuàng)建文件內(nèi)核對象,并將文件映射的物理存儲器的位置告訴操作系統(tǒng);
2) CreateFileMapping()函數(shù)用于創(chuàng)建一個文件映射內(nèi)核對象,讓系統(tǒng)為該對象保留相應(yīng)的物理儲存器,并返回文件映射對象的句柄;
3) MapViewOfFile()函數(shù)用于將文件映射對象全部映射到進程地址空間中,系統(tǒng)為保留的地址空間提交物理文件數(shù)據(jù),作為該區(qū)域的物理存儲器,并得到文件數(shù)據(jù)的一個視圖;
4) UnmapViewOfFile()函數(shù)用于在進程的地址空間中撤銷文件映射內(nèi)核對象的映射;
5) CloseHandle()用于關(guān)閉文件內(nèi)核對象,以防止程序繼續(xù)運行可能引起的資源泄露。
3CPU與GPU并行計算的LOFAR和DEMON譜圖顯示
3.1LOFAR分析和DEMON分析[8-10]
LOFAR譜圖從時、頻兩個角度對信號進行描述,是近10年來較具代表性的被動聲納信號處理方法之一,該方法通過對連續(xù)的采樣數(shù)據(jù)作短時傅里葉變換(STFT)而構(gòu)成信號的非平穩(wěn)特性。獲得LOFAR譜圖步驟為:
1) 將原始信號的采樣序列s(n)分成連續(xù)的K段,每段L個點,各段數(shù)據(jù)間可適當部分重疊,可選擇重疊50%,具體視情況綜合分配重疊部分的數(shù)據(jù)長度;
2) 對第j段信號的采樣樣本Mj(n)作歸一化處理和中心化處理,歸一化處理可使接收信號的幅度(或方差)在時間上均勻;中心化處理則使樣本的均值為零(去直流);
5) 對信號xj(n)作短時傅里葉變換得到第j段數(shù)據(jù)信號的LOFAR譜;
Xj(k)=STFT[xj(n)]
6) 將以上獲得的各段數(shù)據(jù)的譜按時間繪制在坐標系中,即得到完整的LOFAR譜圖。
在聲納信號處理中把通過對接受的寬帶信號進行解調(diào),以計算低頻解調(diào)譜的算法稱為DEMON分析,解調(diào)后的低頻時域信號稱為包絡(luò)信號,其功率譜稱為DEMON譜。艦船的周期調(diào)制譜等于軸頻和葉片數(shù)目的乘積,通常稱螺旋槳拍現(xiàn)象,艦船噪聲用周期性局部平穩(wěn)過程作模型可表示為
式中:n(t)為窄帶平穩(wěn)白色高斯隨機過程;f(t)稱為調(diào)制函數(shù),是慢變化的周期函數(shù),它所在的頻域比n(t)所在的頻域要低得多。利用絕對值檢波方法即可獲得調(diào)制信號f(t)。再對獲得的解調(diào)信號進行STFT處理即可得到解調(diào)信號的DEMON譜。
3.2CPU與GPU并行計算
最近幾年,圖形處理單元(GPU)技術(shù)飛速發(fā)展并在通用計算領(lǐng)域得到廣泛應(yīng)用。雖然GPU單核的計算能力相對CPU較弱,但是GPU的處理核心數(shù)遠多于CPU,因此相同價格的GPU相對CPU具有更高的計算性能。隨著NVIDIA公司發(fā)布了CUDA(ComputeUnifiedDeviceArchitecture),并開發(fā)了一套基于CUDA平臺的NVCC編譯器驅(qū)動,編譯器可以嵌入到微軟的VisualStudio開發(fā)平臺下,當我們運行一個基于CUDA的程序時,可以完成GPU代碼的編譯。針對Windows,Linux,MacOSX操作系統(tǒng),NVIDIA都提供了相應(yīng)的開發(fā)套件。以Windows系列為例,需要安裝VisualStudio作為開發(fā)工具,其次安裝NVIDIA開發(fā)套件cuda_5.0和cuda_NsightVisual_Stduio作為GPU平臺下代碼的調(diào)試工具和性能測試工具,然后安裝顯卡最新驅(qū)動程序。目前GPU計算在生物、電磁場、地理等領(lǐng)域得到了大量的應(yīng)用。
最能發(fā)揮GPU性能的是細粒度并行計算,即將每個子任務(wù)劃分成許多更細小的操作步,然后GPU在操作步層而對子任務(wù)進行并行計算。這種并行方式在神經(jīng)網(wǎng)絡(luò)以及有限元領(lǐng)域得到了很廣泛的應(yīng)用。但是這種并行計算方式需要對GPU程序進行細致的調(diào)試以實現(xiàn)對大量的操作步的高效運算,程序?qū)崿F(xiàn)難度較大。而相對于細粒度的并行,粗粒度的并行方式則更容易實現(xiàn)。粗粒度的并行計算方式采用的是基于相對獨立的子任務(wù)的并行而不是操作步的并行。這種并行方式在優(yōu)化和控制領(lǐng)域都有應(yīng)用。當滿足以下情況時,粗粒度和細粒度的并行效率相當:
1) 子任務(wù)的數(shù)量遠多于GPU計算的核心數(shù);
2) 每個子任務(wù)的計算量比較適中,能夠獨立在一個GPU核心上完成;
3) 各個子任務(wù)之間不需要太多的數(shù)據(jù)交換。并且計算過程中不需要全局同步,每個GPU核心上的子任務(wù)可以按順序逐個進行計算。
而對于水聲目標實測數(shù)據(jù)的LOFAR分析、DEMON分析可以滿足以上3個特性。雖然LOFAR分析和DEMON分析需要對實測數(shù)據(jù)進行實時計算,但其計算量不會超過GPU單核的計算能力,每一時刻計算能被看作一個相對獨立的計算子任務(wù)。此外不同時刻的LOFAR分析和DEMON分析相對獨立,不同GPU線程之間幾乎不需要進行數(shù)據(jù)交換。因此GPU數(shù)百計的計算核心可以實現(xiàn)對實測數(shù)據(jù)的實時計算,這樣計算效率將非常高。
計算分析模塊是程序的核心,由CPU和GPU協(xié)同完成計算任務(wù)。其中CPU負責文件讀寫、任務(wù)分配等工作,GPU負責完成對每一時刻實測數(shù)據(jù)進行LOFAR分析和DEMON分析。
4性能分析及軟件實現(xiàn)
4.1性能分析
系統(tǒng)硬件環(huán)境為:酷睿i3 2.67GHz處理器,1G內(nèi)存,600G硬盤。操作系統(tǒng)為MicrosoftWindowsXPProfessional,開發(fā)平臺為MicrosoftVisualC++ 6.0。試驗通過軟件系統(tǒng)打開水聲目標數(shù)據(jù)庫中選定實測數(shù)據(jù),使用GetTickCount函數(shù)進行計時,采用普通文件打開和內(nèi)存映射文件技術(shù)實現(xiàn)音頻播放所需要的時間,如表1所示。
表1 兩種方法讀取文件時間
4.2軟件實現(xiàn)
按照系統(tǒng)的流程和組成,主要功能模塊的部分界面如下:
1) 數(shù)據(jù)庫主界面,可實現(xiàn)數(shù)據(jù)庫顯示、查詢和管理功能,音頻播放功能,如圖2所示。
圖2 數(shù)據(jù)庫主界面
2) LOFAR和DEMON譜圖顯示界面。通過CPU與GPU并行計算實現(xiàn)LOFAR和DEMON譜圖的實時顯示。如圖3、圖4所示。
圖3 LOFAR譜圖顯示
圖4 DEMON譜圖顯示
5結(jié)束語
本文設(shè)計了水聲目標實測信號數(shù)據(jù)庫管理系統(tǒng)。該系統(tǒng)符合軟件開發(fā)基本規(guī)范,在Visual C++6.0和SQL Sever2005環(huán)境下開發(fā)而成,采用ADO接口技術(shù)訪問數(shù)據(jù)庫。系統(tǒng)完成測試并打包,能實現(xiàn)數(shù)據(jù)庫的穩(wěn)定高效管理。軟件中對實測數(shù)據(jù)的讀取采取內(nèi)存映射文件技術(shù),驗證表明此方法大大縮短了了數(shù)據(jù)的讀取時間。在對原始數(shù)據(jù)做LOFAR分析和DEMON分析時采用CPU和GPU并行計算,克服了普通單核CPU計算實時性差的問題,實現(xiàn)了LOFAR譜圖和DEMON譜圖的實時顯示。
參考文獻:
[1]萬軍,周莉.輕質(zhì)材料環(huán)境腐蝕工藝數(shù)據(jù)庫改進設(shè)計[J].四川兵工學報,2010,31(2):54-56.
[2]吳旭輝.飛機類目易損性數(shù)據(jù)庫軟件設(shè)計[J].四川兵工學報,2012,32(2):89-93.
[3]李治軍,李大成,尹立業(yè).基于移動智能終端的武器數(shù)據(jù)庫管理信息系統(tǒng)[J].四川兵工學報,2012,33(2):87-89.
[4]楊煒辰,凌海風,武鵬,等.基于關(guān)系數(shù)據(jù)庫的本體存儲模式[J].四川兵工學報,2013,34(4):111-115.
[5]周澤云,向陽霞,鄒渝.基于SQLite數(shù)據(jù)庫的裝備數(shù)據(jù)采集系統(tǒng)設(shè)計[J].四川兵工學報,2014,35(11):60-64.
[6]于慧彬,齊鵬,梁捷.內(nèi)存映射文件在大數(shù)據(jù)量海洋調(diào)查數(shù)據(jù)處理中的應(yīng)用[J].海洋技術(shù),2010,29(1):32-35.
[7]姜三義,代真真,李陽.基于內(nèi)存映射文件的進化算法數(shù)據(jù)存儲引擎[J].計算機工程與應(yīng)用,2015,51(1):49-53.
[8]宋振宇,丁勇鵬,趙秀麗,等.基于LOFAR譜圖的水下目標識別方法[J].海軍航空工程學院學報,2011,26(3):283-286.
[9]邱家興,程玉勝,張驚丞.船舶噪聲DEMON譜質(zhì)量評估方法[J].艦船科學技術(shù),2014,36(9):46-49.
[10]吳昌昊,龔俊,劉子琪.基于CUDA實現(xiàn)經(jīng)典功率譜估計[J].四川兵工學報,2013,34(10):98-101.
(責任編輯楊繼森)
Database Design of Underwater Acoustic Target Based on Visual C++
GONG Jian-wen, YANG Ri-jie
( Naval Aeronautical and Astronautical University, Yantai 264001, China)
Abstract:To deal with large amount of underwater acoustic target measured data and large amount of calculation of LOFAR and DEMON, a database management system based on Visual C++ 6.0 was designed. The system exchanged data with SQL Sever 2005 database management program through ADO interface in order to ensure a stable storage and efficient data transmission. The system read data using memory mapping file, which can improve the efficiency of file read. The system analyzed LOFAR and DEMON using parallel computing based on CPU and GPU,which can real-timely display the spectrogram of LOFAR and DEMON. The system designed concisely, efficiently and of high reliability, which has extensive practical application value.
Key words:visual C++; ADO interfaces; SQL Sever; memory mapping file; parallel computing based on CPU and GPU
文章編號:1006-0707(2016)03-0082-04
中圖分類號:TP311
文獻標識碼:A
doi:10.11809/scbgxb2016.03.020
作者簡介:鞏健文(1980—),男,碩士,主要從事水聲工程研究。
基金項目:國家自然基金項目(61271444)
收稿日期:2015-09-15;修回日期:2015-09-30
本文引用格式:鞏健文,楊日杰.基于Visual C++的水聲目標數(shù)據(jù)庫設(shè)計[J].兵器裝備工程學報,2016(3):82-85.
【信息科學與控制工程】