999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Visual Basic語言在地震數據讀取與格式轉換中的應用研究

2022-03-05 06:42:22陳新黨
資源信息與工程 2022年1期
關鍵詞:標準

付 波, 陳新黨

(江西省地質調查勘查院,江西 南昌 330001)

0 引言

地震勘探作為一種地球物理方法,原始數據的重要性不言而喻。每個行業或多或少都有自己的行業標準和數據存儲標準,現在一般的地震儀器野外數據采集大多數采用的數據存儲格式為行業中的標準格式,較為通用的是野外采集原始地震數據格式為SEG委員會提出的SEG-Y和SEG-D[1-4]。而在實際生產中,部分野外采集的原始地震數據與 SEG 協會相關標準存在著偏差,和標準原始地震數據有一定的差別。對于此類數據,現有處理系統和解編專業軟件無法識別和讀取,給地震資料處理生產工作造成了極大的困難。

對于每一種地球物理方法,原始數據是至關重要的,地震勘探也不例外。對原始數據進行解編和轉儲是數據處理的前提,但是由于標準格式還沒有全面推廣,導致某些儀器所采集到的數據不是標準格式,使得解編存儲無法進行,地震資料處理工作無法進行。還有地震數據格式的行業標準大多是由國外的相關機構和行業協會提出的,國內使用的大部分地震資料處理軟件也是由國外軟件公司開發的。這種現狀導致國內自主創新的方法和技術難于在實際數據處理方面運用。因此,對于不是標準格式的數據文件的轉儲處理問題的研究很必要,本文主要研究關于非標準格式的數據文件轉為SEG委員會提取的標準格式SEGY的過程,通過Visual Basic語言來實現文件數據的讀入和寫出,在程序中加入了成圖程序,將每炮的數據成圖,用于驗證數據讀入的正確性。

1 SEGY標準格式說明

最早的SEGY數據交換格式是在1975年出版的,在2002年修訂了一些條目。現在標準的SEGY格式主要由兩部分構成,分別是文件頭和道記錄塊[1-4](圖1)。

文件頭道頭1數據1道頭2數據2……

其中,文件頭包含兩部分:前3 200個字節為ASCII 區域,包含40行原文信息,提供SEGY文件中地震數據的可讀性描述;后400個字節為二進制數區域,在二進制文件頭中的值定義為2字節或4字節,兩者是等效的整數,這些中包含了采樣間隔、道長和編碼格式的重要信息[4]。

3 217~3 218字節-采樣間隔(μs)

3 221~3 222字節-樣點數/每道(道長)

3 225~3 226字節-數據采樣格式編碼。

1=4字節IBM浮點數

2=4字節,兩互補整數

3=2字節,兩互補整數

4=4字節帶增益定點數(過時,不再使用)

5=4字節IEEE浮點數

6=現在沒有使用

7=現在沒有使用

8=1字節,兩互補整數

道記錄塊包含了道頭和數據塊,其擺列方式為一炮接著一炮,其中道頭有240個字節組成,緊接著是此道的數據,每一道都有占240個字節的道頭。其中道頭包含的值有限并用來提供可能道間變化信息和處理、道識別的基本信息,在240個字節中采樣點、采樣間隔和炮號的記錄很重要。數據塊中每個樣點值為浮點型數據,以二進制方式存儲。

9-12 原始的野外記錄號(炮號)

115-116 本道的采樣點數

117-118 本道的采樣間隔,以μs表示。

2 VB實現

2.1 格式轉換流程

在有道頭和數據的文件下,通過Visual Basic程序,選取SEGY標準數據格式文件的文件頭和標準道頭,改變其中的道頭的炮號,文件頭中采樣間隔、采樣點和采樣長度等參數;再讀取24道含有數據的文件,通過加載標準文件頭,每道數據加上道頭,這樣就成了標準的SEGY格式了。

步驟:1.打開模型數據取卷頭道頭;2.dat文件轉為sgy;3.sgy文件改變炮號[5-6]。

圖2 Visual Basic可視化界面

2.2 文件頭和道頭的提取

在Visual Basic界面運行下先輸入樣點個數,采樣間隔→再按打開模型數據取卷頭道頭。在模型數據文件目錄下就會生成卷頭文件juan和道頭文件dat。先定義一個動態字節數組變量,在提取文件頭時,就定為3 600個字節長度;在提取道頭時定為240個字節長度。改變其中的采樣間隔和道長參數,分別放在兩個文件下,為后面數據轉換做準備。程序如下:

Private Sub juandaoClick()

Dim char() As Byte ‘定義一維動態字節數組用于存儲文件頭和道頭

Dim yuan As String ‘標準的SEGY格式文件名變量

Dim fen1 As String

Dim fen2 As String

Dim a As Integer

Dim b As Integer

‘需要打開一個sgy的文件,在它的目錄下會生成卷頭文件juan和道頭文件dao,在用于轉換時,需要將兩文件放入要特定的文件下

CommonDialog1.Filter="所有文件 (*.*)|*.*|"& _

"道號數據文件(*.sgy)|*.sgy"

CommonDialog1.FilterIndex = 2

CommonDialog1.ShowOpen

yuan = CommonDialog1.FileName

On Error Resume Next

fen1 = Replace(yuan, "MdlReel", "juan")

fen2 = Replace(yuan, "MdlReel", "dao")

Open yuan For Binary As #1

Open fen1 For Binary As #2

Open fen2 For Binary As #3

a = Text2.Text

b = Text3.Text

‘從標準的SEGY文件中提取文件頭并更改其中的采樣間隔和道長

ReDimchar(3 600 -1)

For i = 0 To 3 599

Get #1, i + 1, char(i)

Next

Put #2, , char()

Put #2, 3217, b

Put #2, 3221, a

‘從標準的SEGY文件中提取道頭并更改其中的采樣間隔和道長

ReDimchar(240 -1)

Get #1, 3601, char()

Put #3, , char()

End Sub

2.3 文件頭、道頭和數據的合并與成圖

在Visual Basic運行下,輸入采樣點數,再按dat-sgy,在原數據文件下就會生成后綴為sgy的文件,同時在Visual Basic窗口下會生成地震記錄的圖形。通過一個文件對話框,打開你想轉換格式的數據(dat后綴)。原數據可能占兩個字節或者四節。再通過讀入原先有的文件頭和道頭就可以變為標準的SEGY格式了。程序如下:

Private Sub dat_Click()

Dim sh(1 To 3600) As Byte

Dim ch(1 To 240) As Byte

Dim char() As Byte

Dim dao As String

Dim zhong As String

Dim juan As String

Dim jian As String ‘作為存儲數據的文件變量

Dim chong As String ‘作為存儲道頭和數據的文件變量

CommonDialog1.Filter="所有文件(*.*)|*.*|"&_

"道號數據文件(*.dat)|*.dat"

CommonDialog1.FilterIndex = 2

CommonDialog1.ShowOpen

filena = CommonDialog1.FileName

On Error Resume Next

zhong = Replace(filena, "dat", "sgy")

Label1 = zhong

chong = "d:sychong.sgy"‘必須保證你你的卷頭道頭在d:sy的目錄之下(也可以將其改為其他路徑)

dao = "d:sydao.sgy"

jian = "d:syjian.sgy"

juan = "d:syjuan.sgy"

Open chong For Binary As #101

Open dao For Binary As #42

Open zhong For Binary As #40

Open juan For Binary As #41

Open jian For Binary As #100

Open filena For Binary As #1

Dim singl() As Single

Dim inte() As Integer ‘(當你的每個數據只占兩個字節使用)

Dim a As Single

Dim aa As Single

a = Val(Text2.Text)

ReDimsingl(1 To 24, 1 To a) As Single

ReDiminte(1 To 24, 1 To a) As Integer ‘(當你的每個數據只占兩個字節使用)

ReDimchar(1 To 24, 1 To a * 4) As Byte

Dim t As Byte

If Val(Text4.Text) <> 4 Then

‘一個數據占二個字節使用

For j = 1 To 24

Seek #1, 241 + (a * 2 + 240) * (j - 1)

For k = 1 To a

Get #1, ,inte(j, k)

singl(j, k) = inte(j, k)

Put #100, (j - 1) * a * 4 + (k - 1) * 4 + 1, singl(j, k)

For m = 1 To 4

Get #100, (j - 1) * a * 4 + (k - 1) * 4 + m, char(j, (k - 1) * 4 + m)

Next m

Next k

Next j

Else

‘一個數據占四個字節使用

For j = 1 To 24

Seek #1, 241 + (a * 4 + 240) * (j - 1)

For k = 1 To a

Get #1, ,singl(j, k)

Put #100, (j - 1) * a * 4 + (k - 1) * 4 + 1, singl(j, k)

For m = 1 To 4

Get #100, (j - 1) * a * 4 + (k - 1) * 4 + m, char(j, (k - 1) * 4 + m)

Next m

Next k

Next j

End If

Dim g(1 To 24) As Single

Dim w As Integer

Dim h As Integer

Dim aal As Integer

Dim mm As Integer

Dim delt As Integer

mm = 1 * 2 ‘在vb中圖形的放大倍數

delt = Text3.Text ‘采樣間隔

Picture1.Cls

Picture1.ScaleMode = 1

Picture1.ScaleLeft = 0

Picture1.ScaleTop = 0

Picture1.ScaleWidth = Picture1.Width

Picture1.ScaleHeight = Picture1.Height

‘ (數據均衡

For il = 1 To 24

aa1 = 1

For ill = 1 To a

If (Abs(singl(il, ill)) > aa1) Then

aa1 = Abs(singl(il, ill))

End If

Next ill

g(il) = ((Picture1.ScaleHeight - 10) / 24) / aa1

Next il

‘數據均衡)

h = (Picture1.ScaleWidth - 10) / 25

w = (Picture1.ScaleHeight - 10) / a

For ii = 1 To 24

For ii1 = 1 To a

If ((singl(ii, ii1)) > 0) Then

Picture1.Line (10+ii*h,10+ii1*w)-(10+ii*h+singl(ii, ii1)*g(ii)*mm, 10+(ii1+1)*w),,BF

Else

Picture1.Line (10 + ii * h + singl(ii, ii1) * g(ii) * mm, 10 + ii1 * w)-(10 + ii * h + singl(ii, ii1 + 1) * g(ii) * mm, 10 + (ii1 + 1) * w), vbBlack

End If

Next ii1

Next ii

For j1 = 1 To 24

Picture1.CurrentX = 5 + j1 * h

Picture1.CurrentY = 5

Picture1.Print j1

Picture1.Line (10 + j1 * h, 10)-(10 + j1 * h, Picture1.ScaleHeight)

Next j1

For i = 1 To 11

Picture1.Line (10, 10 + (i - 1) * w * 50)-(Picture1.ScaleWidth, 10 + (i - 1) * w * 50), vbGreen

Picture1.CurrentX = 0

Picture1.CurrentY = 10 + (i - 1) * w * 50

Picture1.Print (i - 1) * delt * 50

Next i

‘讀入道頭,循環分別放在101編號代表的文件中的特定位置并將以上的二維字節數組數據放入其特定位置,使之按道頭→第一道數據→道頭→第二道數據…順序存儲

Get #42, ,ch()

For ii = 1 To 24

Seek #101, (4 * a + 240) * (ii - 1) + 1

Put #101, ,ch()

Next ii

For m = 1 To 24

For n = 1 To 4 * a

Put #101, (4 * a + 240) * (m - 1) + n + 240, char(m, n)

Next n

Next m

‘讀入文件頭并將其放入zhong變量代表的文件中

For m = 1 To 3600

Get #41, m, sh(m)

Next m

Put #40, 1, sh()

aa = 24 * (a * 4 + 240)

ReDimchar(1 To aa)

For i = 1 Toaa

Get #101, i, char(i)

Next i

‘將一維字節數組中的字節放入zhong變量代表的文件中

Seek #40, 3601

Put #40, , char()

Close

End Sub

2.4 SGY改變炮號

按要求輸入野外炮號標記,在按sgy改變炮號。由于合并的sgy文件炮號沒有按實際給出,使得在后續處理時存在困難,所以通過改變sgy文件中特定字節代表炮號的值來達到目的。

3 成果驗證

使用某地區的地震數據,其源格式中樣點值占兩個字節,文件結構為以上程序所需的源格式。主要用于反射波地震勘探,圖3(a)是第一炮在vista軟件中所成的圖形,圖3(b)是使用Visual Basic界面識別讀取的數據,可以看出vista和Visual Basic界面所成的圖形一樣,驗證了程序轉換的正確性。

4 結論

通過對比某地區的某炮原始數據Visual Basic界面讀取成圖與vista軟件中所成的圖形,表明可以使用Visual Basic的可視化界面實現文件數據的讀入和寫出,并在程序中加入了成圖程序,將每炮的數據成圖,用于驗證數據讀入的正確性,對于地震數據格式不匹配而需要轉換具有一定的參考意義。

猜你喜歡
標準
2022 年3 月實施的工程建設標準
忠誠的標準
當代陜西(2019年8期)2019-05-09 02:22:48
標準匯編
上海建材(2019年1期)2019-04-25 06:30:48
美還是丑?
你可能還在被不靠譜的對比度標準忽悠
一家之言:新標準將解決快遞業“成長中的煩惱”
專用汽車(2016年4期)2016-03-01 04:13:43
2015年9月新到標準清單
標準觀察
標準觀察
標準觀察
主站蜘蛛池模板: 日韩欧美中文| 无码区日韩专区免费系列| 精品无码一区二区三区在线视频| 亚洲二三区| 精品第一国产综合精品Aⅴ| 青青草原国产| 国产精品夜夜嗨视频免费视频| jizz在线观看| 国产电话自拍伊人| A级全黄试看30分钟小视频| 午夜视频www| 日韩欧美91| 国产成人a在线观看视频| 免费国产不卡午夜福在线观看| 丝袜美女被出水视频一区| 色综合天天综合中文网| 亚洲精品你懂的| 97综合久久| 少妇人妻无码首页| 日韩精品欧美国产在线| 国产十八禁在线观看免费| 国产精品第三页在线看| 国产性爱网站| 亚洲AV成人一区国产精品| 国产精品毛片一区视频播| 国产微拍一区二区三区四区| 亚洲一级毛片在线观播放| 亚洲无码久久久久| 日韩在线网址| 国产粉嫩粉嫩的18在线播放91| 视频一区亚洲| 性网站在线观看| 亚洲中文字幕日产无码2021| 精品伊人久久久久7777人| 亚洲第一成年人网站| 精品视频一区二区观看| 亚洲国产综合自在线另类| 国产在线视频欧美亚综合| 国产自在线拍| 国产主播在线一区| 亚洲综合亚洲国产尤物| 欧美在线中文字幕| 在线观看的黄网| 亚洲一区二区三区香蕉| 亚洲人成网站日本片| 久久久久国产精品熟女影院| 久久 午夜福利 张柏芝| 国产国产人成免费视频77777| 欧美va亚洲va香蕉在线| 99久久精品国产自免费| 欧美性猛交xxxx乱大交极品| 日韩区欧美国产区在线观看| 亚洲国产成熟视频在线多多| 欧美一区二区三区国产精品| 特级aaaaaaaaa毛片免费视频| 欧日韩在线不卡视频| 999国产精品| 国产精品不卡永久免费| 狠狠色丁香婷婷| 中国一级特黄视频| 亚洲国产精品国自产拍A| 蜜桃视频一区| 在线无码av一区二区三区| 成人国产精品一级毛片天堂| 免费一级毛片在线播放傲雪网| 精品国产aⅴ一区二区三区| 国产精品永久不卡免费视频| 久久99精品久久久久久不卡| 久草美女视频| 黄色a一级视频| 日本a∨在线观看| 亚洲日韩高清在线亚洲专区| 国产在线一区二区视频| 国内精品91| 国产一区二区三区在线观看视频| 97精品国产高清久久久久蜜芽| 人妻精品全国免费视频| 国产成人一区在线播放| 色噜噜久久| 免费一级α片在线观看| 四虎AV麻豆| 国产屁屁影院|