function klasifikator()


% Zavedení NETLAB Toolbox

clc;                                 % smazání okna
addpath('NETLAB');                   % cesta ke knihovně NETLAB

clear all;
close all;

format long e;

cyklus=load('Cyklus.csv');
figure(1);
plot(cyklus(10001:55000,3))
title('\bfCyklus zkoumání instrukce - EM signál','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)

EMSig = (cyklus(1:end,3));
Cas = (cyklus(1:end,1));

% Předloha

%===================================%
%Instrukce ADDWF%
%===================================%
figure(2)
ADDWF = (EMSig(10001:12500))';
plot (ADDWF)
title('\bfInstrukce ADDWF','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)

%===================================%
%Instrukce XORWF%
%===================================%
figure(3);
XORWF = (EMSig(12501:15000))';
plot (XORWF)
title('\bfInstrukce XORWF','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)

%===================================%
%Instrukce MOVF%
%===================================%
figure(5);
MOVF = (EMSig(20001:22500))';
plot (MOVF)
title('\bfInstrukce MOVF','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)

%===================================%
%Instrukce MOVWF%
%===================================%
figure(6);
MOVWF = (EMSig(22501:25000))';
plot (MOVWF)
title('\bfInstrukce MOVWF','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)

%===================================%
%Instrukce DECFSZ%
%===================================%
figure(7);
DECFSZ = (EMSig(25001:27500))';
plot (DECFSZ)
title('\bfInstrukce DECFSZ','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)

%===================================%
%Instrukce NOP%
%===================================%
figure(8);
NOP = (EMSig(27501:30000))';
plot (NOP)
title('\bfInstrukce NOP','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)

%===================================%
%Instrukce INCFSZ%
%===================================%
figure(9);
INCFSZ = (EMSig(30001:32500))';
plot (INCFSZ)
title('\bfInstrukce INCFSZ','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)

%===================================%
%Instrukce NOP(2)%
%===================================%
figure(10);
NOP2 = (EMSig(32501:35000))';
plot (NOP2)
title('\bfInstrukce NOP(2)','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)

%===================================%
%Instrukce INCF%
%===================================%
figure(12);
INCF = (EMSig(40001:42500))';
plot (INCF)
title('\bfInstrukce INCF','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)

%===================================%
%Instrukce DECF%
%===================================%
figure(13);
DECF = (EMSig(42501:45000))';
plot (DECF)
title('\bfInstrukce DECF','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)

%===================================%
%Instrukce BCF%
%===================================%
figure(14);
BCF = (EMSig(45001:47500))';
plot (BCF)
title('\bfInstrukce BCF','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)


%===================================%
%Instrukce BSF%
%===================================%
figure(16);
BSF = (EMSig(52501:55000))';
plot (BSF)
title('\bfInstrukce BSF','FontSize',16)
xlabel ('\rightarrow  n[-]','FontSize',12)
ylabel ('\rightarrow  U[V]','FontSize',12)

z=BSF;
%--------------------------------2.krok--------------------------------
% Nastaveni dat

disp('Probíhá nastavování dat pro neuronovou sí');

data = [ADDWF; XORWF; MOVF; MOVWF; DECFSZ; NOP; INCFSZ; NOP2; INCF; DECF; BCF; BSF;]; %Celková data pro trénink neuronové sítě

class1 = [ones(1,length(ADDWF)) zeros(1, length (XORWF)) zeros(1,length(MOVF)) zeros(1,length(MOVWF)) zeros(1, length (DECFSZ)) zeros(1,length(NOP)) zeros(1, length (INCFSZ)) zeros(1,length(NOP2)) zeros(1, length (INCF)) zeros(1,length(DECF)) zeros(1, length (BCF)) zeros(1, length (BSF)) ];
class2 = [zeros(1,length(ADDWF)) ones(1, length (XORWF)) zeros(1,length(MOVF)) zeros(1,length(MOVWF)) zeros(1, length (DECFSZ)) zeros(1,length(NOP)) zeros(1, length (INCFSZ)) zeros(1,length(NOP2)) zeros(1, length (INCF)) zeros(1,length(DECF)) zeros(1, length (BCF)) zeros(1, length (BSF)) ];
class3 = [zeros(1,length(ADDWF)) zeros(1, length (XORWF)) ones(1,length(MOVF)) zeros(1,length(MOVWF)) zeros(1, length (DECFSZ)) zeros(1,length(NOP)) zeros(1, length (INCFSZ)) zeros(1,length(NOP2)) zeros(1, length (INCF)) zeros(1,length(DECF)) zeros(1, length (BCF)) zeros(1, length (BSF)) ];
class4 = [zeros(1,length(ADDWF)) zeros(1, length (XORWF)) zeros(1,length(MOVF)) ones(1,length(MOVWF)) zeros(1, length (DECFSZ)) zeros(1,length(NOP)) zeros(1, length (INCFSZ)) zeros(1,length(NOP2)) zeros(1, length (INCF)) zeros(1,length(DECF)) zeros(1, length (BCF)) zeros(1, length (BSF)) ];
class5 = [zeros(1,length(ADDWF)) zeros(1, length (XORWF)) zeros(1,length(MOVF)) zeros(1,length(MOVWF)) ones(1, length (DECFSZ)) zeros(1,length(NOP)) zeros(1, length (INCFSZ)) zeros(1,length(NOP2)) zeros(1, length (INCF)) zeros(1,length(DECF)) zeros(1, length (BCF)) zeros(1, length (BSF)) ];
class6 = [zeros(1,length(ADDWF)) zeros(1, length (XORWF)) zeros(1,length(MOVF)) zeros(1,length(MOVWF)) zeros(1, length (DECFSZ)) ones(1,length(NOP)) zeros(1, length (INCFSZ)) zeros(1,length(NOP2)) zeros(1, length (INCF)) zeros(1,length(DECF)) zeros(1, length (BCF)) zeros(1, length (BSF)) ];
class7 = [zeros(1,length(ADDWF)) zeros(1, length (XORWF)) zeros(1,length(MOVF)) zeros(1,length(MOVWF)) zeros(1, length (DECFSZ)) zeros(1,length(NOP)) ones(1, length (INCFSZ)) zeros(1,length(NOP2)) zeros(1, length (INCF)) zeros(1,length(DECF)) zeros(1, length (BCF)) zeros(1, length (BSF)) ];
class8 = [zeros(1,length(ADDWF)) zeros(1, length (XORWF)) zeros(1,length(MOVF)) zeros(1,length(MOVWF)) zeros(1, length (DECFSZ)) zeros(1,length(NOP)) zeros(1, length (INCFSZ)) ones(1,length(NOP2)) zeros(1, length (INCF)) zeros(1,length(DECF)) zeros(1, length (BCF)) zeros(1, length (BSF)) ];
class9 = [zeros(1,length(ADDWF)) zeros(1, length (XORWF)) zeros(1,length(MOVF)) zeros(1,length(MOVWF)) zeros(1, length (DECFSZ)) zeros(1,length(NOP)) zeros(1, length (INCFSZ)) zeros(1,length(NOP2)) ones(1, length (INCF)) zeros(1,length(DECF)) zeros(1, length (BCF)) zeros(1, length (BSF)) ];
class10 = [zeros(1,length(ADDWF)) zeros(1, length (XORWF)) zeros(1,length(MOVF)) zeros(1,length(MOVWF)) zeros(1, length (DECFSZ)) zeros(1,length(NOP)) zeros(1, length (INCFSZ)) zeros(1,length(NOP2)) zeros(1, length (INCF)) ones(1,length(DECF)) zeros(1, length (BCF)) zeros(1, length (BSF)) ];
class11 = [zeros(1,length(ADDWF)) zeros(1, length (XORWF)) zeros(1,length(MOVF)) zeros(1,length(MOVWF)) zeros(1, length (DECFSZ)) zeros(1,length(NOP)) zeros(1, length (INCFSZ)) zeros(1,length(NOP2)) zeros(1, length (INCF)) zeros(1,length(DECF)) ones(1, length (BCF))  zeros(1, length (BSF)) ];
class12 = [zeros(1,length(ADDWF)) zeros(1, length (XORWF)) zeros(1,length(MOVF)) zeros(1,length(MOVWF)) zeros(1, length (DECFSZ)) zeros(1,length(NOP)) zeros(1, length (INCFSZ)) zeros(1,length(NOP2)) zeros(1, length (INCF)) zeros(1,length(DECF)) zeros(1, length (BCF)) ones(1, length (BSF)) ];


class = [class1; class2; class3; class4; class5; class6; class7; class8; class9; class10; class11; class12]; % vzor pro klasifikaci


% Vytvoření neuronové sítě a trénování

disp('Probíhá vytvoření neuronové sítě');

nn = mlp(2500, 13 ,30000, 'logistic');   % parametry sítě, tvar aktivační funkce

% Nastavení konfigurace sitě

disp('Probíha nastavení parametrů sítě (počet trénovacích cyklů)');

options = zeros(1,18);           	% pole options naplněno nulovými hodnotami
options(1) = 1;                 	% výpis chyby během učení
options(14) = 500;               	% počet trénovacích cyklů


[nn, options] = netopt(nn, options, data, class, 'scg');

%--------------------------------3.krok-------------------------------

save nn nn;
%load nn nn;

% Rozpoznování dat

disp('Probíhá rozpoznávaní dat neuronovou síí pro zadaný vzorek');

res = mlpfwd(nn, z);		% sputění klasifikace, jako druhý parametr mplfwed se zadává vzorek k rozpoznání
%
%--------------------------------4.krok-------------------------------


% Zobrazení výsledků

disp('Probíhá zpracování výsledků z neuronové sítě');

resADDWF = res(1:2500)  ;          	%rozdělení výstupní hodnoty pro výpočet a grafické zpracování
resXORWF = res(2500:5000);      	
resMOVF = res(5000:7500); 
resMOVWF = res(7500:10000) ;         	
resDECFSZ = res(10000:12500)  ;
resNOP = res(12500:15000) ;         	
resINCFSZ = res(15000:17500) ;
resNOP2 = res(17500:20000) ;         	
resINCF = res(20000:22500);
resDECF = res(22500:25000) ;          	
resBCF = res(25000:27500);       	
resBSF = res(27500:30000);



oresADDWF = 0;
oresXORWF = 0;       	
oresMOVF = 0;
oresMOVWF = 0;        	
oresDECFSZ = 0;
oresNOP = 0;        	
oresINCFSZ = 0;
oresNOP2 = 0;        	
oresINCF = 0;
oresDECF = 0;         	
oresBCF = 0;         	
oresBSF = 0; 

 

for i=1:2500,
    oresADDWF=oresADDWF+resADDWF(i);
end

for i=1:2500,
    oresXORWF=oresXORWF+resXORWF(i);
end



for i=1:2500,
    oresMOVF=oresMOVF+resMOVF(i);
end

for i=1:2500,
    oresMOVWF=oresMOVWF+resMOVWF(i);
end

for i=1:2500,
    oresDECFSZ=oresDECFSZ+resDECFSZ(i);
end

for i=1:2500,
    oresNOP=oresNOP+resNOP(i);
end

for i=1:2500,
    oresINCFSZ=oresINCFSZ+resINCFSZ(i);
end

for i=1:2500,
    oresNOP2=oresNOP2+resNOP2(i);
end

for i=1:2500,
    oresINCF=oresINCF+resINCF(i);
end

for i=1:2500,
    oresDECF=oresDECF+resDECF(i);
end

for i=1:2500,
    oresBCF=oresBCF+resBCF(i);
end


for i=1:2500,
    oresBSF=oresBSF+resBSF(i);
end



fprintf('\n');
disp('Výsledek: ');

oresADDWF =(oresADDWF/2500)*100;
oresXORWF =(oresXORWF/2500)*100;


oresMOVF =(oresMOVF/2500)*100;

oresMOVWF =(oresMOVWF/2500)*100;
oresDECFSZ =(oresDECFSZ/2500)*100;

oresNOP =(oresNOP/2500)*100;
oresINCFSZ =(oresINCFSZ/2500)*100;

oresNOP2 =(oresNOP2/2500)*100;
oresINCF =(oresINCF/2500)*100;

oresDECF =(oresDECF/2500)*100;
oresBCF =(oresBCF/2500)*100;


oresBSF =(oresBSF/2500)*100;


% Sezaření výsledků pomocí metody InsertionSort

v =[oresADDWF oresXORWF oresMOVF oresMOVWF oresDECFSZ oresNOP oresINCFSZ oresNOP2 oresINCF oresDECF oresBCF oresBSF ];

ArrayOfRandomNumbers=v;
Sequence=ArrayOfRandomNumbers;
Sequence1=Sequence;
for counter=1:1:length(Sequence)-1
    for counter1=counter:-1:1
        if (Sequence(counter1+1)<Sequence(counter1))
            Sequence1(counter1)=Sequence(counter1+1);
            Sequence1(counter1+1)=Sequence(counter1);
            Sequence=Sequence1;
        end
    end
end
vy=Sequence1

% Výpis výsledku



if(oresMOVF == vy(1,12) ) 
    disp('Zadaná data odpovídají oresMOVF')
end;

if(oresMOVWF == vy(1,12) ) 
    disp('Zadaná data odpovídají oresMOVWF')
end;

if(oresDECFSZ == vy(1,12) ) 
    disp('Zadaná data odpovídají funkci oresDECFSZ')
end;

if(oresNOP == vy(1,12) ) 
    disp('Zadaná data odpovídají oresNOP')
end;

if(oresINCFSZ == vy(1,12) ) 
    disp('Zadaná data odpovídají oresINCFSZ')
end;

if(oresNOP2 == vy(1,12) ) 
    disp('Zadaná data odpovídají oresNOP2')
end;

if(oresINCF == vy(1,12) ) 
    disp('Zadaná data odpovídají oresINCF')
end;

if(oresDECF == vy(1,12) ) 
    disp('Zadaná data odpovídají oresDECF')
end;

if(oresBCF == vy(1,12) ) 
    disp('Zadaná data odpovídají oresBCF')
end;



if(oresBSF == vy(1,12) ) 
    disp('Zadaná data odpovídají oresBSF')
end;

if(oresADDWF == vy(1,12) ) 
    disp('Zadaná data odpovídají oresADDWF')
end;

if(oresXORWF == vy(1,12) ) 
    disp('Zadaná data odpovídají oresXORWF')
end;

end



