📄 s_power_spectrum.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 parametersparam.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);corr=zeros(2*nsamp-1,ntr);for ii=1:ntr corr(:,ii)=correlate(seismic.traces(:,ii),seismic.traces(:,ii),logical(1));endcorr=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') endend%corr=lf_dc_removal(corr,1);temp=fft(corr,param.nfft);%keyboardstep=1000/(seismic.step*param.nfft);if mod(param.nfft,2) == 0 nsamp4power=param.nfft/2+1;else nsamp4power=(param.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,:)));end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -