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

📄 s_power_spectrum.m

📁 实现地震勘探中
💻 M
字号:
function powerspect=s_power_spectrum(seismic,varargin)% Power spectrum (amplitude spectrum) of seismic traces% using the windowed autocorrelation function.%% Written by: E. R.: November 3, 2004% Last updated: December 1, 2007: revamped input argumnets%%             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:%     'df'    Sample interval in the frequency domain in herz; %             "df" must be less than "df0" where df0 = 1000/wlength.%             If this is not the case it will be set to "df0".%             Default: {'df',[]} which means that "df" will be set to "df0".%     'type'  type of spectrum to compute; 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% EXAMPLE%             seismic=s_data;%             powerspect=s_power_spectrum(seismic,{'window','papoulis'});%             s_wplot(s_stack(powerspect))%       Set default values for input parametersparam.df=[];% param.nfft=max(1024,nsamp);param.wlength=seismic.last-seismic.first;param.type='power';param.window='Papoulis';%       Replace defaults by input parametersparam=assign_input(param,varargin);[nsamp,ntr]=size(seismic.traces);df0=1000/param.wlength;if isempty(param.df)   param.df=df0;elseif param.df > df0   param.df=df0;endcorr=zeros(2*nsamp-1,ntr);for ii=1:ntr   corr(:,ii)=correlate(seismic.traces(:,ii),seismic.traces(:,ii),true);endcorr=corr/nsamp;  nsamp4corr=min(round(param.wlength/(2*seismic.step)),nsamp-1)+1;ia=nsamp-nsamp4corr+1;corr=corr(ia:2*nsamp-ia,:);switch lower(param.window)case {'none','rect'}   % Do nothingcase {'hamming', 'hanning', 'nuttall',  'papoulis', 'harris', ...      'triang',  'bartlett', 'barthann', 'blackman', ...      'gauss',   'parzen',  'kaiser',   'dolph',    'hanna', ...      'nutbess', 'spline'};     wndw=mywindow(2*nsamp4corr-1,param.window);   for ii=1:ntr      corr(:,ii)=corr(:,ii).*wndw;   end%   corr=vmt(corr(ia:2*nsamp-ia,:),wndw(:));otherwise   disp([' Unknown window type:', param.window])   disp(' Possible windows are:')   disp(wndws)   error('Abnormal termination')endnfft=max(size(corr,1),1000/(seismic.step*param.df));%param.nfft=max(param.nfft,size(corr,1));temp=fft(corr,nfft);%	Recompute the possibly adjusted sample interval in the frequency domainstep=1000/(seismic.step*nfft);if mod(nfft,2) == 0   nsamp4power=nfft/2+1;else   nsamp4power=(nfft+1)/2;endpowerspect.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,:)));endif ~any(isnan(powerspect.traces))   powerspect.null=[];else  powerspect.null=NaN;end%    Append history fieldif isfield(seismic,'history')   powerspect.history=seismic.history;   powerspect=s_history(powerspect,'append',param.window);end

⌨️ 快捷键说明

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