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

    function [xd,cxd] = modwtdenoise1D(x,wav,lev,softHard,scal)
%   [xd,cxd] = modwtdenoise1D(x,wav,lev,softHard,scal) returns denoised
%   1D signal xd and MODWT coefficients cxd.   

 % Only support 'mln' at present
    if ~strcmpi(scal,'mln')
        error(message('Wavelet:modwt:ScalingError'));
    end

    if (isrow(x) || iscolumn(x))    
    % Obtain the MODWT
        wt = modwt(x,wav,lev);
    else
        wt = x;
    end
    
validateattributes(wt,{'double'},{'2d','real'});

% Check to see that the level for denoising does not exceed the level
% of the transform
    if (lev >= size(wt,1))
        error(message('Wavelet:modwt:InvalidDenoiseLevel'));
    end    

% Determine the level dependent thresholds
    for kk = 1:lev
        madest(kk) = sqrt(2)*median(abs(wt(kk,:)))/0.6745;
    end
% Thresholds    
thr = sqrt(2*madest.^2./2.^(1:lev)*log(length(x)));

% Threshold MODWT coefficients
    for kk = 1:lev
        wt(kk,:) = wthresh(wt(kk,:),softHard,thr(kk));
    end
% Invert the MODWT    
xd = imodwt(wt,wav);
cxd = wt;