forked from cultpenguin/segymat
-
Notifications
You must be signed in to change notification settings - Fork 0
/
SegyMAT_GAIN.m
98 lines (80 loc) · 2.57 KB
/
SegyMAT_GAIN.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
% SegyMAT_GAIN : Gain plugin for SegyMAT
%
% [Data,SegyTraceHeaders,SegyHeader]=SegyMAT_GAIN(Data,SegyTraceHeaders,SegyHeader,varargin);
%
% ex. AGC using AGC window of 100 ms :
% [Data]=SegyMAT_GAIN(Data,SegyTraceHeaders,SegyHeader,'agc',.1);
% ex. apply t^(pow), pow=2
% [Data]=SegyMAT_GAIN(Data,SegyTraceHeaders,SegyHeader,'pow',2);
%
%
% (C) Thomas Mejer Hansen (thomas@cultpenguin.com), 2002
%
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
%
function [Data,SegyTraceHeaders,SegyHeader]=SegyMAT_GAIN(Data,SegyTraceHeaders,SegyHeader,varargin);
nv=0;
for i=1:length(varargin)
if strcmp(varargin{i},'agc')
type=1;
window=varargin{i+1};
end
if strcmp(varargin{i},'pow')
type=2;
pow=varargin{i+1};
end
end
if type==1
disp([mfilename,' AGC'])
for it=1:size(Data,2)
disp([mfilename,' AGC trace : ',num2str(it)])
% Trace Data
TraceData=Data(:,it);
% Window Length
nsw=round(window./(SegyTraceHeaders(it).dt./1e+6));
nshalf=floor(nsw/2);
startsample=ceil(nsw/2);
endsample=length(TraceData)-floor(nsw);
for is=startsample:1:endsample;
range=[is-nshalf+1:1:is+nshalf];
gain=mean(abs(TraceData(range)));
if gain~=0
TraceData(is)=TraceData(is)./mean(abs(TraceData(range)));
% APPLY TO TOP
if is==startsample
for i=[1:startsample-1];
TraceData(i)=TraceData(i)./mean(abs(TraceData(range)));
end
end
if is==endsample
for i=[endsample+1:1:length(TraceData)];
TraceData(i)=TraceData(i)./gain;
end
end
end
end
Data(:,it)=TraceData;
end % END LOOP OVER TRACES
end % END TYPE
if type==2
disp([mfilename,' POW'])
for it=1:size(Data,2)
% disp([mfilename,' POW trace : ',num2str(it)])
t=[1:1:SegyTraceHeaders(it).ns]*SegyTraceHeaders(it).dt./1e+6+SegyTraceHeaders(it).DelayRecordingTime./1e+3;
tp=t.^(pow)';
Data(:,it)=Data(:,it).*tp;
end
end