www.pudn.com > logtools.rar > cscorr_sonic.m, change:2004-08-13,size:4577b

function [sout,tnot,delt,zcs2,tcs2,deltcs]=cscorr_sonic(slog,zlog,tcs,zcs) % [sout,tnot]=cscorr_sonic(slog,zlog,tcs,zcs) % % CSCORR_SONIC performs check shot corrections on a sonic log. % The algorithm (devised by Clint Frasier) is: % -Integrate the sonic to get traveltime % -Take the difference between the sonic derived traveltime and % the checkshot traveltime at the depths of the check shot % recordings. % -Using a spline interpolator, estimate a dt at every sampled % depth of the sonic log. % -The corrected sonic is the depth derivative of the sum of the % integrated sonic and the spline interpolated differences % % slog = vector of sonic log samples % zlog = vector of depths for slog. Must be same size vector as slog % tcs = vector of check shot times (1-way) % zcs = vector of check shot depths % % sout = check shot corrected sonic % tnot = one-way time constant that must be added to integrated sonic % one-way times to match check shot times. % % G.F, Margrave % % NOTE: It is illegal for you to use this software for a purpose other % than non-profit education or research UNLESS you are employed by a CREWES % Project sponsor. By using this software, you are agreeing to the terms % detailed in this software's Matlab source file. % BEGIN TERMS OF USE LICENSE % % This SOFTWARE is maintained by the CREWES Project at the Department % of Geology and Geophysics of the University of Calgary, Calgary, % Alberta, Canada. The copyright and ownership is jointly held by % its author (identified above) and the CREWES Project. The CREWES % project may be contacted via email at: crewesinfo@crewes.org % % The term 'SOFTWARE' refers to the Matlab source code, translations to % any other computer language, or object code % % Terms of use of this SOFTWARE % % 1) Use of this SOFTWARE by any for-profit commercial organization is % expressly forbidden unless said organization is a CREWES Project % Sponsor. % % 2) A CREWES Project sponsor may use this SOFTWARE under the terms of the % CREWES Project Sponsorship agreement. % % 3) A student or employee of a non-profit educational institution may % use this SOFTWARE subject to the following terms and conditions: % - this SOFTWARE is for teaching or research purposes only. % - this SOFTWARE may be distributed to other students or researchers % provided that these license terms are included. % - reselling the SOFTWARE, or including it or any portion of it, in any % software that will be resold is expressly forbidden. % - transfering the SOFTWARE in any form to a commercial firm or any % other for-profit organization is expressly forbidden. % % END TERMS OF USE LICENSE %other returned variables % [tcs2,zcs2] ... modified check shot array actually used % deltcs ... delta t's at the depths zcs2 % delt ... spline fit to deltcs %make everything a column vector slog=slog(:); zlog=zlog(:); tcs=tcs(:); zcs=zcs(:); %integrate the sonic nz=length(zlog); %generate a vector of differences dz=diff(zlog); %a vector of the average of adjacent points on the sonic %s2=(slog(1:nz-1)+slog(2:nz))/2; %tson=zeros(size(zlog)); %integrate by summing the array product of dz and s2 %tson(2:nz)=2*(1.e-06)*cumsum(dz.*s2); tson=.5*int_sonic(slog,zlog);%make sure its 1-way time tson=tson(:); %find those points on the checkshot between the start and end %of the log ind=between(zlog(1),zlog(nz),zcs,2); tcs2=tcs(ind); zcs2=zcs(ind); %see if we need to interpolate a point at the beginning if(ind(1)~=1) znot=zlog(1); tnot=interp1(zcs,tcs,znot); tcs2=[tnot;tcs2]; zcs2=[znot;zcs2]; else tnot=tcs2(1); end %see if we need a point at the end if(ind(length(ind))~=length(zcs)) zend=zlog(nz); tend=interp1(zcs,tcs,zend); tcs2=[tcs2;tend]; zcs2=[zcs2;zend]; end %find times on integrated sonic at each checkshot depth tson_cs= interp1(zlog,tson,zcs2); %fit a spline to the time differences. Use only those log depths within %the checkshot range ind=between(zcs2(1),zcs2(length(zcs2)),zlog,2); deltcs=tcs2-tson_cs; delt=spline(zcs2,deltcs,zlog(ind)); delt=delt(:); % pad beginnig and end of delt with constant time differences if(ind(1)~=1) npad=ind(1)-1; delt=[delt(1)*ones(npad,1);delt]; end if(ind(length(ind))~=nz) npad=nz-ind(length(ind)); delt=[delt;delt(length(delt))*ones(npad,1)]; end %add to the integrated sonic %tson=tson+delt(:); %recompute the sonic log %sout= gradient(tson',zlog')*(1.e06); %add the gradient of delt to the sonic ds=gradient(delt',zlog)*(1.e06); sout=slog+ds.'; %[m,n]=size(slog); %if(n==1) % sout=sout.'; %end