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

3691


被折叠的 条评论
为什么被折叠?



