% pozivom funkcije pseudoqmf racuna koeficijente pseudo kvadraturnog
% filtarskog sloga s gotovo potpunom rekonstrukcijom
% M - broj pojaseva razlaganja signala
% N - red filtra

function [signal,rekonstruirani]=poziv

clear all
close all
clc

% unaprijed definirani M i N
M=8;
N=16*M;

% generiranje slucajnog signala
rand('state',sum(100*clock))
signal=-1+2*rand(1,N+1);
figure(1)
hold on
plot(signal)
title('ulazni signal')
grid
hold off

% pozivanje funkcije pseudoqmf koja racuna koeficijente analizirajuceg i
% rekonstrukcijskog sloga
[h,f]=pseudoqmf(M,N);

rastav_i=zeros(M,N+length(signal));
rekonstruirani=zeros(1,2*N+length(signal));

% rastav ulaznog signala po pojasevima
figure(2)
for i=1:M
    rastav(i,:)=conv(signal,h(i,:));
    subplot(8,1,i)
    plot(abs(fft(rastav(i,:))))
            
%     decimacija i interpolacija    
%     % downsample
%     rastav_d(i,:)=rastav(i,1:M:length(rastav));
%     
%     % upsample
%     rastav_i(i,1:M:2*M*16+1)=rastav_d(i,:);
    
    signal_r(i,:)=conv(rastav(i,:),f(i,:));
    
    rekonstruirani=rekonstruirani+signal_r(i,:);    
end

% racunanje frekvencijskih karakteristika izvornog i rekonstruiranog
% signala
[rek,wr]=freqz(rekonstruirani);
[sig,ws]=freqz(signal);
figure(3)
hold on
plot(ws,abs(sig))
plot(wr,abs(rek),'m')
title('spektri: originalni - plavo, rekonstruirani - ruzicasto')
grid
hold off

% racunanje razlike izmedju spektara rekonstruiranog i izvornog signala
razlika=abs(rek)-abs(sig);
figure(4)
plot(wr,razlika)
title('razlika spektara izvornog i rekonstruiranog signala')
grid