资源描述:
《最小平方反滤波程序代码C语言以及MATLAB编写.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、分C语言和MATLAB两部分第一部分:C语言#include"stdio.h"#include"math.h"#include"stdlib.h"#include"malloc.h"#include"string.h"#definepi3.14#definefm25//主频#definedt0.001//采样间隔voidcon(floata[],floatb[],floatc[],intM,intL);//褶积voidzixiangguan(float*a,float*r,intP);//自相关intjiefa
2、ngchengzu(floatR[],intn,floatb[],floatx[]);//解托普利茨方程组voidmain(){inti,j;intP=200;//子波长度intQ=399;//反射序列长度floata;//子波衰减因子floatwave[200],ref[200],con1[399],xcorr[200],b[200],at[200],yt[598];FILE*fp_wave,*fp_con1,*fp_xcorr,*fp_at,*fp_yt;fp_wave=fopen("wave.csv","
3、w");//子波fp_con1=fopen("con1.csv","w");//子波与反射序列褶积的地震记录fp_xcorr=fopen("xcorr.csv","w");//地震记录自相关fp_at=fopen("at.csv","w");//反滤波因子fp_yt=fopen("yt.csv","w");//因子与地震记录褶积for(i=0;i
4、2*fm*fm*log(2)/3;wave[i]=cos(2*pi*fm*i*dt)*exp(-a*i*i*dt*dt);fprintf(fp_wave,"%f",wave[i]);//构造子波//}con(wave,ref,con1,P,P);for(i=0;i5、[i]);//子波自相关//for(i=0;i
6、oatb[],floatc[],intM,intL){inti,j,N;floattp=0;N=M+L-1;for(i=0;i=0&&(i-j)7、j];//从最左边开始,移到两者重合}r[P-1-i]=s;s=0;}}//莱文森递推解托普利茨方程组////R为矩阵的第一行或者第一列数据,b为方程组右侧结果,x为计算的反滤波因子intjiefangchengzu(floatR[],intn,floatb[],floatx[]){inti,j,k;floata,beta,q,c,h,*y,*s;s=(float*)calloc(n,sizeof(double));y=(float*)calloc(n,sizeof(double));a=R[0];if(fab
8、s(a)+1.0==1.0){free(s);free(y);printf("fail");return(-1);}y[0]=1.0;x[0]=b[0]/a;for(k=1;k<=n-1;k++){beta=0.0;q=0.0;for(j=0;j<=k-1;j++){beta=beta+R[j+1]*y[j];q=q+R[k-j]*x[j];}if(fabs(a)+1.0==1.0