www.pudn.com > SPIHT_bandelet.rar > perform_haar_transform_slow.m
function y = perform_haar_transform_slow(x, Jmin, dir);
% perform_haar_transform - compute a wavelet haar transform
%
% y = perform_haar_transform(x, Jmin, dir);
%
% This is the non-optimized Matlab version.
% TODO : code inverse transform (the mex version does implement it).
%
% Copyright (c) 2004 Gabriel Peyré
x = x(:);
n = length(x);
J = floor( log2(n) )-1;
if nargin<3
dir=1;
end
if dir~=1 && dir~=-1
error('dir should be either +1 or -1.');
end
if dir==-1
warning('Inverse haar transform not implemented');
y = x;
return;
end
% x contains the coarse scale signal
y = x;
for j=J:-1:0
n = length(x);
n1 = ceil(n/2);
n2 = floor(n/2);
% fine scale
y(n1+1:n) = ( x(1:2:2*n2) - x(2:2:2*n2) )/sqrt(2);
% coarse scale
if n1==n2
y(1:n1) = ( x(1:2:n) + x(2:2:n) )/sqrt(2);
else
y(1:n1-1) = ( x(1:2:n-1) + x(2:2:n) )/sqrt(2);
y(n1) = x(n);
end
x = y(1:n1);
end
return;
% x contains the coarse scale signal
y = x;
for j=J:-1:0
n = length(x);
n1 = ceil(n/2);
n2 = floor(n/2);
if n1==n2
% coarse scale
y(1:n1) = ( x(1:2:n) + x(2:2:n) )/sqrt(2);
% fine scale
y(n1+1:n) = ( x(1:2:2*n2) - x(2:2:2*n2) )/sqrt(2);
x = y(1:n1);
else
% coarse scale
y(1:(n-3)/2) = ( x(1:2:n-3) + x(2:2:n-3) )/sqrt(2);
y((n-1)/2) = ( x(n-2) + x(n-1) + x(n) )/sqrt(3);
% fine scale
y(n1:n-1) = ( x(1:2:n-1) - x(2:2:n-1) )/sqrt(2);
y(n) = ( x(n-2) + x(n-1) - 2*x(n) )/sqrt(6);
x = y(1:n1-1);
end
end
return;