function x = idtcwt(C, L, F)

% Implementacija inverzne dual-tree kompleksne wavelet transformacije
%
% argumenti:
% 
%  C, L       - vektori dobiveni pomocu dtcwt
%  J          - razina razlaganja
%  F          - matrica filtara:
%  ==                                                   ==
%  | sint. NP filtar na prvoj razini gornjeg sloga       |
%  | sint. VP filtar na prvoj razini gornjeg sloga       |
%  | sint. NP filtar na prvoj razini donjeg sloga        |
%  | sint. VP filtar na prvoj razini donjeg sloga        |
%  | sint. NP filtar na ostalim razinama gornjeg sloga   |
%  | sint. VP filtar na ostalim razinama gornjeg sloga   |
%  | sint. NP filtar na ostalim razinama donjeg sloga    |
%  | sint. VP filtar na ostalim razinama donjeg sloga    |
%  ==                                                   ==
%
%  Ocekuje se da ce filtri biti istih duzina

if length(L) < 3
	disp('Nesto ne stima');
	return;
end


% ako se radi samo o prvoj razini, moze odmah idwt
if length(L) == 3
	xh = idwt(real(C(1:L(1))), real(C(1+L(1):L(1)+L(2))), F(1, :), F(2, :));
	xg = idwt(imag(C(1:L(1))), imag(C(1+L(1):L(1)+L(2))), F(3, :), F(4, :));
	x = 0.5*(xh + xg);
	return
end

% ako ima vise razina
CAh = waverec(real(C), L(1:end-1), F(5, :), F(6, :));
CAg = waverec(imag(C), L(1:end-1), F(7, :), F(8, :));

xh = idwt(CAh, real(C(sum(L(1:end-2))+1:end)), F(1, :), F(2, :));
xg = idwt(CAg, imag(C(sum(L(1:end-2))+1:end)), F(3, :), F(4, :));
x = 0.5*(xh + xg);

