function [] = bodeplot( Bcasc, Acasc, Lfft )
%[] = BODEPLOT( Bcasc, Acasc, Lfft )
%BODEPLOT vykreslí amplitúdový (v lineárnych súradniciach) a fázový prenos
%           filtru, ktorý je určený čitateľom a menovateľom prenosu
%Vstupy:    Acasc - jednotlivé sekcie menovateľa prenosu
%           Bcasc - jednotlivé sekcie čitateľa prenosu
%           Lfft - počet bodov vyhodnotenia odozvy
%[1] BLANCHET, Gerard a Maurice CHARBIT. Digital signal and image processing using Matlab. Newport Beach, CA: ISTE, c2006. ISBN 1-905209-13-4.

if nargin < 3
    Lfft = 1024;
end
if nargin < 2
    Acasc = 1; % FIR filter
end

b = size(Bcasc,1);
a = size(Acasc,1);

set(0,'defaulttextinterpreter','Latex');

freq = [0:Lfft-1]/Lfft; % normalizovaná frekvenčná osa
gain = ones(1,Lfft); % amplitúdový prenos
phase = zeros(1,Lfft); % fázový prenos

%% VYPOCET FREKVENCNEJ ODOZVY

% menovateľ a čitateľ prenosu sú rozdelené na súčin koreňových činiteľov,
% preto sa čiastkové amplitúdové prenosy násobia a fázové prenosy sčítajú
% (práca s komplexnými číslami) [1]

for i=1:b 
    Hcasc = fft(Bcasc(i,:),Lfft);       
    gaincasc = abs(Hcasc);
    gain = gain.*gaincasc;
    phase = phase + 180/pi*angle(Hcasc);
end

for i=1:a
    Hcasc = 1./fft(Acasc(i,:),Lfft);
    gaincasc = abs(Hcasc);
    gain = gain.*gaincasc;
    phase = phase + 180/pi*angle(Hcasc);
end

%% VYKRESLENIE

figure('name','Amplitúdový prenos');
plot(freq(1:Lfft/2),gain(1:Lfft/2));
title('Amplit\''udov\''y prenos (linear)');
xlabel('$f$');
ylh = get(gca,'ylabel');
gyl = get(ylh);                                                        
ylp = get(ylh, 'Position');
set(ylh, 'Rotation',0, 'Position',ylp, 'VerticalAlignment','middle', 'HorizontalAlignment','right')
ylabel('$\left|H(f)\right|$');

grid

figure('name','Fázový prenos');
plot(freq(1:Lfft/2),phase(1:Lfft/2));
title('F\''azov\''y prenos');
xlabel('$f$');
ylh = get(gca,'ylabel');
gyl = get(ylh);                                                        
ylp = get(ylh, 'Position');
set(ylh, 'Rotation',0, 'Position',ylp, 'VerticalAlignment','middle', 'HorizontalAlignment','right')
ylabel('$\mbox{Arg}(H(f))$');

grid

end

