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

    function xrec = invertBumpCWT(cfs,scales,param,dt)
%   Function to invert CWT obtained using the bump wavelet

ScType = getScType(scales);
if isempty(param)
    mu = 5;
    sigma = 0.6;
else
    mu = param(1);
    sigma = param(2);
end
bumpwav = @(w)abs(exp(1)*exp(-1./(1-((w-mu)/sigma).^2)))./w;
Cpsi = integral(bumpwav,mu-sigma,mu+sigma);

if strcmpi(ScType,'log')
    a0 = scales(2)/scales(1);
    Wr = 2*log(a0)*(1/Cpsi)*real(cfs);
    xrec = sum(Wr,1);
else
    scales = scales./dt;
    ds = mean(diff(scales));
    repSca = repmat(scales',[1, size(cfs,2)]);
    Wr = 2*ds*(1/Cpsi)*real(cfs./repSca);
    xrec = sum(Wr,1);
end

%---------------------------------------------------------------------
function ScType = getScType(scales)
% Determine if scales are linear or log
DF1 = sum(diff(scales,2));
scaleratio = log(scales/scales(1));
DF2 = sum(diff(scaleratio,2)); 
    if (abs(DF1)<sqrt(eps))
        ScType = 'linear';
    elseif (abs(DF2) < sqrt(eps))
        ScType = 'log';
    
    else
       ScType = 'undetermined';
    
end