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

📄 segy.txt

📁 segy是benthos侧扫声纳的数据格式
💻 TXT
字号:
#include"stdio.h"
#include"math.h"
int nsample,tsample,fsample,max_length,delay[20000];
void sgytoasc(in_F_name,out_F_name,start_trace,end_trace)
char in_F_name[],out_F_name[];
int start_trace,end_trace;
{char file_header[80];
 int ibuf[200],kbuf[120];
 int trace_data[9000];
 int i,j,k,nsamp,k10,ksu;
 FILE *in,*out;
 in=fopen(in_F_name,"rb");
 out=fopen(out_F_name,"w");
/*** 读写文件头 ***/
 for(i=0;i<40;i++)
 for(j=0;j<80;j++)
 {fread(&file_header[j],1,1,in);
 fwrite(&file_header[j],1,1,out);
 }
/*** 读写二进制文件头 ***/
 for(i=0;i<20;i++)
 {for(j=0;j<10;j++)
	{fread(&ibuf[i*10+j],2,1,in);
	 fprintf(out,"%7d",ibuf[i*10+j]);
	}
	 fprintf(out,"\n");
 }
/*** 定义样本数目 ***/
 nsamp=ibuf[10];
 printf("%d\n",nsamp);
/*** 读写轨道头文件 ***/
 for(k=start_trace;k<=end_trace;k++)
 {for(i=0;i<120;i++)
	fread(&kbuf[i],2,1,in);
/*** 写入轨迹头 ***/
  for(i=0;i<12;i++)
  {for(j=0;j<10;j++)
  	fprintf(out,"%7d",kbuf[i*10+j]);
    fprintf(out,"\n");
  }
/*** 读取轨迹数据 ***/
  for(i=0;i<nsamp;i++)
	fread(&trace_data[i],2,1,in);
/*** 计算样本数和10的整取***/
  k10=nsamp/10;
  ksu=nsamp%10;
/***写入轨迹数据 ***/
  for(i=0;i<k10;i++)
  {for(j=0;j<10;j++)
	fprintf(out,"%7d",trace_data[i*10+j]);
    fprintf(out,"\n");
  }
  for(i=0;i<ksu;i++)
	fprintf(out,"%7d",trace_data[k10*10+i]);
    fprintf(out,"\n");
 }
 fclose(in);
 fclose(out);
}

void fdmaxdly(in_F_name,start_trace,end_trace)
char in_F_name[];
int start_trace,end_trace;
{char file_header[80];
 int ibuf[200],kbuf[120];
 int trace_data[9000];
 int i,j,k,max_delay; 
 FILE *in;
 in=fopen(in_F_name,"rb");
 /*** 读取3200字节的文件头***/
 for(i=0;i<40;i++)
 for(j=0;j<80;j++)
    fread(&file_header[j],1,1,in);
/*** 读取400字节的二进制头 ***/
 for(i=0;i<200;i++)
    fread(&ibuf[i],2,1,in);
/*** 定义样本数目***/
 tsample=ibuf[8]; 
 fsample=1000/tsample;
 nsample=ibuf[10];
if(start_trace!=0) 
 {for(k=0;k<start_trace;k++)
 {
/***读取轨迹头***/
    for(i=0;i<120;i++)
    	fread(&kbuf[i],2,1,in);
/***读取轨迹数据 ***/
	for(i=0;i<nsample;i++)
	    fread(&trace_data[i],2,1,in);
 }
 }
 for(k=start_trace;k<=end_trace;k++)
 {   
/***读取轨迹头 ***/
	for(i=0;i<120;i++)
	   fread(&kbuf[i],2,1,in);
    delay[k]=kbuf[54];
/***读取轨迹数据***/
	for(i=0;i<nsample;i++)
	   fread(&trace_data[i],2,1,in); 
 }

/*** 找出最大延迟时间 ***/
 max_delay=0;
 for(k=start_trace;k<=end_trace;k++)
 {  if(delay[k]>max_delay) max_delay=delay[k];
 }      
/*** 决定最大记录长度时间***/
 max_length=nsample+max_delay*fsample;
 fclose(in);
}

void sgytosgy(in_F_name,out_F_name,start_trace,end_trace)
char in_F_name[],out_F_name[];
int start_trace,end_trace;
{char file_header[80];
 int ibuf[200],kbuf[120];
 int trace_data[9000];
 int i,j,k;
 FILE *in,*out;
 in=fopen(in_F_name,"rb");
 out=fopen(out_F_name,"wb");
 trace_data[8999]=0;
/*** 读写 3200 字节的头文件 ***/
 for(i=0;i<40;i++)
 for(j=0;j<80;j++)
 {fread(&file_header[j],1,1,in);
  fwrite(&file_header[j],1,1,out);
 }
/*** 读写 400字节二进制头文件 ***/
 for(i=0;i<200;i++)
 {fread(&ibuf[i],2,1,in);
  fwrite(&ibuf[i],2,1,out);
 }
 if(start_trace!=0)
 {for(k=0;k<start_trace;k++)
/*** 读轨道头***/
    for(i=0;i<120;i++)
    	fread(&kbuf[i],2,1,in);
/*** 读轨道数据 ***/
	for(i=0;i<nsample;i++)
	    fread(&trace_data[i],2,1,in);
 }
 for(k=start_trace;k<=end_trace;k++)
 {   
/*** 读轨道头 ***/
	for(i=0;i<120;i++)
	    fread(&kbuf[i],2,1,in);
    printf("%d,%d,%d,%d\n",k,kbuf[54],delay[k],max_length);
/*** 写轨道头 ***/
	for(i=0;i<120;i++)
		fwrite(&kbuf[i],2,1,out);
/*** 读轨道数据 ***/
	for(i=0;i<nsample;i++)
	    fread(&trace_data[i],2,1,in);
    if(delay[k]<=0)
	{
/*** 写轨道数据 ***/
	for(i=0;i<nsample;i++)
	    fwrite(&trace_data[i],2,1,out);
	for(i=0;i<max_length-nsample;i++)
        fwrite(&trace_data[8999],2,1,out);
    }
	else 
/*** 写轨道数据 ***/
	{
	for(i=0;i<kbuf[54]*fsample;i++)
		fwrite(&trace_data[8999],2,1,out);
	for(i=0;i<nsample;i++)
		fwrite(&trace_data[i],2,1,out);
	for(i=0;i<max_length-nsample-kbuf[54]*fsample;i++)
        fwrite(&trace_data[8999],2,1,out);
	}
 }
 fclose(in);
 fclose(out);
 printf("%d,%d\n",k,max_length);
}

void resample(in_F_name,out_F_name,start_trace,end_trace)
char in_F_name[],out_F_name[];
int start_trace,end_trace;
{char file_header[80];
 int ibuf[200],kbuf[120];
 int trace_data[9000];
 int i,j,k;
 FILE *in,*out;
 in=fopen(in_F_name,"rb");
 out=fopen(out_F_name,"wb");
/*** 读写3200字节的头文件 ***/
 for(i=0;i<40;i++)
 for(j=0;j<80;j++)
 {fread(&file_header[j],1,1,in);
  fwrite(&file_header[j],1,1,out);
 }
/*** 读写400字节二进制文件头 ***/
 for(i=0;i<200;i++)
 {fread(&ibuf[i],2,1,in);
  if(i==8) ibuf[i]=ibuf[i]*2;
  if(i==10) ibuf[i]=ibuf[i]/2;
  if(i==30) ibuf[i]=ibuf[i]/2;
  fwrite(&ibuf[i],2,1,out);
 }
 nsample=ibuf[10]*2;
 printf("%d\n",nsample);

 for(k=start_trace;k<end_trace;k++)
 {   
/*** 读轨道头***/
	for(i=0;i<120;i++)
	    fread(&kbuf[i],2,1,in);
/*** 写轨道头 ***/
	for(i=0;i<120;i++)
	{	if(i==57) kbuf[i]=kbuf[i]/2;
        if(i==58) kbuf[i]=kbuf[i]*2;
		fwrite(&kbuf[i],2,1,out);
    } 
/*** 读轨道数据***/
	for(i=0;i<nsample;i++)
	    fread(&trace_data[i],2,1,in);
/*** 写轨道数据 ***/
	for(i=0;i<nsample;i=i+2)
	    fwrite(&trace_data[i],2,1,out);
 }
 fclose(in);
 fclose(out);
}

/*** start_trace begin with 0 and end_trace=tatal_tacees-1 ***/
/*** in_F_name=input file name and out_F_name=out put file name ***/
/*** flag=1 意味着嵌入延迟 ***/
/*** flag=2 意味着将segy 转换为ASSII***/
/*** flag=3意味着从2到1重新取样 ***/
main()
{
 int start_trace=0,end_trace=2474;
 int flag=2;
 static char  in_F_name[20]={"test.segy"};
 static char out_F_name[20]={"test.xyz"};
 if(flag==1)
	{fdmaxdly(in_F_name,start_trace,end_trace);
     sgytosgy(in_F_name,out_F_name,start_trace,end_trace);}
 else if(flag==2)
	 sgytoasc(in_F_name,out_F_name,start_trace,end_trace);
 else
	 resample(in_F_name,out_F_name,start_trace,end_trace);
}

⌨️ 快捷键说明

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