function korelacni_analyza()

%--------------------------------1.krok--------------------------------


clear all;
close all;

format long;

load synch;
load cas;
load dif_sigS0;

% Zavedení NETLAB Toolbox

clc;                                 % smazání okna


% Zobrazení změřeného signálu

figure(1)
title('Add Round Key - prumerovani - Diferencni signal pro prechod stavu 0->1');
plotyy(cas_osa,synch_sig,cas_osa,dif_sigS0)
xlabel ('-> t[s]')
ylabel ('-> U[V]')
legend('Synch_sig','Signál');

% Předloha

%Rozdělení na jednotlivé bity

b0=dif_sigS0(6500:11500,1);
b1=dif_sigS0(11500:16500,1);
b2=dif_sigS0(16500:21500,1);
b3=dif_sigS0(21500:26500,1);
b4=dif_sigS0(26500:31500,1);
b5=dif_sigS0(31500:36500,1);
b6=dif_sigS0(36500:41500,1);
b7=dif_sigS0(41500:46500,1);
b8=dif_sigS0(46500:51500,1);

%Rozdělení na instrukce a zobrazení průběhů

m1=(dif_sigS0(11500:14000,1))';
x1=(dif_sigS0(14000:16500,1))';
figure(2)
subplot(2,1,1)
plot(m1)
hold on
title('Průběh instrukce movf první bit');
subplot(2,1,2)
plot(x1)
hold on
title('Průběh instrukce xorwf první bit');

m2=(dif_sigS0(16500:19000,1))';
x2=(dif_sigS0(19000:21500,1))';
figure(3)
subplot(2,1,1)
plot(m2)
hold on
title('Průběh instrukce movf druhý bit');
subplot(2,1,2)
plot(x2)
hold on
title('Průběh instrukce xorwf druhý bit');


m3=(dif_sigS0(21500:24000,1))';
x3=(dif_sigS0(26500:29000,1))';
figure(4)
subplot(2,1,1)
plot(m3)
hold on
title('Průběh instrukce movf třetí bit');
subplot(2,1,2)
plot(x3)
hold on
title('Průběh instrukce xorwf třetí bit');

m4=(dif_sigS0(29000:31500,1))';
x4=(dif_sigS0(31500:34000,1))';
figure(5)
subplot(2,1,1)
plot(m4)
hold on
title('Průběh instrukce movf čtvrtý bit');
subplot(2,1,2)
plot(x4)
hold on
title('Průběh instrukce xorwf čtvrtý bit');

m5=(dif_sigS0(34000:36500,1))';
x5=(dif_sigS0(36500:39000,1))';
figure(6)
subplot(2,1,1)
plot(m5)
hold on
title('Průběh instrukce movf pátý bit');
subplot(2,1,2)
plot(x5)
hold on
title('Průběh instrukce xorwf pátý bit');

m6=(dif_sigS0(39000:41500,1))';
x6=(dif_sigS0(41500:44000,1))';
figure(7)
subplot(2,1,1)
plot(m6)
hold on
title('Průběh instrukce movf šestý bit');
subplot(2,1,2)
plot(x6)
hold on
title('Průběh instrukce xorwf šestý bit');

m7=(dif_sigS0(44000:46500,1))';
x7=(dif_sigS0(46500:49000,1))';
figure(8)
subplot(2,1,1)
plot(m7)
hold on
title('Průběh instrukce movf sedmý bit');
subplot(2,1,2)
plot(x7)
hold on
title('Průběh instrukce xorwf sedmý bit');

m8=(dif_sigS0(49000:51500,1))';
x8=(dif_sigS0(51500:54000,1))';
figure(9)
subplot(2,1,1)
plot(m8)
hold on
title('Průběh instrukce movf osmý bit');
subplot(2,1,2)
plot(x8)
hold on
title('Průběh instrukce xorwf osmý bit');

% Data určena k rozpoznání

z=x8;
%--------------------------------2.krok--------------------------------
% Výpočet vzájemné korelace

disp('Probíhá výpočet korelace');

[rm1,lags]=xcorr(m1,z, 'coeff');
max(rm1)

[rx1,lags]=xcorr(x1,z, 'coeff');
max(rx1)

[rm2,lags]=xcorr(m2,z, 'coeff');
max(rm2)

[rx2,lags]=xcorr(x2,z, 'coeff');
max(rx2)

[rm3,lags]=xcorr(m3,z, 'coeff');
max(rm3)

[rx3,lags]=xcorr(x3,z, 'coeff');
max(rx3)

[rm4,lags]=xcorr(m4,z, 'coeff');
max(rm4)

[rx4,lags]=xcorr(x4,z, 'coeff');
max(rx4)

[rm5,lags]=xcorr(m5,z, 'coeff');
max(rm5)

[rx5,lags]=xcorr(x5,z, 'coeff');
max(rx5)

[rm6,lags]=xcorr(m6,z, 'coeff');
max(rm6)

[rx6,lags]=xcorr(x6,z, 'coeff');
max(rx6)

[rm7,lags]=xcorr(m7,z, 'coeff');
max(rm7)

[rx7,lags]=xcorr(x7,z, 'coeff');
max(rx7)

[rm8,lags]=xcorr(m8,z, 'coeff');
max(rm8)

[rx8,lags]=xcorr(x8,z, 'coeff');
max(rx8)
%--------------------------------3.krok--------------------------------
% Sezaření výsledků pomocí metody InsertionSort

v =[max(rm1) max(rx1) max(rm2) max(rx2) max(rm3) max(rx3) max(rm4) max(rx4) max(rm5) max(rx5) max(rm6) max(rx6) max(rm7) max(rx7) max(rm8) max(rx8) ]

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(max(rm1) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci mofv první')
end;

if(max(rx1) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci xorf první bit')
end;

if(max(rm2) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci mofv druhý')
end;

if(max(rx2) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci xorf druhý bit')
end;

if(max(rm3) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci mofv třetí')
end;

if(max(rx3) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci xorf třetí bit')
end;

if(max(rm4) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci mofv čtvrtý')
end;

if(max(rx4) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci xorf čtvrtý bit')
end;

if(max(rm5) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci mofv pátý')
end;

if(max(rx5) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci xorf pátý bit')
end;

if(max(rm6) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci mofv šestý')
end;

if(max(rx6) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci xorf šestý bit')
end;

if(max(rm7) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci mofv sedmý')
end;

if(max(rx7) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci xorf sedmý bit')
end;

if(max(rm8) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci mofv osmý')
end;

if(max(rx8) == vy(1,16) ) 
    disp('Zadaná data odpovídají funkci xorf osmý bit')
end;

end

