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.


 
Berikut kode Matlab untuk First Break Picking:

%%% 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

No comments: