% ------------------------------------------------------------------------- % % % % % % Script for Maximum Kurtosis Phase Deconvolution % % using a data set from the Western Canadian Sedimentary Basin % % % % M.D.Sacchi - for Geoph 426 - UofA % % % % From SeismicLab: % % % % readsegy.m % % spiking.m % % kurtosis_of_traces.m % % phase_correction.m % % delay.m % % bp_filter.m % % clip.m % % seismic.m % % % % ------------------------------------------------------------------------- % clear all; close all; % -------------------------------- % Read a small stack from the WCB % -------------------------------- [d,header] = readsegy('wcb_small_stack.su'); cdp = [header.cdp]; dt = header(1).dt/1000/1000; % Extract a window d = taper(d(250:900,:),10,10); [nt,nx] = size(d); % ---------------------------- % Apply spiking deconvolution % ---------------------------- [f,d1] = spiking(d,25,1.); % ------------------------------------------------------------- % Assume that the output of spiking deconvolution has the % wrong phase. Try to fix it via a phase rotation correction. % % Measure the Kurtosis for tentative phase rotations an pick % the one that maximizes the Kurtosis. % ------------------------------------------------------------- phase_rot = linspace(0,180,20); K = []; for j = 1:20; temp = phase_correction(d1,phase_rot(j)); K(j) = kurtosis_of_traces(temp); end; [Kmax,Jmax] = max(K); % ----------------------------------------------------- % Apply the phase rotation that maximizes the Kurtosis % ----------------------------------------------------- d2 = phase_correction(d1, phase_rot(Jmax)); % -------------------------- % Apply band-pass filtering % Why? % -------------------------- f1 = 2; f2 = 4; f3 = 55; f4 = 70; d2 = bp_filter(d2,dt,f1,f2,f3,f4); % -------------------------------------- % Delay output by comparison with input % -------------------------------------- d2 = delay(d,d2,40); % -------- % Figures % -------- % Display Kurtosis vs phase rotation figure(1); plot(phase_rot, K); xlabel('Phase rotation in degrees'); ylabel('Kurtosis'); % Display power spectrum before and after process figure(2); [P_in,freq] = smooth_spectrum(d,dt,10,'li'); [P_out,freq] = smooth_spectrum(d2,dt,10,'li'); plot(freq,P_in,freq,P_out); legend('Orignal', 'After Decon'); xlabel('Frequency [Hz]'); ylabel('Power Spectral Density'); % Display data, data after decon, data after decon + phase rotation + filtering figure(3); taxis = [0:1:nt-1]*dt; subplot(131); imagesc(cdp,taxis,clip(d,50,50)); title('Orignal stack'); subplot(132); imagesc(cdp,taxis,clip(d1,50,50)); title('Spiking decon'); subplot(133); imagesc(cdp,taxis,clip(d2,50,50)); title('Spiking Decon + Phase Correction'); colormap(seismic(3));