⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s_attributes.m

📁 实现地震勘探中
💻 M
字号:
function seismic=s_attributes(seismic,varargin)% Function computes attributes of the seismic traces and stores them in like-named % header(s); if no output data set is provided, information about these attributes% is printed to the command window via the 'list' (short list) option of "ds_header".% See also: s_zone_attributes%% Written by: E. R.: April 11, 2000% Last updated: September 11, 2007: Bug fix%%            seismic=s_attributes(seismic,varargin)           % INPUT% seismic    Seismic dataset;% varargin   one or more cell arrays; the first element of each cell array is %            a keyword, the other elements are parameters. %            Presently, keywords are:%     'action'  Defines action to take. Possible values are:%            'add'      Add header with mnemonic "attribute"; prints error %                         message if header already exists. %            'add_ne'   Add header with mnemonic "attribute". Replaces it if it %                       already exists.%            'Default: {'action','add_ne'}%     'attributes'   Defines the attributes to compute. Possible attributes%                    are (not case sensitive):%            'aaa'    Compute the average absolute amplitude of each trace and store it %                         in header "aaa" (same as "amean")%            'amax'     Compute the maximum absolute value of each trace and store %                         it in header "amax"%            'amean'    Compute the mean of the absolute value of each trace%                         and store it in header "amean"%            'amedian'  Compute the median of the absolute value of each trace%                         and store it in header "amedian"%            'amin'     Compute the minimum absolute value of each trace and store %                         it in header "amin"%            'l2norm'   Compute the L2 norm of each trace and store it in %                       header "l2norm"%            'max'      Compute the maximum value of each trace and store it %                       in header "max"%            'mean'     Compute the mean value of each trace and stores it in %                         header "mean"%            'median'   Compute the median value of each trace and store it in %                         header "median"%            'min'      Compute the minimum value of each trace and store it in %                         header "min"%            'minabs'   Compute the absolute value of the minimum of each trace %                          and store it in header "minabs"%            'rms'      Compute the rms value of each trace and store it in%                          header "rms"%            Default: {'attributes','aaa','amax','amean', ... ,'rms'}  (all attributes)% OUTPUT% seismic    "Updated" seismic structure (i.e. input seismic with attributes %            added to headers).%            If no output argument is given the function outputs a summary of%            the attributes (via "ds_header")%% EXAMPLE     %            s_attributes(s_data)global S4M%       Set defaults parametersparam.action='add_ne';param.attributes={'aaa','amax','amean','amedian','amin','l2norm','max', ...        'mean','median','min','minabs','rms'};param.min_thick=seismic.step;%       Replace default parameters by input arguments (if any)param=assign_input(param,varargin);if nargin < 1   error('At least one input argument (seismic structure) is required.')endif ~isstruct(seismic)   error('The first input argument must be a seismic structure.')endif ~isfield(seismic,'headers')   nh=0;else   nh=size(seismic.headers,1);endif ischar(param.attributes)   param.attributes={param.attributes};endlattributes=length(param.attributes);htext=cell(lattributes+1,1);htext{1}=[param.action,':'];    % Prepare text for history field[nsamp,ntr]=size(seismic.traces);if ~isyes(S4M.case_sensitive)   param.attributes=lower(param.attributes);endfor ii=1:lattributes   type=param.attributes{ii};%     Check if a header with the name "type" already exists and determine row of header%     and header_info to store new data   if ~isfield(seismic,'header_info')      idx=[];   else      idx=find(ismember(lower(seismic.header_info(:,1)),type));   end   if ~isempty(idx)      if strcmpi(param.action,'add')         error(['The header mnemonic ',type,' already exists in the header'])      end   else      idx=nh+1;   end   %%    Compute the requested attributes   switch type   case {'amean','aaa'}      seismic.headers(idx,:)=mean(abs(seismic.traces));      seismic.header_info(idx,1:3)={type,'n/a','Average absolute amplitude of trace'};   case 'amax'      seismic.headers(idx,:)=max(abs(seismic.traces));      seismic.header_info(idx,1:3)={type,'n/a','Maximum of absolute amplitudes of trace'};   case 'amedian'      seismic.headers(idx,:)=median(abs(seismic.traces));      seismic.header_info(idx,1:3)={type,'n/a','Median of absolute amplitudes of trace'};   case 'amin'      seismic.headers(idx,:)=abs(min(seismic.traces));      seismic.header_info(idx,1:3)={type,'n/a','Absolute value of trace minimum'};   case 'l2norm'      temp=zeros(1,ntr);      for jj=1:ntr         temp(jj)=norm(seismic.traces(:,jj));      end      seismic.headers(idx,:)=temp;      seismic.header_info(idx,1:3)={type,'n/a','L2 norm of trace'};   case 'max'      seismic.headers(idx,:)=max(seismic.traces);      seismic.header_info(idx,1:3)={type,'n/a','Maximum of trace'};   case 'mean'      seismic.headers(idx,:)=mean(seismic.traces);      seismic.header_info(idx,1:3)={type,'n/a','Mean of trace'};   case 'median'      seismic.headers(idx,:)=median(seismic.traces);      seismic.header_info(idx,1:3)={type,'n/a','Median of trace'};   case 'min'      seismic.headers(idx,:)=min(seismic.traces);      seismic.header_info(idx,1:3)={type,'n/a','Minimum of trace'};   case 'minabs'      seismic.headers(idx,:)=min(abs(seismic.traces));      seismic.header_info(idx,1:3)={type,'n/a','Minimum of absolute values of trace'};   case 'rms'      seismic.headers(idx,:)=sqrt(sum(seismic.traces.^2)/nsamp);      seismic.header_info(idx,1:3)={type,'n/a','RMS amplitude of trace'};   case 'trend'      scf=1000/seismic.step;      for jj=1:ntr         seismic.headers(idx,jj)=repeated_median_trend(seismic.traces(:,jj))*scf;      end      seismic.header_info(idx,1:3)={type,'1/sec','Trend'};   case 'logtrend'      scf=1000/seismic.step;      for jj=1:size(seismic.traces,2)         seismic.headers(idx,jj)=repeated_median_trend(log(seismic.traces(:,jj)+eps))*scf;      end      seismic.header_info(idx,1:3)={type,'1/sec','Logrithmic trend'};   otherwise      error(['Type ',type,' not (yet?) defined'])   end%%   nh=size(seismic.headers,1);            % Update number of header mnemonics   htext{ii+1}=type;end	% End of FOR-loopif nargout == 0      % If no output argument is specified   ds_header(seismic,'list',param.attributes)   clear seismicelse%       Append history field   if isfield(seismic,'history')      seismic=s_history(seismic,'append',cell2str(htext,' '));   endend   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -