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

📄 s_fft.m

📁 地震、测井方面matlab代码,解释的比较详细
💻 M
字号:
function [ftseismic,aux]=s_fft(seismic,varargin)
% Function computes amplitude spectrum or Fourier transform of the traces of 
% the seismic input data set
% Written by: E. R., February 19, 2001
% Last updated: November 14, 2004: Add output argument aux
%
%	    [ftseismic.aux]=s_fft(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:
%        'output' type of output. Possible values are:
%              'amp'    amplitude spectrum
%              'ft'     Fourier transform (complex)
%              Default: {'output','amp'}
%        'df' sample interval in the frequency domain (achieved by padding)
%             only used if it is less than the default sample interval
%                1/(seismic.last-seismic.first)
%             Default: {'df',[]} 
%             use sample interval 2*Nyquist_frequency/(number_of_samples_per_trace - 1 )
% OUTPUT
% ftseismic  Amplitude spectrum or Fourier transform of traces of seismic input data
% aux        Auxiliary data
%        'frequencies'  vector of frequencies; i.e. ftseismic.first:ftseismic.step:ftseismic.last

%	Set default parameters
param.output='amp';
param.df=[];
param.window=[];

%	Decode input arguments
param=assign_input(param,varargin);

if isfield(seismic,'null')
   seismic=s_rm_trace_nulls(seismic);
end
nsamp=size(seismic.traces,1);
nyquist=500/seismic.step;
if ~isempty(param.df) & param.df > 0
   nfft=2*nyquist/param.df;
else
   nfft=nsamp;
end
freq=[0:2:nfft]*nyquist/nfft;

ftseismic.first=0;
ftseismic.last=freq(end);
ftseismic.step=freq(2);
ftseismic.units='Hz';
if isempty(param.window)
   temp=seismic.traces;
else
   try
      wndw=mywindow(nsamp,param.window);
      temp=zeros(nsamp,ntr);
      for ii=1:ntr
         temp(:,ii)=seismic.traces(:,ii).*wndw;
      end
   catch
      temp=seismic.traces;
      warning(['Window "',param.window,'" could not be applied'])
   end
end

%       Number of samples in the frequency domain
nsamp=round(ftseismic.last/ftseismic.step)+1;

ftseismic.traces=fft(seismic.traces,nfft);
ftseismic.traces=ftseismic.traces(1:nsamp,:);
if strcmpi(param.output,'amp')
  ftseismic.traces=abs(ftseismic.traces);
  htext='Amplitude spectrum';
else
  htext='Fourier transform';
end

if nargout > 1
   aux.frequencies=freq;
end

%       Copy rest of fields
ftseismic=copy_fields(seismic,ftseismic);

%    Append history field
if isfield(seismic,'history')
   ftseismic=s_history(ftseismic,'append',htext);
end

        


⌨️ 快捷键说明

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