Friday, May 16, 2014
First Break Picker
Gambar di bawah ini merupakan First Break Picks yang dilakukan secara otomatis.Input merupakan data seismic shot gather dengan format ASCII. Lihat artikel ini (Matlab) atau ini (Perl) untuk melakukan konversi segy ke ASCII.
%%% Automatic First Break Picker
%%% Agus Abdullah, PhD
clear; clc
load testfb.sgy.txt
trace=testfb_sgy'; % row=samples; cols: traces no.
ntrace=2000; % no of trace
tmax=2000; % time max
sr=4; % sampling rate
gt=0.06;% gradient threshold. clean data: use small; noisy: use high
bp=20; % bad picks rejection threshold(ms). low: more agressive to remove bad picks.
sm=0.1; % smoothing trend. clean data: low; noisy data:high. to save near offset picks use low.
h = waitbar(0,'predicting first break...(1/3)');
for k=1:ntrace
waitbar(k/ntrace);
y=max(trace(:,k),0);
maxy=max(y);
y=y./maxy;
gg=gradient(y);
gg=min(gg,gt);
index=find(gg==gt,1);
zz(k)=isempty(index);
if zz(k) < 1
fb(k)=(index*sr);
else
fb(k)=0;
end
end
close(h)
fbs=smooth([1:ntrace],fb,sm,'rloess');
delta=abs(fbs-fb');
h = waitbar(0,'evaluating first break...(2/3)');
for i=1:ntrace
waitbar(i/ntrace);
if delta(i)< bp
fb(i)=fb(i);
else
fb(i)=NaN;
end
end
close(h)
h = waitbar(0,'plotting...(3/3)');
for k=1:ntrace
waitbar(k/ntrace);
plot(5*k+trace(:,k),[0:sr:tmax],'k');flipy; hold on
plot(5*k+trace(1,k),fb(k),'*r'); hold on
xlabel('trace #*5')
ylabel('time(ms)')
end
close(h)
clear; clc
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment