function [vysledky] = TrenovaniTestovani2(s,s1,c,n,i,K,I)
%s - trenovaci signal
%s1 - testovaci signal
%c - casovy usek rozsekani signalu
%n - inicializacni slovnik 1 = nahodny cisla, 2 = haromnicke
%i - pocet iteraci trenovani
%I - pocet iteraci testovani
%K - pocatecni iterace testovani (musi byt mensi nez I)
if K>I
   K = I-30;
   warning('Pocateni iterace byla nastavena na %d', K)
end
A = cut(s1,c);
[E_Fourier] = test_fourier (s1,c); %Vypocet chyb Fourierova slovniku
param = parametry(s,c,size(E_Fourier,2),n,0,i); %vytvoreni iniciacni struktury pro KSVD
Dmax = param.initdic; %ulozeni iniciacniho slovniku o maximalnim poctu sloupcu
E = zeros (1,I); % prazdny vektor pro ukladani chyb KSVD
E_OMP = zeros (1,I); %Prazdy vektor pro ukladani chyb OMP
E_testself = zeros (1,I);
if I>size(A,2)
   I = size(A,2);
   warning('Maximalni pocet iteraci byl zmenen na %d',I)
end
for k = K:I
        param.initdic =  Dmax(:,1:k);
        param.N = k;
        param.Tdata = k;
        [D,X] = ksvd_upravene(param);       
        E(k) = norm((param.data - (D*X)),'fro');
        E_OMP(k) = norm(A - D*inv(D'*D)*D'*A,'fro');
        E_testself (k) = norm(param.data - D*inv(D'*D)*D'*param.data,'fro');
        if E_OMP(k) < E_Fourier(k)
            disp(sprintf('%d. iterace, K-SVD slovnik je efektivnejsi',k));
        else
            disp(sprintf('%d. iterace, Fourier je efektivnejsi',k));
        end
       

end
x = 1:size(E_Fourier,2);
x1 = 1:size (E_OMP,2);
x2 = 1:size(E_testself,2);
plot (x, E_Fourier, x1, E_OMP,x2,E_testself)
axis ([1 I 1 50])
title('Trenovani a testovani pro baskytaru')
xlabel('Pocet iteraci [-]')
ylabel('Velikost chyby [-]')
legend ('Fourieruv slovnik','Natrenovany slovnik','Testov?n? trenov?n?ho signalu')
vysledky.chyba_ksvd = E;
vysledky.chyba_fourier = E_Fourier;
vysledky.chyba_OMP = E_OMP;
vysledky.D = D;
vysledky.X = X;
vysledky.E_testself = E_testself;
end
    
        



