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

📄 s_frequency_attributes.m

📁 实现地震勘探中
💻 M
字号:
function attributes=s_frequency_attributes(seismic,varargin)% Compute median frequency, bandwidth, and power spectrum of seismic input data% Written by: E. R.: February 22, 2005% Last updated: March 7, 2005: Handle also matrices%%              attributes=s_frequency_attributes(seismic,varargin)% INPUT% seismic      seismic data or matrix% varargin     one or more cell arrays; the first element of each cell array is a keyword,%              the other elements are parameters. Presently, keywords are:%     'window'   window to use for spectrum computation. Possible window names are:%	      'Hamming', 'Hanning', 'Nuttall',  'Papoulis', 'Harris',%	      'Rect',    'Triang',  'Bartlett', 'BartHann', 'Blackman'%	      'Gauss',   'Parzen',  'Kaiser',   'Dolph',    'Hanna'.%	      'Nutbess', 'spline',  'none'%             'Rect' and 'none' have the same effect as has {'window',[]};%             Case is irrelevant (e.g. 'Hanning' and 'hanning' are the same)%             If the number of traces goes into the thousands then windowing %             becomes time consuming and may not be necessary.%             Default: {'window','none'}% OUTPUT% attributes   structure with fields%              'bandwidth'         average bandwidth of the seismic data set%              'bandwidth_octaves' bandwidth in octaves%              'median_frequency'  median frequency%              'power_spectrum'    power spectrum%              'frequencies'       frequency associated with each sample %                                  of "power_spectrum"%             If the input data set is a matrix, frequencies and bandwidth %             are in fractions of the Nyquist frequency%             If no output argument is supplied the function prints out %             bandwidth and median frequency.global ABORTED S4Mparam.window=[];param.average='yes';param=assign_input(param,varargin);if isnumeric(seismic)  &&  size(seismic,1) > 1 % "seismic" is matrix}   seismic=s_convert(seismic,0,500);end    [nsamp,ntr]=size(seismic.traces);nfft=max(2^nextpow2(nsamp),256);%     Compute bandwidth, median frequency, and integrated spectrumif isempty(param.window)  ||  strcmpi(param.window,'none')  ||  strcmpi(param.window,'rect')   ftraces=fft(seismic.traces,nfft);else%       Set up display of progress bar   gui_active(1);       % Add an abort button   if ~S4M.deployed     % Reset persistent variable in "progressbar"      clear progressbar % Commented out to allow compilation   end   h=progressbar([],0,'Computing windowed spectrum ...');   wind=mywindow(nsamp,param.window);   ftraces=zeros(nfft,ntr);   for ii=1:ntr      if ishandle(h)         h=progressbar(h,1/ntr);      end      if ~gui_active         ABORTED=true;         progressbar(h,-1);         return      end      drawnow      ftraces(:,ii)=fft(seismic.traces(:,ii).*wind,nfft);   end   progressbar(h,-1);endnfreq=nfft/2+1; 	                     % Length(ftraces) is even by designpower_spectrum=abs(ftraces(1:nfreq,:)).^2;   % Keep only positive frequencies if strcmpi(param.average,'yes')   power_spectrum=sum(power_spectrum,2);   ntr=1;endcs=cumsum(power_spectrum);fnyquist=500/seismic.step;df=2*fnyquist/nfft;freq=(0:1:nfreq-1)*df;med_freq=NaN(1,ntr);for ii=1:ntr   if cs(end,ii) > 0      index=find(diff(cs(:,ii)) > 0);      med_freq(ii)=interp1(cs(index,ii),freq(index),cs(end,ii)*0.5);   endend%	Compute bandwidthbandwidth=NaN*zeros(1,ntr);temp=max(power_spectrum);idx=find(temp > 0);bandwidth(idx)=df*cs(end,idx)./temp(idx);  % Mean spectrum divided by spectral maximumoctaves=log2((med_freq+0.5*bandwidth)/(max(med_freq-0.5*bandwidth,eps)));if nargout > 0   attributes.bandwidth=bandwidth;   attributes.bandwidth_octaves=octaves;   attributes.median_frequency=med_freq;   attributes.power_spectrum=power_spectrum;   attributes.frequencies=freq;else   disp(['Bandwidth = ',num2str(round(bandwidth)),' Hz'])   disp(['Bandwidth in octaves = ',num2str(round(100*octaves)/100)])   disp(['Median frequency = ',num2str(round(med_freq)),' Hz'])end%figure%plot(freq,power_spectrum)%keyboard

⌨️ 快捷键说明

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