SEGY数据结构

SEGY数据结构由文件头和数据体组成。

文件头

总长度为3600字节,分两部分

  • 文件头第一部分长度3200bytes(80bytes*40),EBCDIC字符集,需要转换为ASCII码后才能显示;
  • 文件头第二部分长度400bytes,数据类型为32位、16位的整型,二进制,记录数据体信息,如每道的采样点数、采样率、数据格式等等。

数据体

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

  • 道头是二进制数据,长度240bytes,数据类型:32位、16位的整型,记录采样点数、采样间隔、CDP号、XLine号、Line号以及坐标信息等。
  • 道数据数据类型常见的分为: IBM浮点型、IEEE浮点型、16位整型、32位整型。
注:对于SEGY数据来说,卷头的第3225~3226用数字说明了每道数据的格式,1—表示IBM浮点型、2—表示32位整型、3—表示16位整型、5—表示IEEE浮点型、8—表示1位整型,其中石油勘探常用IBM32

字节序问题

SEGY地震数据分为工作站版和微机版两种,两者SEGY数据结构一样,但是数据的存储格式不同。工作站的segy一般都是big endian的,而微机格式通常是little endian的。

  • 比如二进制数码100,对于big endian 是 $4=1*2^2+0*2^1+0$ ,而对于little endia是 $1=1*2^0+0*2^1+0*2^2$

一般在windows下面fortran编译的时候默认是little endian,可以改成big endian的。而C恰恰相反,matlab是基于c的,和c一样。

IBM与IEEE的float32bit数据结构

IBM32和IEEE是计算机中浮点型数据以二进制形式存储时的两种方式,当然IEEE是目前使用最多的一种存储方式,以C或者C#为代表。 大体来说floating_point存储结构分为:

符号位、指数位、尾数位

floating数据结构

IEEE

IEEE是多数微机常用的float存储格式

IBM32

$$Value=(-1)^S*16^{Exp-64}*Fraction$$

64是指数的基底

11000010  11010101  11100000  00000000
符号位的值是1表示该数为负数,指数位的值为:C=64+2=66,指数位的值减去64才是真正的指数值,尾数位的值为Q=2-1+2-2+2-4+2-6+2-8+2-9+2-10+2-11。
该数据的值为:S= -16C-64×Q=-213.875