function [proudova_regulace,filtry_proudu,rychlostni_regulace,polohova_regulace]=regulaceZ_obou
    %% vstupy
    omP  = 1000;    % [Hz] frekvence pro nahradni prenos proudove smycky
    PWM = 5000;     % [Hz] PWM
    To  = 1/PWM;
    Kp  = 0.7;      % [As/rad] proporcionalni zesileni rychl. reg.
    Tn  = 0.025;    % [s] casova integracni konstanta rychl. reg.
    Kv  = 18;       % [1/s] proporcionalni zesileni pol. reg.
    p=(90/22)/(0.04/2/pi); % [rad/m] Celkový prevod pohonu (p_celk)
    kM=1.5;         % [Nm/A] momentova konstanta motoru
    
    % Filtry
    Aktivni=[0 1 0 0];
    Typ=[1 2 2 2];                  % 1=dolni propust; 2=pasmova zadrz
    char_freq=[400 570 1740 3000];
    sirka=[0.7 300 400 300];        % Pro pasmovou zadrz sirka zadrze
    redukce=[0 0 0 0];
    propad=[-9 -6 -12 0];           % Pro pasmovou zadrz hloubka zadrze
    
    %% sestaveni LTI systemu
    % proudova vazba
    Nahr_proud_vazby=tf(kM,[1/((2*pi*omP)^2) 1.4/(2*pi*omP) 1]); % Nahrada proudove vazby Butterworthovym filtrem 2. radu
    Nahr_zpozdeni=tf([(To^2)/12 -To/2 1],[(To^2)/12 +To/2 1]);   % Padeho rozvoj dopravniho zpozdeni
    proudova_regulace=Nahr_proud_vazby*Nahr_zpozdeni;            % celkovy prenos proudove regulace
   
    % filtry proudu
    filtry_proudu=tf(1);
    for i=1:length(Aktivni)
        if ~Aktivni(i)
            continue;
        end;
        switch Typ(i)
            case 1 % dolni propust
                filtr=tf(1,[1/(2*pi*char_freq(i))^2 2*sirka(i)/(2*pi*char_freq(i)) 1]);
            case 2 % pasmova zadrz
                [numo,deno] = filtr_prop_new(char_freq(i),sirka(i),redukce(i),propad(i));
                filtr=tf(numo,deno);
        end;
        filtry_proudu=filtr*filtry_proudu;
    end;
    
    % rychlostni vazba
    Vregulator=tf([Kp*Tn Kp],[Tn 0]);
    Vrozdil=ss([1 -1]);
    % in: om_zad, om_skut
    % out: I_zad
    rychlostni_regulace=Vregulator*Vrozdil;
    
    % polohova vazba
    Xrozdil=ss([1 -1]);
    Xrozdil.InputName={'x_zad','x_skut'};
    Xrozdil.OutputName={'Delta'};
    
    Xregulator=tf(Kv,1);
    Xregulator.InputName={'Delta'};
    Xregulator.OutputName={'v_zad'};
    
    FFWD=ss([p p;
             p p]);
    FFWD.InputName={'v_zad','v_zadFFWD'};
    FFWD.OutputName={'om_zad1','om_zad2'};
    
    polohova_regulace=connect(Xregulator,Xrozdil,FFWD,...
        {'x_zad','x_skut','v_zadFFWD'},{'Delta','om_zad1','om_zad2'});
end

%%
function [numo,deno] = filtr_prop_new(fz,fbn,red,prop)
    fn=(10^(red/20)*fz^2)^(1/2);
    dz2=2*pi*fbn/2/(2*pi*fn);
    Amp=10^(prop/20);
    A=1/(2*pi*fz)^2;
    C=1/(2*pi*fn)^2;
    Da=(2*dz2)/(2*pi*fn);
    om=fz*2*pi;
    Bav=( ( -A^2+Amp^2*    C^2      )*om^4 ...
         +(2*A  +Amp^2*(-2*C  +Da^2))*om^2 ...
         +       Amp^2 -1)^(1/2)  /om;

    dz1=Bav*(2*pi*fz)/2;
    numo=[1/(2*pi*fz)^2 (2*dz1)/(2*pi*fz) 1];
    deno=[1/(2*pi*fn)^2 (2*dz2)/(2*pi*fn) 1];
end