馬偉霞,王勤忠,謝恒義,潘林山,雷 閃
(1.河南省地震局,河南 鄭州 450016;2.鄭州測繪學(xué)校,河南 鄭州 450016)
地震臺站臺址勘選是地震臺網(wǎng)建設(shè)的前期工作,也是地震臺站建設(shè)過程中至關(guān)重要的基礎(chǔ)工作[1]。新建臺站在勘選階段需要對站點的噪聲數(shù)據(jù)進行處理與分析,確認(rèn)站點是否符合建臺要求。2016年2月國家地震烈度速報與預(yù)警工程項目河南分項啟動。根據(jù)規(guī)劃方案,河南省擬新建23個基準(zhǔn)站?!邦A(yù)警基準(zhǔn)站勘選技術(shù)指南”中明確要求,每個基準(zhǔn)站需要選擇至少連續(xù)48 h的記錄數(shù)據(jù)并繪制3 Hz頻點的噪聲功率譜密度值VS時間分布圖。通過現(xiàn)有軟件計算后,單個臺站會產(chǎn)生三分向(UD、EW、NS)的數(shù)據(jù)文件,單個分向文件含有至少48個時間點的數(shù)據(jù)塊,每個數(shù)據(jù)塊含有1~20 Hz頻帶共14個頻點的噪聲功率譜密度數(shù)據(jù)。如果僅依賴人工手動處理這些數(shù)據(jù),因工作量大且人員較少,很難在規(guī)定時間內(nèi)完成。針對這一問題,文章基于C#語言開發(fā)一套數(shù)據(jù)處理軟件,軟件可提高數(shù)據(jù)處理人員的工作效率,保證勘選工作按時完成。
河南省在進行預(yù)警臺站勘選時,儀器采用北京港震機電技術(shù)有限公司生產(chǎn)的FSS-3M反饋式短周期地震計和EDAS-24IP數(shù)據(jù)采集器。利用“Cal_20120525C”程序包對采集的原始數(shù)據(jù)處理后,生成UD、EW、NS三分向的功率譜密度測試結(jié)果詳細(xì)報告,對于基準(zhǔn)站,該報告里包含連續(xù)48 h的數(shù)據(jù),且每小時數(shù)據(jù)里均包含中心頻率1~20 Hz的1/3倍頻程各頻率,以及各頻率對應(yīng)的地動噪聲功率譜密度、地動噪聲RMS值,平均地動噪聲、地震臺觀測動態(tài)范圍等。
EW分向功率譜密度測試結(jié)果詳細(xì)報告(選取其中兩個時間點)的數(shù)據(jù)格式如下:
fss-3m_2016030718:
測試結(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臺(ew向)1/3倍頻程帶寬(1~20 Hz)各段地動噪聲功率譜密度(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)各段地動噪聲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)各段的平均地動噪聲RMS值為2.355 34e-007(m/s)。
平均地動噪聲(記錄p-p)為435(Counts)。
地震臺觀測動態(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:
測試結(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臺(ew向)1/3倍頻程帶寬(1~20 Hz)各段地動噪聲功率譜密度(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)各段地動噪聲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)各段的平均地動噪聲RMS值為2.598 07e-007(m/s)。
平均地動噪聲(記錄p-p)為480(Counts)。
地震臺觀測動態(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對應(yīng)的地動噪聲功率譜密度值:-122.911、-122.338、……。該研究之前,河南省地震局處理這些數(shù)據(jù)有兩種方法:一種是直接打開文件,手動挑選數(shù)據(jù);另一種是將數(shù)據(jù)拷貝到excel文件中,然后選數(shù)據(jù)。兩種方法都是靠人工手動挑選數(shù)據(jù),經(jīng)測算,手動處理一個基準(zhǔn)站至少需要1 h,不僅工作量大,且容易出現(xiàn)人為錯誤,影響結(jié)果的準(zhǔn)確性。
經(jīng)過對原始數(shù)據(jù)文件進行分析,發(fā)現(xiàn)文件中的數(shù)據(jù)有一定的規(guī)律:同一文件中不同時間的儀器型號相同、內(nèi)容格式相同;同一時間內(nèi)不同頻率與其對應(yīng)的功率譜密度的相對位置相同。因此,軟件在設(shè)計時的數(shù)據(jù)處理思路為:將三分向數(shù)據(jù)文件同時加載;然后按照相同規(guī)則依次處理每個文件,并將讀取的數(shù)據(jù)保存到臨時數(shù)組中,待三分向數(shù)據(jù)全部處理完畢;最后將臨時數(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ù)來實現(xiàn)。計算機編程語言有很多,也有很多數(shù)據(jù)處理人員利用不同的開發(fā)平臺和程序語言對數(shù)據(jù)處理方法進行研究[5-7]。經(jīng)過調(diào)研,C#程序設(shè)計語言可以輕松實現(xiàn)對文本文件的處理,以及Windows窗體和控件的創(chuàng)建[8-10]。故選擇基于VS2010開發(fā)環(huán)境,利用圖形界面較好、功能比較強大的C#來編寫實現(xiàn)?!芭_站勘選數(shù)據(jù)處理軟件”主要由文件讀取、數(shù)據(jù)保存兩部分組成。其中,文件讀取過程通過使用StreamReader類進行,讀取部分代碼如下:
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); //序號列
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)境下進行開發(fā),在運行軟件前須確保安裝.net framework4.0框架,將exe可執(zhí)行文件復(fù)制到電腦上,直接雙擊運行即可,運行軟件時會出現(xiàn)如圖2所示的界面。
圖2 臺站勘選數(shù)據(jù)處理軟件界面Fig.2 Interface of data processing software for station selection
【選擇UD文件】:UD分向的功率譜密度測試結(jié)果詳細(xì)報告文件。
【選擇EW文件】:EW分向的功率譜密度測試結(jié)果詳細(xì)報告文件。
【選擇NS文件】:NS分向的功率譜密度測試結(jié)果詳細(xì)報告文件。
【查找內(nèi)容】:不同分向文件中不同時間內(nèi)都存在且唯一的相同內(nèi)容。
【測站名】:待處理數(shù)據(jù)所屬的臺站名。
【第?行】:待讀取數(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)用到臺站勘選報告中。該軟件的運用,使河南省的臺站勘選報告在中國地震局規(guī)定的時間節(jié)點完成,并在第一批次通過項目專家組審核。
針對臺站勘選過程中人工處理數(shù)據(jù)繁瑣的問題,在分析文件數(shù)據(jù)規(guī)律的基礎(chǔ)上,利用C#語言設(shè)計開發(fā)一套數(shù)據(jù)處理軟件。通過與人工處理數(shù)據(jù)進行對比,驗證了該軟件的可靠性,且大大提高了工作效率,為今后處理類似文本數(shù)據(jù)提供新方法。
圖3 軟件處理后生成的excel文件Fig.3 Excel files generated after software processing
“臺站勘選數(shù)據(jù)處理軟件”是在具體項目需求下設(shè)計開發(fā)的。就處理速度而言,手動提取數(shù)據(jù)處理完一個基準(zhǔn)站最快需要60 min,而該軟件不到1 min即可處理完畢;其次,操作簡便。只需選擇3個文件、輸入4個參數(shù)即可完成,可減少人為錯誤,確保數(shù)據(jù)提取的準(zhǔn)確性;另外,還具有較強的推廣價值,雖然是在預(yù)警項目的需求下開發(fā),仍可嘗試應(yīng)用于類似此種操作的數(shù)據(jù)處理過程中。
參考文獻:
[1] 邵玉平,王翠芳,宋澄.地震臺網(wǎng)勘選數(shù)據(jù)的自動化處理[J].四川地震,2008(1):9-12.
[2] 王繼承,蔣狄微,謝智劍.基于GDAL的HDF文件格式柵格數(shù)據(jù)提取的研究[J].科協(xié)論壇,2012(8):62-63.
[3] 張林,高玉春,楊金紅,等.基于VC++平臺的相控陣天氣雷達NetCDF數(shù)據(jù)讀取與產(chǎn)品顯示[J].氣象科技,2010,38(8):230-234.
[4] 楊兆禮,萬奇林.實例分析如何用GrADS實現(xiàn)NetCDF格式轉(zhuǎn)換[J].廣東氣象,2008(10):47-49.
[5] 劉其壽,廖春奇,楊佩琴,等.測震臺址勘選數(shù)據(jù)處理輔助程序設(shè)計與應(yīng)用[J].華南地震,2010(2):107-111.
[6] 周輝,申學(xué)林,王文青,等.通用測震數(shù)據(jù)獲取軟件包的設(shè)計與實現(xiàn)[J].地震研究,2011(1):102-107.
[7] 陳帥,王鵬.基于VB6.0的水準(zhǔn)網(wǎng)數(shù)據(jù)處理程序的實現(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] 張越男.試析C#編程語言的特點及功能[J].軟件,2013(3):145-146.
[10] Mickey Williams.Visual C#.NET技術(shù)內(nèi)幕[M].北京:清華大學(xué)出版社,2003.