石油软件概论实验报告.docx

上传人:b****6 文档编号:8822237 上传时间:2023-02-01 格式:DOCX 页数:30 大小:1.03MB
下载 相关 举报
石油软件概论实验报告.docx_第1页
第1页 / 共30页
石油软件概论实验报告.docx_第2页
第2页 / 共30页
石油软件概论实验报告.docx_第3页
第3页 / 共30页
石油软件概论实验报告.docx_第4页
第4页 / 共30页
石油软件概论实验报告.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

石油软件概论实验报告.docx

《石油软件概论实验报告.docx》由会员分享,可在线阅读,更多相关《石油软件概论实验报告.docx(30页珍藏版)》请在冰豆网上搜索。

石油软件概论实验报告.docx

石油软件概论实验报告

 

本科生实验报告

实验课程石油地球物理软件技术概论

学院名称地球物理学院

专业名称勘查技术与工程(石油物探)

学生姓名

学生学号

指导教师赵宪生

实验地点地球物理学院5417

实验成绩

 

二〇一五年4月-二〇一五年5月

 

目录

摘要1

第一章seg-y数据滤波2

1.1方法2

1.2源程序2

1.3结果分析8

1.3.1滤波因子8

1.3.2原始数据及结果显示与分析9

第二章自动统计剩余时差校正13

2.1方法13

2.2源程序14

2.3结果分析19

第三章交互集成软件21

3.1方法21

3.2源程序21

3.3结果显示22

参考文献23

心得及评语24

资料处理软件与交互软件设计

摘要

地震勘探采集的数据需要经过一定的处理,才能被解释使用,地震勘探采集数据多为seg_y格式,石油勘探采集处理越来越依赖于计算机技术的发展,使用计算机技术实现地球物理处理软件设计、交互软件设计和图形软件设计及可视化和集成化基本技术。

本实验报告中,主要针对seg_y格式数据进行滤波处理,比较带通滤波和低通滤波的结果差异;对给定信号进行剩余时差校正,并写出相应的C语言源程序;并在MFC框架程序下,设计出相应的交互集成软件。

关键字:

seg_y,带通滤波,低通滤波,剩余时差校正,交互集成软件

 

第一章seg-y数据滤波

1.1方法

分析已知seg-y数据格式的程序,补充该程序中计算滤波因子的子函数段,选择参数对数据文件366.sgy完成滤波处理,以及对某一道数据做谱分析,比较低通滤波和带通滤波及参数对结果的影响。

用Fimage.exe程序显示原数据和滤波处理数据,比较分析结果。

1.2源程序

#include

#include

#include

#include

#defineLEN3200

#defineNQ230000

#definePI3.1415926

//==========低通滤波因子=========//

floatfilter1(floath[],intn)

{

inti;

floatfc;

doublet,dt=0.002;

printf("输入fc:

\n");

scanf("%f",&fc);

for(i=1;i<=n/2;i++)

{

t=i*dt;

h[i]=sin(2*PI*fc*t)/(PI*t);

h[i+n/2]=h[i];

}

h[25]=2*fc;

for(i=1;i<=n/2;i++)

{

h[n/2-i]=h[n/2+i];

}

}

//============带通滤波因子=========//

floatfilter2(floath[],intn)

{

inti;

floatf1,f2,df,f0;

doublet,dt=0.002;

printf("输入f1、f2:

\n");

scanf("%f%f",&f1,&f2);

f0=(f1+f2)/2;

df=abs(f2-f1)/2;

for(i=0;i<=n/2;i++)

{

t=i*dt;

h[i]=2*cos(2*PI*f0*t)*sin(2*PI*df*t)/(PI*t);

h[i+n/2]=h[i];

}

h[25]=4*df;

for(i=0;i<=n/2;i++)

{

h[n/2-i]=h[n/2+i];

}

}

//==========求褶积函数==========//

intcvbx0(floatx[],floath[],floatr[],intkc,intnt)

{

intm,np,i,j;

floatsum;

m=kc/2;

for(np=0;np

r[np]=0.0;

for(i=0;i

{

sum=0.0;

for(j=0;j

{

if((i-m+j)<0||(i-m+j)>=nt)continue;

sum=sum+x[i-m+j]*h[j];

}

r[i]=sum;

}

}

//================傅里叶函数==============//

intIBIT(intj,intm)

{

inti,it,j1,j2;

it=0;

j1=j;

for(i=1;i<=m;i++)

{

j2=j1/2;

it=it*2+(j1-2*j2);

j1=j2;

}

returnit;

}

voidfft(float*xr,float*xi,intnr,floatT)

{

inti,j,k,l,n,n2,nr1,i1,j1,k2,k1n2;

floatc,s,p,tr,ti,trc,tic,ars;

n=(int)(pow(2,nr));

n2=n/2;

nr1=nr-1;

k=0;

for(l=1;l<=nr;l++)

{

loop1:

for(j=1;j<=n2;j++)

{

k2=k/(int)(pow(2,nr1));

p=(float)(IBIT(k2,nr));

ars=(float)(6.2831852*p/(float)(n));

c=(float)(cos(ars));

s=(float)(sin(ars));

k1n2=k+n2;

tr=xr[k1n2]*c+xi[k1n2]*s*T;

ti=xi[k1n2]*c-xr[k1n2]*s*T;

xr[k1n2]=xr[k]-tr;

xi[k1n2]=xi[k]-ti;

xr[k]=xr[k]+tr;

xi[k]=xi[k]+ti;

k++;

}

k+=n2;

if(k

{

gotoloop1;

}

else

{

k=0;

nr1=nr1-1;

n2/=2;

}

}

for(j=1;j<=n;j++)

{

i=IBIT(j-1,nr)+1;

if(i>j)

{

j1=j-1;

i1=i-1;

trc=xr[j1];

tic=xi[j1];

xr[j1]=xr[i1];

xi[j1]=xi[i1];

xr[i1]=trc;

xi[i1]=tic;

}

}

if(T<0.0)

{

for(j=0;j<=n;j++)

{

xr[j]/=n;

xi[j]/=n;

}

}

}

voidmain()

{

floatki[NQ2],ko[NQ2],h[51],pr[1024],pi[1024];

intnflg,i,n,l,p;

intlen,len1,jhd;

charnamei[50],nameo[50];

FILE*fp1,*fp2,*fp3,*fp4,*fp5;

union

{

inthd[NQ2];

floatdata[NQ2];

charbuf[NQ2];

shortintshd[NQ2];

}dat;

//****************************/

printf("inputfilename:

");

scanf("%s",&namei);

printf("outputfilename:

");

scanf("%s",&nameo);

fp1=fopen(namei,"rb");

if(fp1==NULL){printf("can'topeninputsegyfile\n");exit(0);}

fp2=fopen(nameo,"wb");

if(fp2==NULL){printf("can'topenoutputsegyfile\n");exit(0);}

fp3=fopen("滤波因子.csv","w");

if(fp3==NULL){printf("can'topenfilterfactorfile\n");exit(0);}

fp4=fopen("振幅谱.csv","w");

if(fp4==NULL){printf("can'topenamplitudefile\n");exit(0);}

fp5=fopen("相位谱.csv","w");

if(fp5==NULL){printf("can'topenphasefile\n");exit(0);}

fread(&dat.buf[0],1,LEN,fp1);

fwrite(&dat.buf[0],1,LEN,fp2);

fread(&dat.buf[0],1,400,fp1);

len1=dat.shd[10];

printf("samplenumbers:

%d\n",len1);

printf("samplerate(ms):

%u\n",dat.shd[8]/1000);

printf("seg_yflag:

%d\n",dat.shd[12]);

/**********************************/

fwrite(&dat.buf[0],1,400,fp2);

nflg=dat.shd[12];

if(nflg==1)len=len1*4+240;

if(nflg==2)len=len1*4+240;

if(nflg==3)len=len1*2+240;

printf("\ninputrecordlength:

%d\n",len);

n=0;

jhd=60;

//==========计算滤波因子===========//

printf("请输入p:

\n");

scanf("%d",&p);

if(p==1)

{

filter1(h,51);

for(i=0;i<51;i++)

fprintf(fp3,"%f\n",h[i]);

}

if(p==2)

{

filter2(h,51);

for(i=0;i<51;i++)

fprintf(fp3,"%f\n",h[i]);

}

if((p!

=1)&&(p!

=2))

printf("输入错误!

请重新输入p:

\n");

//*******************************//

while((l=fread(&dat.buf[0],1,len,fp1))>0)

{

for(i=0;i

ki[i]=dat.data[i+jhd];//dat.hd[],dat.shd[]

cvbx0(ki,h,ko,51,len1);//对数据进行各种处理

for(i=0;i

dat.data[i+jhd]=ko[i];//dat.hd[],dat.shd[]

fwrite(&dat.buf[0],1,len,fp2);

n++;

//=========对第100道做谱分析==========//

if(n==100)

{

for(i=0;i<1024;i++)

{

pr[i]=ki[i];

pi[i]=0;

}

fft(pr,pi,10,1.0);

for(i=0;i<1024;i++)

{

fprintf(fp4,"%f\n",sqrt(pr[i]*pr[i]+pi[i]*pi[i]));

fprintf(fp5,"%f\n",atan(pi[i]/pr[i]));

}

}

printf("tracenumber:

%d\n",n);

}

fclose(fp1);

fclose(fp2);

fclose(fp3);

fclose(fp4);

fclose(fp5);

}

1.3结果分析

1.3.1滤波因子

 

 

图1-1低通滤波因子

 

图1-2带通滤波因子

1.3.2原始数据及结果显示与分析

 

(a)、原始数据图(b)、第100道振幅谱图

图1-3原始数据及第100道振幅谱图

 

(a)、fc=45(b)、fc=50

 

 

(c)、fc=55d、fc=60

图1-4不同频率的低通滤波结果图

 

(a)、f1=25,f2=45(b)、f1=20,f2=50

 

(c)、f1=15,f2=55(d)、f1=10,f2=60

图1-5不同频率范围的带通滤波结果图

由图1-3(a)可知:

原始地震数据文件366.sgy所记录的地震记录能量分布不均匀,连续性差,噪声干扰大,信噪比低;

由图1-3(b)可知:

通过对第100道数据进行谱分析,可以发现其主频在50Hz左右;

由图1-4与图1-3(a)对比可知:

经过低通滤波后,所得的结果连续性有了一定好转,噪声减少,信噪比提高了;

由图1-4(a)(b)(c)(d)对比可知:

低通滤波过程中,截止频率fc对滤波结果影响较大,且越靠近主频,滤波效果越好;

由图1-5与图1-3(a)对比可知:

经过带通滤波后,所得的结果连续性有了一定好转,噪声减少,信噪比提高了;

由图1-5(a)(b)(c)(d)对比可知:

带通滤波过程中,低截止频率f1、高截止频率f2对滤波结果影响较大,若频率范围太小,则会导致有效波丢失(如a),若频率范围太大,则会导致噪声过多,信噪比低,滤波效果差(如d),达不到滤波目的;

由图1-4与图1-5对比可知:

低通滤波和带通滤波都可在一定程度上提高信噪比,使连续性变好;由于带通滤波和低通滤波的通频不同,带通滤波可将低频(低于f1)和高频(高于f2)干扰均可滤去,而低通滤波只能滤去高频干扰(高于fc),故而,带通滤波比低通滤波效果要好一些。

 

第二章自动统计剩余时差校正

2.1方法

反映地下界面的反射波时距曲线或同相轴一般是双曲线形状的。

其中只有在激发点处接收到的反射波时间(t0)代表界面的法线反射时间,故必须将各个观测点的时间值都变成相应各点的法线反射时间,时距曲线或同相轴才与地下界面的形态一致。

所以,必须从各观测点的时间值中减去一个相应的校正值。

当界面水平时,它等于观测时间减去法线反射时间。

即使对同一反射界面的相同深度,由于各接收点距激发点远近不同,校正量也不同;而对同一道来说,由浅层至深层的校正量亦不同,校正量是变化的,故称动校正。

其方法步骤如下:

1)读取原始文件数据;

2)求出模型道;

3)利用相关函数求出校正时差;

4)对道集进行时差校正;

5)迭代处理,一直到精度满足为止;

6)写文件,用fimage2012显示。

2.2源程序

#include

#include

#definePI3.1415926

//===========低通滤波因子===========//

floatfilter1(floath[],intn)

{

inti;

floatfc;

doublet,dt=0.002;

printf("输入fc:

\n");

scanf("%f",&fc);

for(i=1;i<=n/2;i++)

{

t=i*dt;

h[i]=sin(2*PI*fc*t)/(PI*t);

h[i+n/2]=h[i];

}

h[25]=2*fc;

for(i=1;i<=n/2;i++)

h[n/2-i]=h[n/2+i];

}

//========带通滤波因子========//

floatfilter2(floath[],intn)

{

inti;

floatf1,f2,df,f0;

doublet,dt=0.002;

printf("输入f1、f2:

\n");

scanf("%f%f",&f1,&f2);

f0=(f1+f2)/2;

df=abs(f2-f1)/2;

for(i=0;i<=n/2;i++)

{

t=i*dt;

h[i]=2*cos(2*PI*f0*t)*sin(2*PI*df*t)/(PI*t);

h[i+n/2]=h[i];

}

h[25]=4*df;

for(i=0;i<=n/2;i++)

h[n/2-i]=h[n/2+i];

}

//========求褶积函数======//

intcvbx0(floatx[],floath[],floatr[],intkc,intnt)

{

intm,np,i,j;

floatsum;

m=kc/2;

for(np=0;np

for(i=0;i

{

sum=0.0;

for(j=0;j

{

if((i-m+j)<0||(i-m+j)>=nt)continue;

sum=sum+x[i-m+j]*h[j];

}

r[i]=sum;

}

}

//*******求模型道**********//

floatmodel(floatp[20][100],floaty[100],intn,intm)

{

inti,j;

floatsum,t;

for(j=0;j

{

sum=0;

for(i=0;i

{

t=p[i][j];

sum+=t;

}

y[j]=sum/n;

}

}

//***********求相关************//

floatxcorr(floatt[],floaty[],floatr[],intm)

{

inti,j,k;

floatsum;

for(k=-m+1;k

{

sum=0;

for(i=0;i

{

j=i+k;

if((j>=0)&&(j<=m))

sum+=t[i]*y[j];

}

r[k+m-1]=sum;

}

}

//***********求时差***********//

floattime(floatxc[][199],intmax[])

{

inti,j;

floatt;

for(i=0;i<20;i++)

{

t=xc[i][0];

for(j=1;j<199;j++)

{

if(xc[i][j]>=t)

{

t=xc[i][j];

max[i]=j;

}

}

}

}

//********动校正*************//

floatmove(floatp[][100],intmax[],floatym[][100])

{

inti,j,k;

for(i=0;i<20;i++)

{

k=max[i]-99;

for(j=0;j<100;j++)

ym[i][j]=p[i][j-k];

}

}

voidmain()

{

inti,j,k,m=0,J,max[20]={0};

floatx[100],y[100],h[51],p[20][100],ym[20][100];

floatt[100]={0},xc[20][199],r[199]={0},z[199]={0};

FILE*fp,*fp1,*fp2;

//====================================//

fp1=fopen("nose20-100","rb");

if(fp1==NULL){printf("can'topeninputsegyfile\n");exit(0);}

fp2=fopen("nose20-100out","wb");

if(fp2==NULL){printf("can'topeninputsegyfile\n");exit(0);}

fp=fopen("滤波","wb");

printf("选择低通

(1)或带通

(2):

\n");

scanf("%d",&J);

if(J==1)

filter1(h,51);

if(J==2)

filter2(h,51);

for(i=0;i<20;i++)

{

fread(&x[0],4,100,fp1);

for(j=0;j<100;j++)

printf("%f\n",x[j]);

cvbx0(x,h,y,51,100);

for(j=0;j<100;j++)

p[i][j]=y[j];

fwrite(&y[0],4,100,fp);

}

//========校正========//

lp:

model(p,y,20,100);

for(i=0;i<20;i++)

{

for(j=0;j<100;j++)

t[j]=p[i][j];

xcorr(t,y,r,100);

for(k=0;k<199;k++)

xc[i][k]=r[k];

}

time(xc,max);

move(p,max,ym);

m++;

if(m<5)

gotolp;

for(i=0;i<20;i++)

fwrite(&ym[i][0],4,100,fp2);

fclose(fp);

fclose(fp1);

fclose(fp2);

}

2.3结果分析

 

(a)、校正前(b)、校正后

图2-1无噪音数据时差校正图

 

(a)、校正前(b)、校正后

图2-2有噪声数据时差校正前后图

由图2-1(a)与图2-1(b)(或图2-1(a)与图2-1(b))对比可知:

进行时差校正后,同相轴对齐到同一直线上,便于水平叠加;

由图2-1(b)与图2-2(b)对比可知:

含有噪声的地震记录数据,进行相同的时差校正后,有噪声的数据记录不能完全校正到同一直线上。

 

第三章交互集成软件

3.1方法

1.建立一个单文档框架程序;

2.设计一个菜单;

3.设计一对话框,输入参数;

4.选菜单绘制图形;

5.对话框输入参数控制显示.

3.2源程序

voidCMy1111View:

:

OnMenuitem32771()

{

//TODO:

Addyourcommandhandlercodehere

CClientDC*pdc=newCClientDC(this);

CPenpen;

pen.CreatePen(PS_SOLID,5,RGB(250,0,0));

CPen*oldpen=(CPen*)pdc->SelectObject(&pen);

constdoublePI=3.14159;

inti,cx=10,x2=50,y2,m=50;

doublea[51];

intn=51;

floatfc=45;

doublet,dt=0.002;

for(i=0;i<=n/2;i++)

{

t=i*dt;

a[i]=sin(2*PI*fc*t)/(PI*t);

a[i+n/2]=a[i];

}

a[25]=2*fc;

for(i=0;i<=n/2;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1