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

📄 s_spectrum2wavelet.m

📁 实现地震勘探中
💻 M
字号:
function wavelet=s_spectrum2wavelet(freq,amps,varargin)% Compute zero-phase wavelet from its amplitude spectrum; % unless spectral amplitudes are defined for zero frequency and/or Nyquist% frequency (i.e. freq(1) == 0 and/or freq(end) == 500/step) they are set% to zero.%% Written by: E. R.: November 27, 2004% Last updated: March 30, 2008: bug fix%%%          wavelet=s_spectrum2wavelet(freq,amps,varargin)% INPUT% freq     frequency values at which the spectrum is defined% amps     associated values of the amplitude spectrum% varargin   one or more cell arrays; the first element of each cell array%          is a keyword, the other elements are parameters.%          Presently, keywords are:%     'dc_removal'  should DC be removed. Possible values: 'yes' and 'no'.%          Default: {'dc_removal','yes'}%     'method'  Interpolation method used for spectrum; possible values are %          parameters allowed for function "interp1".%          Default: {'method','linear'}%     'step'  sample interval of the seismic%          Default: {'step',4}%     'window'  Type of window to apply to the wavelet. Possible windows are %          in function "mywindow". Use 'rect' or 'none' if you do not%          want a window.%          Default: {'window','trapezoid'}            %     'wlength'  wavelet length%          Default: {'wlength',100} % OUTPUT% wavelet  zero-phase wavelet with spectrum defined by "freq" and "amps".%% EXAMPLE%          wavelet=s_spectrum2wavelet([10,20,40,60],[0,1,1,0],{'wlength',80})%          s_spectrum(wavelet)% UPDATE HISTORY%          August 3, 2006: Added option to apply window to wavelet;%                               better DC removalglobal S4M%	Set defaults of input argumentsparam.dc_removal='yes';param.method='linear';param.step=4;param.window='trapezoid';param.wlength=100;%	Replace defaults by actual input parametersparam=assign_input(param,varargin);nsamp=odd(param.wlength/param.step);ansamp1=nsamp-1;awlength=ansamp1*param.step;%	 Wavelet length used for spectrum interpolationnsamp1=4*ansamp1;nsamp=nsamp1+1;%	Sample interval in the frequency domainequidist=(0:2:nsamp)*500/(param.step*nsamp);equidist(end)=min(equidist(end),freq(end));if freq(1) > 0   freq=[0;freq(:)];   amps=[0;amps(:)];endif freq(end) < 500/param.step;   freq=[freq(:);equidist(end)];   amps=[amps(:);0];else   freq(end)=equidist(end);end   [freq,index]=unique(freq);amps=amps(index);aspectrum=reshape(interp1(freq,amps,equidist,param.method),[],1);aspectrum(isnan(aspectrum))=0;aspectrum=[aspectrum;aspectrum(end:-1:2)];wavelet.type='seismic';wavelet.tag='wavelet';wavelet.name='Wavelet with defined spectrum';wavelet.first=-awlength/2;wavelet.last=-wavelet.first;wavelet.step=param.step;wavelet.units='ms';traces=fftshift(real(ifft(aspectrum)));inc=(nsamp1-ansamp1)/2;wavelet.traces=traces(inc+1:end-inc);% keyboard%       Check for null valuesif any(isnan(wavelet.traces))   wavelet.null=NaN;else   wavelet.null=[];end%       Apply window to waveletif ~ismember(lower(param.window),{'rect','none'})   wavelet.traces=wavelet.traces.*mywindow(length(wavelet.traces),param.window);else   wavelet.traces([1,end])=wavelet.traces([1,end])*0.5;end%       Remove DCif strcmpi(param.dc_removal,'yes')   wavelet.traces=lf_dc_removal(wavelet.traces,2);%   wavelet.traces=wavelet.traces-sum(wavelet.traces)/(length(wavelet.traces)-1);endif strcmp(S4M.precision,'single')   wavelet=single(wavelet);else   wavelet=double(wavelet);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function m=odd(m)m=2*round((m-1)*0.5)+1;

⌨️ 快捷键说明

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