一種適于任何seg-y地震數據的i/o方法
【技術領域】
[0001] 本發明屬于地震勘探方法技術領域,具體涉及一種適于任何SEG-Y地震數據的1/ 〇方法,不僅可以供科研生產者學習使用,也可以運用于處理、解釋軟件系統中,甚至也可以 適于煤田、固體礦產等工程地質勘探領域軟件中。
【背景技術】
[0002] SEG-Y地震數據的I/O方法是一種業已成熟的技術。當格式不同的地震數據I/O 時,一般會運用解析和轉換方法。但是在應用中它通常只是兩種類型之間的數據格式進行 轉換。然而目前處理、解釋商業軟件都有自己內部的地震數據格式,如:PARADIGM、OMEGA等 處理軟件都有各自內部使用的數據格式。國內大部分自主軟件也都有內部使用的地震數據 格式。這些軟件都是通過輸入程序先把外界的SEG-Y數據轉換成內部格式數據之后再做其 它工作,處理完后,再通過輸出程序把內部格式數據輸出成SEG-Y數據,以便日后使用。這 樣在科研生產過程中,就經常面臨地震數據格式之間的轉換。當數據量比較大的時候,尤其 是海量數據,轉換起來非常耗時,浪費了大量的人力物力,降低了工作效率。
【發明內容】
[0003] 本發明的目的在于解決上述現有技術中存在的難題,提供一種適于任何SEG-Y地 震數據的I/O方法,提高系統數據管理方面的效率,特別是對海量數據的處理,避免多次 進行數據格式轉換。地震數據轉換后,采用動態存儲數據的方法,減少存儲空間的占用,在 轉換過程中,運用多種優化的程序編寫算法,提高數據計算轉換效率。
[0004] 本發明是通過以下技術方案實現的:
[0005] -種適于任何SEG-Y地震數據的I/O方法,包括:
[0006] 第一步,讀取地震數據二進制文件頭和道頭信息獲得關鍵信息;
[0007] 第二步,建立新文件,然后將第一步中讀取到的關鍵信息以及原始SEG-Y文件存 儲的路徑寫到新文件的數據結構體中,結構體內容根據實際情況選擇,主要包括原始地震 數據類型和地震數據的關鍵信息等字段;如果以后用到地震數據的關鍵信息,直接讀取新 文件即可;
[0008] 第三步,讀取地震道數據,得到格式轉換后的數據;
[0009] 第四步,輸出地震數據。
[0010] 所述第一步中的關鍵信息包括:
[0011] 從地震數據二進制文件頭讀取到的SEG-Y文件的數據格式、采樣點數、采樣間隔, 測量單位,以及從地震數據道頭信息讀取到的記錄號,cdp號,線號,偏移距,炮點坐標,檢波 點坐標,檢波點高程,炮點高程;
[0012] 所述第三步包括:
[0013] 判斷運行程序的機器字節序:若是大端法,則其低地址端存放的是0x12,若是小 端法,則其低地址端存放的是0x34 ;
[0014] 其次是樣點數據值格式轉換:將新文件中記錄的原始地震數據格式轉換成機器數 據格式;
[0015] 定義全局動態數組,然后把格式轉換后的每一道地震數據讀出,并將所有地震數 據保存在全局動態數組中,完成整個地震數據讀取。
[0016] 所述樣點數據值格式轉換包括以下五種:
[0017] 第一種UNIX的IEEE格式轉換:原始數據是4個字節,小端法字節序,進行高低字 節逐一交換;
[0018] 第二種是UNIX的IBM格式轉換:分為兩步,首先進行高低字節交換,然后把IBM格 式轉換為IEEE格式;
[0019] 第三種是PC機的IBM格式轉換:把IBM格式轉化為IEEE格式;
[0020] 第四種是長整型格式轉化:字節高低調序;
[0021] 第五種是整型轉換:字節高低調序。
[0022] 所述第四步是這樣實現的:
[0023] 如果在全局動態數組生命周期內,則直接輸出數據,如果不在全局動態數組生命 周期內,則輸出獨立的模塊(獨立的模塊是指直接把原始地震數據輸出,不存儲在動態數 組中);
[0024] 若輸出是獨立的模塊,則根據新文件中保存的地震數據格式,循環讀取每一道地 震數據,直接轉換成原始地震數據格式,輸出地震數據。
[0025] 與現有技術相比,本發明的有益效果是:采取綜合各種地震數據格式轉化方法的 優點,并且創造性的把原始地震數據格式保存在新文件中,在地震數據I/O中,不需多次進 行數據轉換。并且靈活運用c語言編程技巧,提高程序運行效率。把該方法集成在自主軟 件中,結果表明,地震數據I/O正確。
【附圖說明】
[0026] 圖1本方法的步驟框圖
[0027] 圖2實施例中的地震道數據圖。
【具體實施方式】
[0028] 下面結合附圖對本發明作進一步詳細描述:
[0029] SEG-Y文件一般包括三部分,第一部分是3200字節的EB⑶IC文件頭,第二部分是 400字節的二進制文件頭,用來存儲SEG-Y文件的一些關鍵信息。第三部分是實際的地震 道,每條地震道包含240字節的道頭信息和地震道數據。道頭信息中一般保存該地震道對 應的線號、道號、采樣點數、大地坐標等信息。地震數據格式共有6種類型。分別是pc機的 IEEE浮點型、Unix的IEEE浮點型、Unix的IBM浮點型、PC機的IBM浮點型,整型和長整型。
[0030] 如圖1所示,針對C語言編程,I/O方法步驟如下:
[0031 ] 1)、跳過地震數據EB⑶IC文件頭,讀取地震數據二進制文件頭,得到SEG-Y文件的 數據格式、采樣點數、采樣間隔,測量單位,然后讀取地震數據道頭信息。得到對應地震道常 用的屬性值。它包括記錄號,cdp號,線號,偏移距,炮點坐標,檢波點坐標,檢波點高程,炮 點高程。把從地震數據二進制文件頭和道頭讀到的信息,作為常用的關鍵信息。
[0032] 2)、建立一個新文件。用struct語句定義新文件結構體。把第一步中原始SEG-Y 文件的關鍵信息讀取出來,包括原始SEG-Y文件存儲的路徑和地震數據格式,這些信息用 fwrite函數寫到新文件數據結構體中。如果以后用到地震數據的關鍵信息,直接讀取新文 件,不用讀原始地震數據。
[0033] 3)、讀取地震道數據。
[0034] 首先判斷運行程序的機器字節序。有兩種:大端法和小端法。一般機器字節序都 是采用大端法。算法!Unsigned short數據,占2個字節,給它賦值0x1234,若是大端法, 則其低地址端應該放的是0x12,若采用小端法,則其低地址端存放的是0x34。
[0035] 其次是樣點數據值格式轉換。由于地震數據格式共有6種類型,一般機器格式是 PC機IEEE格式。根據新文件記錄的原始地震數據格式轉換成機器數據格式。程序中用 switch語句分成5種情況。
[0036] 第一種UNIX的IEEE格式轉化。這種原始數據是4個字節,小端法字節序。要進 行高低字節逐一交換。舊有的編程方法是采用c語言移位符進行運算。現在利用IAR編譯 器。在程序中引用頭