C++实现合成地震记录

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#include

using namespace std;

#define pi 3.14

#define dt 0.002

#define xl 0.060

#define hl 0.300

#define fm 30

void main()

{

double h[200];

double t,m,n;

int i,j;

m=xl/dt+1;

n=hl/dt+1;

int b=(int)m/2;

double x[31], y[246];

cout<<"设计的层数为层"<<'\n'<<"各层密度分别为2.0 2.3 2.3 2.6 2.0"<<'\n';

cout<<"各层速度分别为2000 2500 2100 2700 3000"<<'\n'<<"各层厚度分别为100 100 100 100 100"<<'\n';

ofstream out1("wavelet.txt");

for(i=0;i<=15;i++)///////////////////生成雷克子波

{

t=i*dt;

x[15-i]=(1.0-2.0*pow(pi*fm*t,2.0))*exp(-pow(pi*fm*t,2.0));

x[15+i]=x[15-i];

// cout<

}

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

{

cout<

out1<

}

out1<< flush; out1.close();

double p[5]={2.0, 2.3, 2.3, 2.6, 2.0};/////////////////////////////////生成反射系数double v[5]={2000, 2500, 2100, 2700, 3000};

double th[5]={100, 100, 100, 100, 100};

double *w1, *w2, *w3, *w4, r[4],a[4]={0};

w1=p;

w2=v;

w3=r;

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

{

r[i]=(w1[i+1]*w2[i+1]-w1[i]*w2[i])/(w1[i+1]*w2[i+1]+w1[i]*w2[i]);

// cout<<*(e+i);

// cout<

}

a[0]=2*th[0]/(v[0]*dt);

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

{

a[i]=a[i-1]+2*th[i]/(v[i]*dt);

// cout<

}

w4=a;

ofstream out2("reflect.txt");

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

{

if(i==(int)w4[0])

h[i]=w3[0];

else if(i==(int)w4[1])

h[i]=w3[1];

else if(i==(int)w4[2])

h[i]=w3[2];

else if(i==(int)w4[3])

h[i]=w3[3];

else

h[i]=0.0;

t=i*dt;

out2<

// cout<

}

out2<

// cout<

////////////////////////////////////////////实现卷积运算ofstream out3("convolution.txt");

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

{

y[i]=0.0;

}

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

{

y[i]=0.0;

for(j=0;j

{

if((i-j)>=0&&(i-j)<=200)

y[i]=y[i]+x[j]*h[i-j];

}

// cout<

}

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

{

y[i]=y[i+15];

t=i*dt;

out3<

}

out3<

}

相关文档
最新文档