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

📄 s_fft.asv

📁 matlab源代码
💻 ASV
字号:
 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;
      alert(['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(temp,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 + -