cgauwavf.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:3k
源码类别:

波变换

开发平台:

Matlab

  1. function [psi,X] = cgauwavf(LB,UB,N,NumWAW)
  2. %CGAUWAVF Complex Gaussian wavelet.
  3. %   [PSI,X] = CGAUWAVF(LB,UB,N,P) returns values of the Pth 
  4. %   derivative of the complex Gaussian function 
  5. %   F = Cp*exp(-i*x)*exp(-x^2) on an N point regular grid for the 
  6. %   interval [LB,UB]. Cp is such that the 2-norm of the Pth 
  7. %   derivative of F is equal to 1. P can be integer values 
  8. %   from 1 to 8.
  9. %
  10. %   Output arguments are the wavelet function PSI
  11. %   computed on the grid X.
  12. %   [PSI,X] = CGAUWAVF(LB,UB,N) is equivalent to
  13. %   [PSI,X] = CGAUWAVF(LB,UB,N,1).
  14. %
  15. %   These wavelets have an effective support of [-5 5].
  16. %
  17. %   ----------------------------------------------------
  18. %   If you have access to the Extended Symbolic Toolbox,
  19. %   you may specify a value of P > 8. 
  20. %   ----------------------------------------------------
  21. %
  22. %   See also GAUSWAVF, WAVEINFO.
  23. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 01-Jun-99.
  24. %   Last Revision: 14-May-2003.
  25. %   Copyright 1995-2004 The MathWorks, Inc.
  26. %   $Revision: 1.8.4.2 $  $Date: 2004/03/15 22:39:53 $
  27. % Check arguments.
  28. %-----------------
  29. nbIn = nargin;
  30. switch nbIn
  31.   case 0 ,
  32.    if ~exist('maple') , nmax = 8; else , nmax = 45; end
  33.    psi = nmax;
  34.    % psi contains the number max for Gaussian wavelets.
  35.    % This number depends of Symbolic Toolbox
  36.    
  37.   case 2 , error('Not enough input arguments.');
  38.       
  39.   case 3 , NumWAW = 1;
  40.       
  41.   case 4 ,
  42.    if ischar(NumWAW)
  43.        [fam,NumWAW] = wavemngr('fam_num',NumWAW);
  44.        NumWAW = wstr2num(NumWAW);
  45.    end
  46.    
  47.   otherwise  , 
  48.       error('Too many input arguments.');
  49. end
  50. if errargt(mfilename,NumWAW,'int') , error('*'); end
  51. % Compute values of the Complex Gauss wavelet.
  52. X = linspace(LB,UB,N);  % wavelet support.
  53. if find(NumWAW==[1:8])
  54.   X2 = X.^2;
  55.   F0 = exp(-X2);
  56.   F1 = exp(-i*X);
  57.   F2 = (F1.*F0)/(exp(-1/2)*2^(1/2)*pi^(1/2))^(1/2);
  58. end
  59. switch NumWAW
  60.   case 1
  61.     psi = F2.*(-i-2*X)*2^(1/2);
  62.   case 2
  63.     psi = 1/3*F2.*(-3+4*i*X+4*X2)*6^(1/2);
  64.   case 3
  65.     psi = 1/15*F2.*(7*i+18*X-12*i*X.^2-8*X.^3)*30^(1/2);
  66.                 
  67.   case 4
  68.     psi = 1/105*F2.*(25-56*i*X-72*X.^2+32*i*X.^3+16*X.^4)*210^(1/2);
  69.   case 5
  70.     psi = 1/315*F2.*(-81*i-250*X+280*i*X.^2+240*X.^3-80*i*X.^4-32*X.^5)*210^(1/2);
  71.   case 6
  72.     psi = 1/3465*F2.*(-331+972*i*X+1500*X.^2-1120*i*X.^3-720*X.^4+192*i*X.^5+64*X.^6)*2310^(1/2);
  73.   case 7
  74.     psi = 1/45045*F2.*(1303*i+4634*X-6804*i*X.^2-7000*X.^3+3920*i*X.^4+2016*X.^5-448*i*X.^6-128*X.^7)*30030^(1/2);
  75.   case 8
  76.     psi = 1/45045*F2.*(5937-20848*i*X-37072*X.^2+36288*i*X.^3+28000*X.^4-12544*i*X.^5-5376*X.^6+1024*i*X.^7+256*X.^8)*2002^(1/2);
  77.   otherwise
  78.     if ~exist('maple')
  79.         msg = '*** The Extended Symbolic Toolbox is required ***';
  80.         errargt(mfilename,msg,'msg')
  81.         error(msg);
  82.     end
  83.     y = sym('t');
  84.     f = exp(-i*y).*exp(-(y.*y));
  85.     d = diff(f,NumWAW);
  86.     for j = 1:length(X)
  87.         t = X(j);
  88.         psi(j) = eval(d);
  89.     end
  90. end
  91. intL2 = sum(psi.*conj(psi));
  92. norL2 = intL2(end)*(X(2)-X(1));
  93. psi   = psi/sqrt(norL2);