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

    function out = checkModwtFilter(Lo,Hi)
%MATLAB Code Generation Private Function

%   Copyright 1995-2016 The MathWorks, Inc.
%#codegen

% For a user-supplied scaling and wavelet filter, check that
% both correspond to an orthogonal wavelet
ZERO = coder.internal.indexInt(0);
ONE = coder.internal.indexInt(1);
Lscaling = coder.internal.indexInt(length(Lo));
Lwavelet = coder.internal.indexInt(length(Hi));
evenlengthLo = eml_bitand(Lscaling,ONE) == ZERO;
evenlengthHi = eml_bitand(Lwavelet,ONE) == ZERO;
evenlength = evenlengthLo && evenlengthHi;
equallen = Lscaling == Lwavelet;
if ~(evenlength && equallen)
    out = false;
    return
end
normLo = norm(Lo,2);
normHi = norm(Hi,2);
tol = 1e-7;
unitnorm = ~(abs(normLo - 1) > tol && abs(normHi - 1) > tol);
if ~unitnorm
    out = false;
    return
end
sumLo = sum(Lo);
sumHi = sum(Hi);
sumfilters = ~(abs(sumLo - sqrt(2)) > tol && abs(sumHi) > tol);
if ~sumfilters
    out = false;
    return
end
if Lscaling > 2
    xcorrHi = conv(Hi,flip(Hi));
    xcorrLo = conv(Lo,flip(Lo));
    i1 = Lscaling + 2;
    i2 = length(xcorrLo);
    zeroevenlagsLo = true;
    zeroevenlagsHi = true;
    for k = i1:2:i2
        zeroevenlagsLo = zeroevenlagsLo && ~(abs(xcorrLo(k) > tol));
        zeroevenlagsHi = zeroevenlagsHi && ~(abs(xcorrHi(k) > tol));
    end
    out = zeroevenlagsLo || zeroevenlagsHi;
else
    out = true;
end