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

📄 s_power_spectrum.m

📁 地震、测井方面matlab代码,解释的比较详细
💻 M
字号:
function powerspect=s_power_spectrum(seismic,varargin)
% Function computes power spectrum (amplitude spectrum) of seismic traces using
% the windowed autocorrelation function
% Written by: E. R.: November 3, 2004
% Last updated:
%
%             powerspect=s_power_spectrum(seismic,varargin)
% INPUT
% seismic     seismic data set
% varargin    one or more cell arrays; the first element of each cell array is a keyword,
%             the other elements are parameters. Presently, keywords are:
%     'nfft'  Number of samples of the Fourier transform
%             Default: {'nfft',max(nsamp,1024]} where "nsamp" is the number of 
%                 samples per trace
%     'type'  type of spectrum; possible values are "amplitude' and 'power'.
%             Default: {'type','power'}
%     'window'  window type 
%	      Possible names are :
%	      'Hamming', 'Hanning', 'Nuttall',  'Papoulis', 'Harris',
%	      'Rect',    'Triang',  'Bartlett', 'BartHann', 'Blackman'
%	      'Gauss',   'Parzen',  'Kaiser',   'Dolph',    'Hanna',
%	      'Nutbess', 'spline',  'none'
%             Default" {'window','Papoulis'} 
%     'wlength', window length (essentially length of the autocorrelation function
%             used for spectrum estimation); 
%             generally recommended: effective wavelet length
%             Default: {'wlength',seismic.last-seismic.first}
% OUTPUT
% powerspect  Power spectrum (or amplitude spectrum) of the input traces
%             one output trace for each input trace

[nsamp,ntr]=size(seismic.traces);

%	Set default values for input parameters
param.nfft=max(1024,nsamp);
param.wlength=seismic.last-seismic.first;
param.type='power';
param.window='Papoulis';

%	Replace defaults by input parameters
param=assign_input(param,varargin);


corr=zeros(2*nsamp-1,ntr);

for ii=1:ntr
   corr(:,ii)=correlate(seismic.traces(:,ii),seismic.traces(:,ii),logical(1));
end
corr=corr/nsamp;
  
%nsamp4corr=min(round(param.wlength/(2*seismic.step)),nsamp)+1;
nsamp4corr=min(round(param.wlength/seismic.step),nsamp-1)+1;

ia=nsamp-nsamp4corr+1;
% ia=max(nsamp-nsamp4corr,1);
if strcmpi(param.window,'none')
   corr=corr(ia:2*nsamp-ia,:);
else
   wndws={'Hamming', 'Hanning', 'Nuttall',  'Papoulis', 'Harris', ...
	'Rect',    'Triang',  'Bartlett', 'BartHann', 'Blackman', ...
	'Gauss',   'Parzen',  'Kaiser',   'Dolph',    'Hanna', ...
	'Nutbess', 'spline'};
     
   if ismember(lower(param.window),lower(wndws))
      wndw=mywindow(2*nsamp4corr-1,param.window);
%      window_length=length(wndw)%test
      corr=vmt(corr(ia:2*nsamp-ia,:),wndw(:));
   else
      disp([' Unknown window type:', param.window])
      disp(' Possible windows are:')
      disp(wndws)
      error('Abnormal termination')
   end
end

%corr=lf_dc_removal(corr,1);
temp=fft(corr,param.nfft);
%keyboard
step=1000/(seismic.step*param.nfft);

if mod(param.nfft,2) == 0
   nsamp4power=param.nfft/2+1;
else
   nsamp4power=(param.nfft+1)/2;
end

powerspect.type='seismic';
powerspect.tag='spectrum';
powerspect.name=['Spectrum (',seismic.name,')'];
powerspect.first=0;
powerspect.last=step*(nsamp4power-1);
powerspect.step=step;
powerspect.units='Hz';
powerspect.traces=abs(temp(1:nsamp4power,:));
if strcmpi(param.type,'power')
   powerspect.name=['Power spectrum (',seismic.name,')'];
   powerspect.traces=abs(temp(1:nsamp4power,:));
else
   powerspect.name=['Amplitude spectrum (',seismic.name,')'];
   powerspect.traces=sqrt(abs(temp(1:nsamp4power,:)));
end


⌨️ 快捷键说明

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