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

📄 mywindow.m

📁 实现地震勘探中
💻 M
字号:
function wndw=mywindow(lwindow,name,param,param2)% Compute a window for signal-processing purposes%% Written by: E. R.:% Last updated: October 10, 2006: Add cosine window%%        wndw=mywindow(n,name,param,param2)% INPUT% lwindow   window length% name   name of the window; possible values are:%       'Bartlett'   Triangular window (same as 'triang', 'triangle')%       'Blackman'%       'cosine'     rectangular window with cosine taper (input argument param %                    used to define length of taper as a fraction of the total%                    window length; 0 <= param <= 0.5)%       'Dolph'%       'Gauss'      an optional parameter "param" sets both end values. %                    Default: param=0.005%  ,    'Hamming'    raised cosine window%       'Hanning'    cosine-shaped window%       'Harris', %       'none'       same as 'rect'%       'Nutbess'%       'Nuttall'%       'Papoulis'%       'Parzen'%       'rect',      rectangular window; same as 'none'%       'sine'       rectangular window with sine taper (input argument param %                    used to define length of taper as a fraction of the total%                    window length; 0 <= param <= 0.5)%       'trapezoid'  rectangular window with linear taper (input argument param %                    used to define length of taper as a fraction of the total%                    window length; 0 <= param <= 0.5)%	'triang'     same as 'Bartlett'%	'triangle'   same as 'Bartlett'%%        Default: name='Hamming';% param   additional optional parameter%       cosine window: fraction of "lwindow" used for the cosine taper %                      0<=param<=0.5; default: param=0.5%       Gauss window:  value (step) at the end of the window%                      param < 1; default: 0.005%       sine window:   fraction of "lwindow" used for the sine taper %                      0<=param<=0.5; default: param=0.5%       trapezoid window: fraction of "lwindow" used for the linear taper %                      0<=param<=0.5; default: param=0.5% param2  second optional parameter% OUTPUT% wndw  column vector of length "lwindow" with samples of the requested window%% EXAMPLE%       wndw=mywindow(256,'Gauss',0.005);%       figure; plot(wndw);if nargin == 0   error ('At least 1 input parameter is required.')endif lwindow <= 0   error('Window length "lwindow" should be strictly positive.')end;if nargin == 1   name= 'HAMMING';else   name=upper(name);endswitch namecase 'BARTHANN'   wndw=0.38*(1.0-cos(2.0*pi*(1:lwindow)/(lwindow+1))') ...       +0.48*min((1:lwindow),(lwindow:-1:1))'/(lwindow+1);case {'BARTLETT','TRIANG','TRIANGLE'},   wndw=2.0*min((1:lwindow),(lwindow:-1:1))'/(lwindow+1);case 'BLACKMAN'   ind=(-(lwindow-1)/2:(lwindow-1)/2)' *2.0*pi/lwindow;   wndw=0.42 + 0.50*cos(ind) + 0.08*cos(2.0*ind);case 'COSINE'   if nargin < 3  || isempty(param) ||  param > 0.5  ||  param < 0      param=0.25;   end       n1=round(lwindow*param);   wndw=ones(lwindow,1);   wndw(1:n1)=sin(0.5*pi*(1:n1)/n1).^2;   wndw(end-n1+1:end)=wndw(n1:-1:1);case {'DOLPH','DOLF'}   if rem(lwindow,2) == 0      oddlength=1;       lwindow=2*lwindow+1;    else       oddlength=0;    end;   if nargin < 3  ||  isempty(param)       A=1e-3;    else       A=10^(param/20);    end;   lw1=lwindow-1;    Z0=cosh(acosh(1.0/A)/lw1);    x0=acos(1/Z0)/pi;    x=(0:lw1)/lwindow;    indices1=find((x<x0) | (x>1-x0));   indices2=find((x>=x0) & (x<=1-x0));   wndw(indices1)=cosh(lw1*acosh(Z0*cos(pi*x(indices1))));   wndw(indices2)=cos(lw1*acos(Z0*cos(pi*x(indices2))));   wndw=fftshift(real(ifft(lw1*real(wndw))));   wndw=wndw'/wndw(lw1/2+1);   if oddlength      wndw=wndw(2:2:lw1);    end;%{case 'FEJER'   nh=fix(lwindow/2);   ind=(1:nh-1)/nh;   h1=sin(pi*ind*(nh+1)).^2./(sin(pi*ind).^2*(nh+1));   wndw=h1;   error('Fejer window not yet implemented')%  wndw= needs checking%}case 'GAUSS'   if nargin < 3  ||  isempty(param)       param=0.005;    end;   wndw=exp(log(param) * linspace(-1,1,lwindow)'.^2 );case 'HAMMING'   wndw=0.54 - 0.46*cos(2.0*pi*(1:lwindow)'/(lwindow+1));case {'HANNING','HANN'}   wndw=(sin((pi/(lwindow+1))*(1:lwindow))').^2;case 'HARRIS'   ind=(1:lwindow)' *2.0*pi/(lwindow+1);   wndw= 0.35875 ...     -0.48829 *cos(    ind) ...     +0.14128 *cos(2.0*ind) ...     -0.01168 *cos(3.0*ind);case 'KAISER'  if nargin < 3  ||  isempty(param)      beta=3.0*pi;   else      beta=param;   end;  ind=(-(lwindow-1)/2:(lwindow-1)/2)' *2/lwindow;  wndw=bessel(0,j*beta*sqrt(1.0-ind.^2))/real(bessel(0,j*beta));case {'NONE','RECTANG','RECT'}    wndw=ones(lwindow,1);case 'NUTBESS'   if nargin < 3      beta=3*pi;    elseif isempty(param)       beta=3*pi;   else      beta=param;   end   if nargin == 4      nu=param2;   else       nu=0.5;   end;   ind=(-(lwindow-1)/2:(lwindow-1)/2)' *2/lwindow;    wndw=sqrt(1-ind.^2).^nu .* ...     real(bessel(nu,j*beta*sqrt(1.0-ind.^2)))/real(bessel(nu,j*beta));case 'NUTTALL' ind=(-(lwindow-1)/2:(lwindow-1)/2)' *2.0*pi/lwindow; wndw=0.3635819             +0.4891775*cos(    ind) + ...      0.1363995*cos(2.0*ind)+0.0106411*cos(3.0*ind) ;case 'PAPOULIS'   ind=(1:lwindow)'*pi/(lwindow+1);    wndw=sin(ind);case 'PARZEN'   ind=abs(-(lwindow-1)/2:(lwindow-1)/2)'*2/lwindow;    temp=2*(1.0-ind).^3;   wndw=min(temp-(1-2.0*ind).^3,temp);case 'SINE'   if nargin < 3  ||  isempty(param) ||  param > 0.5  ||  param < 0      param=0.25;   end       n1=round(lwindow*param);   wndw=ones(lwindow,1);   wndw(1:n1)=sin(0.5*pi*(1:n1)/n1);   wndw(end-n1+1:end)=wndw(n1:-1:1);case 'TRAPEZOID'   if nargin < 3  ||  isempty(param) ||  param > 0.5  ||  param < 0      param=0.25;   else      if param < 0  || param > 0.5         error('Parameter "param" must be between 0 and 0.5.')      end   end   n1=fix(lwindow*param);   wndw=ones(lwindow,1);   wndw(1:n1)=sin(pi*0.5*(1:n1)/(n1+1)).^2;   wndw(end:-1:end-n1+1)=wndw(1:n1);otherwise   error([' Unknown window: ',name]);end

⌨️ 快捷键说明

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