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

    function varargout = ndwt(x,level,varargin)
%NDWT Nondecimated 1-D wavelet transform.
%   NDWT will be removed in a future release of MATLAB. Use one of the
%   following functions instead:
%       <a href="matlab:help modwt">modwt</a>
%       <a href="matlab:help swt">swt</a>

% Error in R2015a

error(message('Wavelet:warnobsolete:ErrorReplaceNDWT'));
nbIn = length(varargin);
if nbIn < 1
    error(message('MATLAB:narginchk:notEnoughInputs'));
elseif nbIn > 3
    error(message('MATLAB:narginchk:tooManyInputs'));
end
nextArg = 2;
if ischar(varargin{1})     % Wavelet name
    [LoD,HiD,LoR,HiR] = wfilters(varargin{1});
    
elseif iscell(varargin{1}) % Wavelet Filters
    [LoD,HiD,LoR,HiR] = deal(varargin{1}{:});
else                       % Wavelet Filters
    if isfield(varargin{1},'LoD') && isfield(varargin{1},'HiD') && ...
            isfield(varargin{1},'LoR') && isfield(varargin{1},'HiR')
        LoD = varargin{1}.LoD; HiD = varargin{1}.HiD;
        LoR = varargin{1}.LoR; HiR = varargin{1}.HiR;
    else
        error(message('Wavelet:FunctionArgVal:Invalid_ArgVal'));
    end
end
lf = length(LoD);

dwtEXTM = 'sym';
while nbIn>=nextArg
    argName = varargin{nextArg};
    argVal  = varargin{nextArg+1};
    nextArg = nextArg + 2;
    switch argName
        case 'mode' , dwtEXTM = argVal;
    end
end

% Initialization.
rowvect =  size(x,1)<=1;
lx = length(x);
longs = zeros(1,level+2);
longs(end) = lx;
dec = cell(1,level+1);
% idx = 1;
idx = level+1;
for k=1:level
    lx = length(x);
    x = wextend('1d',dwtEXTM,x,lf-1,'b');
    lkeep = lx+lf-1;
    dec{idx} = wkeep(conv(HiD,x),lkeep);
    x = wkeep(conv(LoD,x),lkeep);
    idx = idx-1;
end
dec{idx} = x;
for k = 1:level+1 , longs(k) = length(dec{k}); end

% Non Decimated Wavelet Transform.
wt.rowvect = rowvect;
wt.level = level;
wt.mode  = dwtEXTM;
wt.filters.LoD = LoD;
wt.filters.HiD = HiD;
wt.filters.LoR = LoR;
wt.filters.HiR = HiR;
wt.dec = dec;
wt.longs = longs;

switch nargout
    case 1
        varargout{1} = wt;
    case 2        
        if ~rowvect , catDIR = 1; longs = longs'; else catDIR = 2; end
        varargout{1} = cat(catDIR,dec{:});
        varargout{2} = longs;
    case 3        
        NbCd1 = length(wt.dec{1});
        A = wt.dec{end}(end-NbCd1+1:end);
        D = zeros(level,NbCd1);
        for k = 1:level
            D(k,:) = wt.dec{k}(end-NbCd1+1:end);
        end
        varargout = {A,D,wt};        
end