www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/ddencmp.m

    function [thr,sorh,keepapp,crit] = ddencmp(dorc,worwp,x)
%DDENCMP Default values for de-noising or compression.
%   [THR,SORH,KEEPAPP,CRIT] = DDENCMP(IN1,IN2,X)
%   returns default values for de-noising or compression,
%   using wavelets or wavelet packets, of an input vector
%   or matrix X which can be a 1-D or 2-D signal.
%   THR is the threshold, SORH is for soft or hard
%   thresholding, KEEPAPP allows you to keep approximation
%   coefficients, and CRIT (used only for wavelet packets)
%   is the entropy name (see WENTROPY).
%   IN1 is 'den' or'cmp' and IN2 is 'wv' or 'wp'.
%
%   For wavelets (three output arguments):
%   [THR,SORH,KEEPAPP] = DDENCMP(IN1,'wv',X) 
%   returns default values for de-noising (if IN1 = 'den')
%   or compression (if IN1 = 'cmp') of X.
%   These values can be used for WDENCMP.
%
%   For wavelet packets (four output arguments):
%   [THR,SORH,KEEPAPP,CRIT] = DDENCMP(IN1,'wp',X) 
%   returns default values for de-noising (if IN1 = 'den')
%   or compression (if IN1 = 'cmp') of X.
%   These values can be used for WPDENCMP.
%
%   See also WDENCMP, WENTROPY, WPDENCMP.

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
%   Last Revision: 20-Dec-2010.
%   Copyright 1995-2010 The MathWorks, Inc.

% Check arguments.
nbIn = nargin;
if nbIn<3
    error(message('Wavelet:FunctionInput:NotEnough_ArgNum'));
elseif isequal(worwp,'wv')
    if (nargout>3)
        error(message('Wavelet:FunctionOutput:TooMany_ArgNum'));
    end
elseif isequal(worwp,'wp')
    if (nargout>4)
        error(message('Wavelet:FunctionOutput:TooMany_ArgNum'));
    end
else
    error(message('Wavelet:FunctionArgVal:Invalid_ArgVal'));
end


% Set problem dimension.
if min(size(x))~=1, dim = 2; else dim = 1; end

% Set keepapp default value.
keepapp = 1;

% Set sorh default value.
if isequal(dorc,'den') && isequal(worwp,'wv')
    sorh = 's'; 
else
    sorh = 'h'; 
end

% Set threshold default value.
n = numel(x);

% nominal threshold.
switch dorc
  case 'den'
    switch worwp
      case 'wv' , thr = sqrt(2*log(n));               % wavelets.
      case 'wp' , thr = sqrt(2*log(n*log(n)/log(2))); % wavelet packets.
    end

  case 'cmp' ,  thr = 1;
end

% rescaled threshold.
if dim == 1
    [c,l] = wavedec(x,1,'db1');
    c = c(l(1)+1:end);
else
    [c,l] = wavedec2(x,1,'db1');
    c = c(prod(l(1,:))+1:end);
end

normaliz = median(abs(c));

% if normaliz=0 in compression, kill the lowest coefs.
if strcmp(dorc,'cmp') && normaliz == 0 
    normaliz = 0.05*max(abs(c)); 
end

if strcmp(dorc,'den')
    if strcmp(worwp,'wv')
        thr = thr*normaliz/0.6745;
    else
        crit = 'sure';
    end
else
    thr = thr*normaliz;
    if strcmp(worwp,'wp'), crit = 'threshold'; end
end