segy地震数据的读取python_SEGY地震数据格式分析与读写

本文详细介绍了SEGY地震数据格式,包括文件头的3200字节EBCDIC字符集和400字节二进制头,以及数据体的道头和采样数据。讲解了数据道的结构,数据类型以及工作站SEGY数据的IEEE和IBM存储格式。此外,还讨论了数据在不同格式间转换的方法,如整型和浮点型的高低位交换,并提供了IBM格式32位浮点型数值转换的代码示例。已经实现了读取SEGY数据,包括IBM 32bit浮点型和固定点数据,但IBM格式的写入仍存在遗留问题。
Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

1 SEGY数据由文件头和数据体组成 1.1

文件头总长度为3600字节,分两部分。

1.1.1 文件头第一部分 长度: 3200bytes;组成:

80bytes*40;特性:EBCDIC字符集,参数卡,需要转换为ASCII码后才能显示。

1.1.2 文件头第二部分

长度:400bytes;数据类型:32位、16位的整型;特性:二进制头,记录数据体信息。

1.2

数据体由多个数据道组成。每道数据分两部分:道头、采样数据。

1.2.1 数据道道头 长度:240

bytes;数据类型:32位、16位的整型;特性:记录采样点数、采样间隔、CDP号、XLine号、Line号以及坐标信息等。

1.2.2 采样数据

长度:采样数*采样点字节数;数据类型:32位的浮点型。

2

工作站SEGY数据存储格式有两种:IEEE和IBM

3 IEEE和IBM格式与微机格式互转

3.1 32位、16位的整型格式数据

3.1.1 IEEE和IBM的整型存储与微机格式的存储不同之处

IEEE和IBM的高字节在前、低字节在后,即BigEndian,微机则是低字节在前、高字节在后,即LittleEndian

3.1.2 IEEE和IBM的32位、16位的整型转换成微机格式:只需交换高、低位即可。

以BIGENDIAN位码方式从文件的数据流DATASTREAM读取到Q_INT32、Q_INT16类型的变量中,可实现在微机上读取SEGY数据体中的整型值。

以BIGENDIAN位码方式将Q_INT32、Q_INT16类型的变量值写入文件的数据流DATASTREAM,可实现在微机上向SEGY数据体中写入整型值。

3.2 32位浮点型格式数据

3.2.1

IEEE格式32位浮点型与微机格式的32位浮点型相比:只要进行高、低位交换即可。

BIGENDIAN位码方式,Q_UINT32类型变量,可实现微机上读写SEGY IEEE格式的32位浮点型值。

3.2.2

IBM格式32位浮点型要转换位微机格式:需要分拆字位,重新进行数值计算才能得到正确的微机数值。

BIGENDIAN位码方式、Q_UINT32类型变量,读后计算浮点数值,写之前先转换数值。

3.2.2.1 读出SEGY

IBM格式的32位浮点型数,按如下方式可计算出浮点数的值: float

FormSegyDataAna::ibm2num(Q_UINT32 DataUint32) { float result ; //

gain sign from first bit double sign = (double)( DataUint32

>>31) ; // gain exponent from first

byte, last 7 bits double exp =(double )( (DataUint32

&0x7f000000)>>24) ;

// remove bias from exponent exp = exp - 64 ; // gain mantissa from

last 3 bytes double frac = (double )(DataUint32

&0x00ffffff) ; frac = frac/ (pow(2,24) ); result =

( 1-2*sign)*( pow( 16 ,exp) ) *frac; return result; }

3.2.2.2 32位浮点型数值要先转换再写入SEGY

IBM格式数据体中。 ……该转换方法尚不清楚!

4 已经完成的工作

4.1 读取SEGY数据

4.1.1IBM 32bit floating point

:BigEndian, Q_INT32 -> int ,Q_INT16

-> short ,Q_UINT32转换ibm2num(Q_UINT32)

-> float 。

4.1.2 32bit fixed point :

BigEndian,Q_INT32 -> int ,Q_INT16 ->

short 。

4.1.3 16bit fixed point :

BigEndian,Q_INT32 -> int ,Q_INT16 ->

short 。

4.1.4 IEEE 32bit floating point :

BigEndian,Q_INT32 -> int ,Q_INT16 ->

short ,Q_UINT32 -> float

。(目前,用的是自己所写的IEEE数据体,有待进一步验证)

4.2 写SEGY

4.2.1 32bit fixed point :

BigEndian,int -> Q_INT32 , short ->

Q_INT16

4.2.2 16bit fixed point :

BigEndian,int -> Q_INT32 , short ->

Q_INT16 。

4.2.3 IEEE 32bit floating point :

BigEndian,int -> Q_INT32 , short ->

Q_INT16 ,float -> Q_UINT32。(有待比较)

5 遗留问题 以IBM 32bit floating

point格式写SEGY数据。解决思路:可分析SU软件中segywrite相关代码。

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值