馬偉霞,王勤忠,謝恒義,潘林山,雷 閃
(1.河南省地震局,河南 鄭州 450016;2.鄭州測(cè)繪學(xué)校,河南 鄭州 450016)
地震臺(tái)站臺(tái)址勘選是地震臺(tái)網(wǎng)建設(shè)的前期工作,也是地震臺(tái)站建設(shè)過程中至關(guān)重要的基礎(chǔ)工作[1]。新建臺(tái)站在勘選階段需要對(duì)站點(diǎn)的噪聲數(shù)據(jù)進(jìn)行處理與分析,確認(rèn)站點(diǎn)是否符合建臺(tái)要求。2016年2月國家地震烈度速報(bào)與預(yù)警工程項(xiàng)目河南分項(xiàng)啟動(dòng)。根據(jù)規(guī)劃方案,河南省擬新建23個(gè)基準(zhǔn)站?!邦A(yù)警基準(zhǔn)站勘選技術(shù)指南”中明確要求,每個(gè)基準(zhǔn)站需要選擇至少連續(xù)48 h的記錄數(shù)據(jù)并繪制3 Hz頻點(diǎn)的噪聲功率譜密度值VS時(shí)間分布圖。通過現(xiàn)有軟件計(jì)算后,單個(gè)臺(tái)站會(huì)產(chǎn)生三分向(UD、EW、NS)的數(shù)據(jù)文件,單個(gè)分向文件含有至少48個(gè)時(shí)間點(diǎn)的數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊含有1~20 Hz頻帶共14個(gè)頻點(diǎn)的噪聲功率譜密度數(shù)據(jù)。如果僅依賴人工手動(dòng)處理這些數(shù)據(jù),因工作量大且人員較少,很難在規(guī)定時(shí)間內(nèi)完成。針對(duì)這一問題,文章基于C#語言開發(fā)一套數(shù)據(jù)處理軟件,軟件可提高數(shù)據(jù)處理人員的工作效率,保證勘選工作按時(shí)完成。
河南省在進(jìn)行預(yù)警臺(tái)站勘選時(shí),儀器采用北京港震機(jī)電技術(shù)有限公司生產(chǎn)的FSS-3M反饋式短周期地震計(jì)和EDAS-24IP數(shù)據(jù)采集器。利用“Cal_20120525C”程序包對(duì)采集的原始數(shù)據(jù)處理后,生成UD、EW、NS三分向的功率譜密度測(cè)試結(jié)果詳細(xì)報(bào)告,對(duì)于基準(zhǔn)站,該報(bào)告里包含連續(xù)48 h的數(shù)據(jù),且每小時(shí)數(shù)據(jù)里均包含中心頻率1~20 Hz的1/3倍頻程各頻率,以及各頻率對(duì)應(yīng)的地動(dòng)噪聲功率譜密度、地動(dòng)噪聲RMS值,平均地動(dòng)噪聲、地震臺(tái)觀測(cè)動(dòng)態(tài)范圍等。
EW分向功率譜密度測(cè)試結(jié)果詳細(xì)報(bào)告(選取其中兩個(gè)時(shí)間點(diǎn))的數(shù)據(jù)格式如下:
fss-3m_2016030718:
測(cè)試結(jié)果數(shù)據(jù):
中心頻率1~20 Hz的1/3倍頻程各頻率:
1.000,1.260,1.587,2.000,2.520
3.175,4.000,5.040,6.350,8.000
10.079,12.699,16.000,20.159
fss-3m臺(tái)(ew向)1/3倍頻程帶寬(1~20 Hz)各段地動(dòng)噪聲功率譜密度(dB):
-140.991,-138.308,-135.077,-129.255,-126.811
-122.911,-121.521,-114.824,-117.534,-99.053
-109.595,-112.400,-107.090,-103.585
1/3倍頻程帶寬(1~20 Hz)各段地動(dòng)噪聲RMS值(m/s):
1.678 94e-008,2.037 16e-008,2.632 49e-008,4.584 61e-008,5.411 46e-008
7.554 2e-008,7.897 23e-008,1.521 07e-007,9.919 8e-008,7.419 68e-007
1.963 74e-007,1.266 78e-007,2.079 75e-007,2.773 91e-007
1/3倍頻程帶寬(1~20 Hz)各段的平均地動(dòng)噪聲RMS值為2.355 34e-007(m/s)。
平均地動(dòng)噪聲(記錄p-p)為435(Counts)。
地震臺(tái)觀測(cè)動(dòng)態(tài)范圍(dB)(Hz)[輸出10 V檔]:
93.5(0.2),109.0(1.0),100.3(2.0),87.8(5.0),84.5(10),78.6(20)
fss-3m_2016030719:
測(cè)試結(jié)果數(shù)據(jù):
中心頻率1~20 Hz的1/3倍頻程各頻率:
1.000, 1.260, 1.587, 2.000,2.520
3.175, 4.000, 5.040, 6.350,8.000
10.079,12.699,16.000,20.159
fss-3m臺(tái)(ew向)1/3倍頻程帶寬(1~20 Hz)各段地動(dòng)噪聲功率譜密度(dB):
-141.474,-137.948,-134.547,-131.044,-127.204
-122.338,-120.046,-115.077,-115.890,-99.968
-103.747,-109.765,-104.243,-99.869
1/3倍頻程帶寬(1~20 Hz)各段地動(dòng)噪聲RMS值(m/s):
1.588 12e-008,2.123 35e-008,2.798 24e-008,3.731 43e-008,5.172 04e-008
8.068 92e-008,9.358 84e-008,1.477 42e-007,1.198 68e-007,6.677 9e-007
1/3倍頻程帶寬(1~20 Hz)各段的平均地動(dòng)噪聲RMS值為2.598 07e-007(m/s)。
平均地動(dòng)噪聲(記錄p-p)為480(Counts)。
地震臺(tái)觀測(cè)動(dòng)態(tài)范圍(dB)(Hz)[輸出10 V檔]:
92.2(0.2),109.5(1.0),102.0(2.0),88.1(5.0),78.6(10),74.9(20)
……
上述文件中需要用到1/3倍頻程頻率3 Hz對(duì)應(yīng)的地動(dòng)噪聲功率譜密度值:-122.911、-122.338、……。該研究之前,河南省地震局處理這些數(shù)據(jù)有兩種方法:一種是直接打開文件,手動(dòng)挑選數(shù)據(jù);另一種是將數(shù)據(jù)拷貝到excel文件中,然后選數(shù)據(jù)。兩種方法都是靠人工手動(dòng)挑選數(shù)據(jù),經(jīng)測(cè)算,手動(dòng)處理一個(gè)基準(zhǔn)站至少需要1 h,不僅工作量大,且容易出現(xiàn)人為錯(cuò)誤,影響結(jié)果的準(zhǔn)確性。
經(jīng)過對(duì)原始數(shù)據(jù)文件進(jìn)行分析,發(fā)現(xiàn)文件中的數(shù)據(jù)有一定的規(guī)律:同一文件中不同時(shí)間的儀器型號(hào)相同、內(nèi)容格式相同;同一時(shí)間內(nèi)不同頻率與其對(duì)應(yīng)的功率譜密度的相對(duì)位置相同。因此,軟件在設(shè)計(jì)時(shí)的數(shù)據(jù)處理思路為:將三分向數(shù)據(jù)文件同時(shí)加載;然后按照相同規(guī)則依次處理每個(gè)文件,并將讀取的數(shù)據(jù)保存到臨時(shí)數(shù)組中,待三分向數(shù)據(jù)全部處理完畢;最后將臨時(shí)數(shù)組中的數(shù)據(jù)按照規(guī)定格式依次保存至excel文件。數(shù)據(jù)處理流程如圖1所示。
圖1 數(shù)據(jù)處理流程圖Fig.1 Data processing flow
由于文件結(jié)構(gòu)比較簡單,目前也沒有像HDF、NetCDF、GrADS等文件有專門的第三方庫函數(shù)可以利用[2-4],所以在處理此類型數(shù)據(jù)時(shí),必須研究人員自己寫函數(shù)來實(shí)現(xiàn)。計(jì)算機(jī)編程語言有很多,也有很多數(shù)據(jù)處理人員利用不同的開發(fā)平臺(tái)和程序語言對(duì)數(shù)據(jù)處理方法進(jìn)行研究[5-7]。經(jīng)過調(diào)研,C#程序設(shè)計(jì)語言可以輕松實(shí)現(xiàn)對(duì)文本文件的處理,以及Windows窗體和控件的創(chuàng)建[8-10]。故選擇基于VS2010開發(fā)環(huán)境,利用圖形界面較好、功能比較強(qiáng)大的C#來編寫實(shí)現(xiàn)?!芭_(tái)站勘選數(shù)據(jù)處理軟件”主要由文件讀取、數(shù)據(jù)保存兩部分組成。其中,文件讀取過程通過使用StreamReader類進(jìn)行,讀取部分代碼如下:
for(int i=0; i<3; i++)//循環(huán)讀取三分向文件
{
StreamReader dataReader = new StreamReader(DataFile[i], Encoding.Default);
string data = dataReader.ReadLine();//逐行讀取數(shù)據(jù)
if (data.Contains(FindContent))//FindContent為查找內(nèi)容,由前端輸入
{
for (int j = 0; j < row; j++)//row為待讀取數(shù)據(jù)所在行數(shù),由前端輸入
{
data = dataReader.ReadLine();
}
string[] pos = data.Split(new Char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
list.data = Convert.ToDouble(pos[col - 1]);//選擇第col列的數(shù)據(jù),col由前端輸入
dataArray.Add(list);//將讀取的數(shù)據(jù)放入dataArray中
}
dataReader.Close();//文件讀取結(jié)束
}
文件讀取結(jié)束后,為方便制作圖表,將讀取的數(shù)據(jù)保存到excel文件中。將數(shù)據(jù)保存在excel文件中的部分代碼為:
for (int i = 0; i < dataArray.Count; i++)
{
if (dataArray[i].num == 0)
{
Excel.Range rng1 = xsheet.get_Range("A" + (3 + i), Missing.Value); //序號(hào)列
rng1.Value2 = Convert.ToString(i+1);
Excel.Range rng2 = xsheet.get_Range("B" + (3 + i), Missing.Value); //UD分向列
rng2.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
rng2.Value2 = Convert.ToString(dataArray[i].data);
}
else if (dataArray[i].num == 1)
{
Excel.Range rng = xsheet.get_Range("C" + (3 + (i - dataArray.Count / 3)), Missing.Value); //EW分向列
rng.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
rng.Value2 = dataArray[i].data;
}
else
{
Excel.Range rng = xsheet.get_Range("D" + (3 + (i - (dataArray.Count / 3) * 2)), Missing.Value); //NS分向列
rng.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
rng.Value2 = dataArray[i].data;
}
}
xbook.SaveAs(outfile, FormatNum); //保存excel文件
軟件是在VS2010和.net framework4.0環(huán)境下進(jìn)行開發(fā),在運(yùn)行軟件前須確保安裝.net framework4.0框架,將exe可執(zhí)行文件復(fù)制到電腦上,直接雙擊運(yùn)行即可,運(yùn)行軟件時(shí)會(huì)出現(xiàn)如圖2所示的界面。
圖2 臺(tái)站勘選數(shù)據(jù)處理軟件界面Fig.2 Interface of data processing software for station selection
【選擇UD文件】:UD分向的功率譜密度測(cè)試結(jié)果詳細(xì)報(bào)告文件。
【選擇EW文件】:EW分向的功率譜密度測(cè)試結(jié)果詳細(xì)報(bào)告文件。
【選擇NS文件】:NS分向的功率譜密度測(cè)試結(jié)果詳細(xì)報(bào)告文件。
【查找內(nèi)容】:不同分向文件中不同時(shí)間內(nèi)都存在且唯一的相同內(nèi)容。
【測(cè)站名】:待處理數(shù)據(jù)所屬的臺(tái)站名。
【第?行】:待讀取數(shù)據(jù)所在行數(shù)與“查找內(nèi)容”所在行數(shù)的差值。如果待讀取數(shù)據(jù)在“查找內(nèi)容”以上則輸入負(fù)數(shù),以下則輸入正數(shù)。
【第?列】:待讀取數(shù)據(jù)所在的列數(shù)。
利用該軟件處理后生成的excel文件,格式如第47頁圖3所示。
數(shù)據(jù)處理人員利用軟件可以快速地獲取想要的數(shù)據(jù),并將結(jié)果應(yīng)用到臺(tái)站勘選報(bào)告中。該軟件的運(yùn)用,使河南省的臺(tái)站勘選報(bào)告在中國地震局規(guī)定的時(shí)間節(jié)點(diǎn)完成,并在第一批次通過項(xiàng)目專家組審核。
針對(duì)臺(tái)站勘選過程中人工處理數(shù)據(jù)繁瑣的問題,在分析文件數(shù)據(jù)規(guī)律的基礎(chǔ)上,利用C#語言設(shè)計(jì)開發(fā)一套數(shù)據(jù)處理軟件。通過與人工處理數(shù)據(jù)進(jìn)行對(duì)比,驗(yàn)證了該軟件的可靠性,且大大提高了工作效率,為今后處理類似文本數(shù)據(jù)提供新方法。
圖3 軟件處理后生成的excel文件Fig.3 Excel files generated after software processing
“臺(tái)站勘選數(shù)據(jù)處理軟件”是在具體項(xiàng)目需求下設(shè)計(jì)開發(fā)的。就處理速度而言,手動(dòng)提取數(shù)據(jù)處理完一個(gè)基準(zhǔn)站最快需要60 min,而該軟件不到1 min即可處理完畢;其次,操作簡便。只需選擇3個(gè)文件、輸入4個(gè)參數(shù)即可完成,可減少人為錯(cuò)誤,確保數(shù)據(jù)提取的準(zhǔn)確性;另外,還具有較強(qiáng)的推廣價(jià)值,雖然是在預(yù)警項(xiàng)目的需求下開發(fā),仍可嘗試應(yīng)用于類似此種操作的數(shù)據(jù)處理過程中。
參考文獻(xiàn):
[1] 邵玉平,王翠芳,宋澄.地震臺(tái)網(wǎng)勘選數(shù)據(jù)的自動(dòng)化處理[J].四川地震,2008(1):9-12.
[2] 王繼承,蔣狄微,謝智劍.基于GDAL的HDF文件格式柵格數(shù)據(jù)提取的研究[J].科協(xié)論壇,2012(8):62-63.
[3] 張林,高玉春,楊金紅,等.基于VC++平臺(tái)的相控陣天氣雷達(dá)NetCDF數(shù)據(jù)讀取與產(chǎn)品顯示[J].氣象科技,2010,38(8):230-234.
[4] 楊兆禮,萬奇林.實(shí)例分析如何用GrADS實(shí)現(xiàn)NetCDF格式轉(zhuǎn)換[J].廣東氣象,2008(10):47-49.
[5] 劉其壽,廖春奇,楊佩琴,等.測(cè)震臺(tái)址勘選數(shù)據(jù)處理輔助程序設(shè)計(jì)與應(yīng)用[J].華南地震,2010(2):107-111.
[6] 周輝,申學(xué)林,王文青,等.通用測(cè)震數(shù)據(jù)獲取軟件包的設(shè)計(jì)與實(shí)現(xiàn)[J].地震研究,2011(1):102-107.
[7] 陳帥,王鵬.基于VB6.0的水準(zhǔn)網(wǎng)數(shù)據(jù)處理程序的實(shí)現(xiàn)[J].全球定位系統(tǒng),2014(4):73-77.
[8] Hieu Vu.FROM C TO C++, C#, AND JAVA[J]. International Journal of Scientific Research and Innovative Technology, 2015(2):84-92.
[9] 張?jiān)侥?試析C#編程語言的特點(diǎn)及功能[J].軟件,2013(3):145-146.
[10] Mickey Williams.Visual C#.NET技術(shù)內(nèi)幕[M].北京:清華大學(xué)出版社,2003.