⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pyw.cpp

📁 地震波的预处理
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define mm 200  //原数据的节点数
#define pi 3.1415926
#define M 2.0  //M为最大波峰与最大波谷绝对值的比值,取2.0或1.5
#define L 31   // 雷克子波长度
#define t0 0.002 // t0为采样间隔
#define f0 35 // f0为最小相位的雷克子波的主频
#define N 1000

void convolution(double *y, double *x, int nx, double *h, int ny);

void main()
{
	int i,shicha[mm],j;
	double shendu[mm];
	double v[mm],d[mm],t[mm-1],b[L],y[N],a;
	double r[N]; //存储层反射系数值
	int n[mm-1]; //存储第i个层的反射系数序号
    FILE *fp1,*fp2,*fp3,*fp4,*fp5,*fp6,*fp7,*fp8;
	fp1=fopen("shicha.txt","r");
	for(i=0;i<mm;i++)
		fscanf(fp1,"%d",&shicha[i]);
	fclose(fp1);
    fp2=fopen("shendu.txt","r");
	for(i=0;i<mm;i++)
	{	fscanf(fp2,"%lf",&shendu[i]);
	}
	fclose(fp2);
	fp3=fopen("v.dat","w");
    for(i=0;i<mm;i++)
	{
		v[i]=(1e+6)/shicha[i]; 
        fprintf(fp3,"%lf\n",v[i]);
	}
    fp4=fopen("d.txt","w");
	for(i=0;i<mm;i++)
	{	d[i]=1.62+0.00021*v[i]; 
        fprintf(fp4,"%lf\n",d[i]);
	}
	fp5=fopen("t.dat","w");
	t[0]=2*shendu[0]/v[0];
	for(i=1;i<mm;i++)
	{	t[i]=t[i-1]+2*(shendu[i]-shendu[i-1])/v[i];}
	for(i=0;i<mm;i++)
	fprintf(fp5,"%lf\n",t[i]);
    for(i=0;i<N;i++)
		r[i]=0.0;
	for(i=0;i<mm-1;i++)
	{
		n[i]=(int)(t[i]/t0); //计算第i个层的反射系数序号
		 // printf("%d\n",n[i]);
		 j=n[i];
		r[j]=(d[i+1]*v[i+1]-d[i]*v[i])/(d[i+1]*v[i+1]+d[i]*v[i]);//计算层反射系数值
	}
	fp6=fopen("r.dat","w");
    for(i=0;i<N;i++)	
		fprintf(fp6,"%lf\n",r[i]);
	fp7=fopen("子波.dat","w");
    a=(2.0/3.0)*(f0)*(f0)*log10((double)M);// 得到离散的雷克子波
	for(i=0;i<L-1;i++)
	{
		b[i]=sin(2*pi*f0*i*t0)*exp((-1)*a*(i*t0)*(i*t0));
		fprintf(fp7,"%lf\n",b[i]);
	}
	fclose(fp7);
   convolution(y,b,L,r,N);
    fp8=fopen("卷积.dat","w");
    for(i=0;i<N+L;i++) 
    fprintf(fp8, "%lf\n",y[i]);
 }

// 卷积函数
void convolution(double *y, double *x, int nx, double *h, int ny)
{
	int i,j,s;
	for(i=0;i<nx+ny-1;i++)
	{
		y[i]=0;
		for(j=0;j<ny;j++)
		{
			s=i-j;
			if(s>=0 && s<nx)
				y[i]=y[i]+x[s]*h[j];
		}
	}
}

	

    		


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -