河南省航空物探遙感中心 師天祺
在地震勘探行業中,地震數據的讀取與顯示是地震處理與解釋的關鍵一環,隨著淺層地震勘探、工程地震勘探的興起,基于Linux的地震處理、解釋系統已經無法適應快速發展的局面。本文詳細介紹了SEGY數據格式,并重點分析了SEGY數據的難點,借助Python實現了地震數據的可視化,滿足了施工現場快速實現地震數據的處理與成像的要求,對現場工作有一定指導意義。
地震數據的讀取與顯示是地震處理與解釋的關鍵一環,可視化技術利用計算機技術,將數據進行處理,轉為顯示在屏幕上,通過交互處理挖掘數據之間的規律[1]。可視化技術以被運用到多個領域,特別是在找煤、找油、找氣、找斷層上取得了重要的意義[2]。但是國內外上通常使用Linux主機作為地震數據的處理、解釋的載體,笨重的設備、高昂的生產成本無法適應如今工程物探領域短平快的發展要求。為適應快速發展的工程物探技術,本文借助Python語言內置函數庫及Matplotlib繪圖庫,在詳細的分析SEGY格式數據基礎上,實現地震數據的讀取以及波形的顯示,為野外工作起到了指導作用。
SEGY是以地震道為單位進行存儲,是由SEG協會提出的標準磁帶數據格式之一,它是石油勘探行業地震數據的最為普遍的格式之一。標準SEGY數據文件件一般包括三個部分,格式如下:
(1)EBCDIC文件頭。由40個卡組成,長度為3200個字節,用來儲存對地震數據進行描述的信息,通常需要先轉換ASCII碼才能進行顯示。(2)二進制文件頭。長度為400個字節,采用大字節序儲存,通常使用32位、16位整型,共包含有32項信息,用來儲存描述SEGY數據的關鍵參數,包括數據格式、采樣點數、采樣間隔、采樣編碼等,正確的讀取文件頭信息將直接影響后續地震道數據的讀取。(3)地震道數據。地震道數據由兩部分組成,每條地震道數據包含240字節的道頭信息和地震數據。道頭信息一般保存該道對應的線號、道號、采樣點數、坐標等信息。地震數據通常是以IBM浮點形式進行保存的。
Python是一種完全面向對象的語言,其優雅的可讀性、可擴展性、快速的開發模式及豐富的第三方庫,Python越來越受到開發者的喜愛。本文為快速實現SEGY數據的可視化,縮短開發周期,采用Python作為程序開發語言,僅使用Python內置庫及Matplotlib繪圖庫實現了SEGY數據的讀取與顯示,同時Python其優秀的第三方庫,尤其是地震方向的第三方庫,也為未來程序的開發提供了一些優秀的思路和擴展。程序完整流程如圖1所示。

圖1 程序流程圖Fig.1 Program flow chart
想要清晰的顯示SEGY數據,除需要理解SEGY數據結構外,還需要解決字節序、IBM浮點讀取等一系列問題[3-5]。
(1)字節序。大字節序和小字節序是數據儲存規則,小字節序是高位數據儲存在內存高位地址,低位數據儲存在低位地址,大字節序是高位數據儲存在低位地址,低位數據儲存在高位地址。字節序示意圖如圖2所示。
SEGY數據使用大字節序進行編碼,這是因為處理器的結構不同造成的,如IBM機、Unix工作站等通常使用大字節序格式,個人電腦通常使用小字節序編碼。在實際讀取數據過程中如果忽略字節序問題,那么讀取的數據可能截然相反。例如采樣點數在大字節序為2500,在小字節序則讀取為0,所以在讀取字節時,應首先將字節序調整至正確編碼才按字節依次讀取。
(2)IBM浮點。SEGY數據通常使用IBM浮點,偶爾會使用32位IEEE浮點或一些非常用數據格式進行記錄。地震數據通過何種格式進行記錄,是由卷頭中3225-3226字節儲存的信息決定的。通過讀取這兩個字節的內容,可以判斷數據的儲存格式,從而確定每道地震記錄數據所占的字節空間長度,即數據長度=數據類型(字節數)×采樣點數[10]Python默認使用IEEE浮點,兩種數據結構存在較大的差異,會對地震數據讀取與顯示造成影響。為實現IBM浮點的讀取,需要首先了解IBM與IEEE浮點的區別[6]。
IBM和IEEE浮點數的結構如下:S代表符號、E代表指數部分、F代表位數部分。
浮點數表示如下:

注:32位IEEE浮點數:A=2,B=127,C=1;32位IBM浮點數:A=2,B=64,C=1。
IBM和IEEE浮點的區別在于位數的有效范圍,IEEE浮點尾數最小值是1/(2^23),而IBM浮點尾數最小是為1/16,而不是1/(2^24)。
(3)地震數據繪制。地震原始數據范圍較大且雜亂無章,直接使用原始數據成圖未必能做出想要的樣子。為了使原始數據經過一系列變換轉為圖形圖像,使信息更容易理解,需要對原始數據進行一定程度的處理[7-10]。本文使用生產的單炮數據(500道接收,1ms采樣間隔,采樣時間為2.5s)作為示例,本文對數據進行歸一化處理,使數據范圍在(-1,1)之間并設置道間隔為1,保證了道與道之間波形不會發生相交的情況,如圖3所示顯示了不歸一化和歸一化數據的成像差異并與使用Seisee軟件的成像效果進行對比。示例單炮圖像橫軸為道序列號,道與道之間間距為設置為1,縱軸為雙程時,繪制單炮數據。

圖3 成像效果圖Fig.3 Imaging rendering
由圖3可明顯看出,由于未對原始數據進行歸一化處理,地震數值隨著雙程時的增大而迅速減少,由于數據差值過大,波形明顯振動主要集中在前0.2s內,后面由于數值相對較小,波形基本屬于平直狀態。由于橫軸設置的道間距過小,振幅數值遠超道間距,成像整體擠在了一起,雖能見波形振動,但以無法分辨為哪一道數據,更無法分辨單炮質量的好壞,可見未對原始數據進行歸一化處理難以滿足成像要求。經過歸一化處理的單炮數據整體圖像效果較好,炮點位置清晰可見,初至波可明顯分辨,初至波之下可見明顯層狀反射波有效信息,顯示效果較好。使用歸一化的數據未造成因為距離震源較近,接收能量較大造成的對遠處地震波成像影響的效果,與使用Seisee軟件的成像效果類似。由于Seisee使用了AGC增益,效果要好于開發的成像程序,但初步做到的Windows平臺下的SEGY數據成像,并且為以后工程地震勘探的定制開發打下了基礎。
隨著個人計算機存儲技術和計算能力的提升,使用Windows系統進行地震資料處理與解釋已經成為行業趨勢,尤其是使用個人電腦在施工環境進行野外施工監控、野外數據處理以及工程地震勘探環境需要快速對數據處理及成像。在Windows環境下,本文在充分掌握SEGY數據的基礎上,嘗試使用Python腳本編寫了程序,正確解析了SEGY數據結構,初步完成了成像系統的設計,并應用在實際生產環境中。雖然在成像效果上與主流成像軟件還有一定的差距,但是打下了堅實的基礎,下一步建議在濾波、AGC上進行研究,增加多種成像模式如灰度、變密度等可視化技術,使之達到主流成像軟件的效果。