SEGY课程设计
- 格式:doc
- 大小:5.06 MB
- 文档页数:23
成都理工大学工程技术学院地震资料分析课程设计
结业报告
班级:2012级勘查技术与工程2班
姓名:李南吉
学号:201220911222
提交日期:2015年5月11日
JOB 1 SEGY格式文件读写1
一、实验内容
1.了解常见的磁带记录格式
2.编程实现SEG-Y格式读写,并提取inline为(110+学号)的横剖面和
cross-line(400-学号)的纵剖面。
二、实验相关软件和数据说明
1.Segy文件分析工具
2.Fimage地震资料显示程序
3.stack.sgy 三维地震资料
(in-line范围105-164,cross-line范围:251-450,time范围500-1500ms)
三、实验内容和步骤
1.SEGY格式地震数据读写
地震勘探主要包括三个阶段,分别为野外地震数据采集、室内地震资料处理和地震资料解释。且现代资料处理和解释都是在计算机上进行的,因此数据必须通过相应的介质交换和存储,常见的存储介质包括磁带和盘类(硬盘、光盘、U 盘等)。由于野外工作环境和早期的工艺限制,地震队野外施工采集到的数据都是存储在磁带上的,近些年由于工艺进步,室内处理解释中数据存储和交换介质基本都是通过硬盘。
不管是磁带介质还是盘类介质,其数据都是以一定的二进制格式存储的。所谓格式,指的是地震数据以及各种信息在文件内部的存放方式及顺序。常见的数据格式有SEGY、SEGD、SEG2等,这些格式都是由勘探地球物理学家协会(Society of Exploration Geophysicists,SEG)制定的(全世界统一的地震数据格式)。SEGD和EEG2是野外(时序)记录格式,其中SEGD格式是野外使用最多的格式,SEG2格式仅适用于PC工作环境,目前只有工程地震勘探中在使用。SEGY是室内(道序)记录格式(解编后的炮集记录,CMP道集,叠加和偏移剖面均为此格式),也是室内处理解释作业最为常用的标准格式,目前各种商业处理软件都提供SEGY格式数据加载功能,本讲义也是也是以SEGY格式为标准进行讲解的。
图1 SEGY文件格式
1)SEGY数据格式
SEGY数据格式由三部分组成(如图1所示)。第一部分是3200字节的EBCDIC 卡片头(编码方式不同于ASCII)(图2),称其为说明信息(text header),包括40个对磁带进行描述的文本数据(例如,每行包括08个字符的40行文本)。这部分一般包括工区信息、数据采集者、处理者和解释者等信息。第二部分是400字节的二进制卷头(Reel Header 或binary header)(表1),描述了该磁带卷上内容的有关信息。SEGY格式的第三部分是实际地震道数据。每道含有240字节的道头(Trace Header)(表2),数据记录在道头后面,可能使用4种32位IBM 浮点型格式中的一种。(注意,IBM格式与现代普通IBM PC机上所通用的IEEE 格式不同,在PC机进行数据处理前需要先进行数据转换)。
2)SEGY格式编程思路
3200字节说明部分,主要记录采集处理信息,一般处理地震数据不用处理这部分的内容。这部分内容只需要读出来再写入新的文件中去即可,编程时我们只需要定义一个长度为3200的char类型数组即可。
卷头中包含了采样间隔和采样点数的重要信息,编程时定义为short int类型数组,就可以得到这些参数了。
数据总道数判断,用fseek函数分别指向文件起始和末尾,偏移量就为文件大小(字节)LEN,通过如下公式可以求出总道数
总道数=(LEN-3200-400)/(每道采样点数*4+240)三维数据体比二维数据体多了一维,多的这一维代表线号,和二维数据体相比较,如果二维数据体代表的是一条线的数据,那三维数据体就是代表一个工作面的数据。由此我们也知道通常情况下,三维数据体的数据通常情况下会比二维数据体大很多。三维数据体里面的数据格式如下(1)卷头部分,3200字节+400字节
(2)第一线(inline 1)数据:
第一道(cross-line 1)道头部分,第一道数据部分
第二道(cross-line 2)道头部分,第二道数据部分
……,……
(3)第二线(inline 2)数据:
第一道道头部分,第一道数据部分
第二道道头部分,第二道数据部分
……,……
(4)……:……,……
(5)最后一线数据:第一道道头部分,第一道数据部分
第二道道头部分,第二道数据部分
……,……
四、程序实现
#include
void main()
{
char SM[3200]; //定义说明short int reelheader[200]; //定义卷头
float traceheader[60]; //定义道头
int i,LEN,N,n; // N为总道数LEN为文件大小(字节)FILE *fp,*fp1,*fp2;
fp=fopen("112","rb"); //打开原文件后转换成pc格式
fp1=fopen("横剖面","wb"); //横剖面
fp2=fopen("纵剖面","wb"); //纵剖面
for(i=0;i<3200;i++)
{
fscanf(fp,"%c",&SM[i]);
} //输入说明fread(reelheader,400,1,fp); //输入卷头
for(i=0;i<200;i++)
n=reelheader[10];
fseek(fp,0L,2);
LEN=ftell(fp);
N=(LEN-3200-400)/(n*4+240);
printf("%d\n",N); //总道数
fseek(fp,16609200L,0);
for(i=0;i<200;i++)
{
fread(traceheader,240,1,fp);
fwrite(traceheader,240,1,fp1);
fread(traceheader,2004,1,fp);
fwrite(traceheader,2004,1,fp1); //横剖面
}
fseek(fp,387324L,0);
for(i=0;i<60;i++)
{ fread(traceheader,240,1,fp);
fwrite(traceheader,240,1,fp2);
fread(traceheader,2004,1,fp);
fwrite(traceheader,2004,1,fp2);
fseek(fp,446556L,1);} //纵剖面
}