function EEG_detekce

clear all
close all
clc

% Okno pro grafické rozhraní
Monitor = get(0, 'ScreenSize');
h.fig = figure('Name', 'Detekce grafoelementů', 'Units', 'Pixels', 'Resize', 'off', 'WindowStyle', 'Normal', 'NumberTitle', 'off', 'Position', [0.1*Monitor(3) 0.1*Monitor(4) 0.8*Monitor(3) 0.8*Monitor(4)], 'Color', [0.8 0.8 0.8]);


% Nadpis
h.nadpis = uicontrol('Units', 'Normalized', 'Position', [0.37 0.9 0.26 0.06], 'Style', 'Text', 'String', 'Detekce grafoelementů', 'FontSize', 16, 'FontWeight', 'bold', 'BackgroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'off');

% Menu a popisy
h.popis_grafoelement = uicontrol('Units', 'Normalized', 'Position', [0.05 0.8 0.18 0.04], 'Style', 'Text', 'String', 'Detekovaný grafoelement', 'FontSize', 12, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'off');

h.menu_grafoelement = uicontrol('Units', 'Normalized', 'Position', [0.05 0.75 0.18 0.04], 'Style', 'Popupmenu', 'String', 'Rychlý pohyb očí|Mrknutí|Komplex hrot-vlna|Svalový artefakt|Epileptický hrot', 'FontSize', 11, 'BackGroundColor', 'white', 'CallBack', @fce_vyber, 'HandleVisibility', 'off');

h.popis_pacient = uicontrol('Units', 'Normalized', 'Position', [0.04 0.68 0.18 0.04], 'Style', 'Text', 'String', 'Výběr pacienta', 'FontSize', 12, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'off');

h.menu_pacient = uicontrol('Units', 'Normalized', 'Position', [0.05 0.63 0.18 0.04], 'Style', 'Popupmenu', 'String', 'Pacient 1|Pacient 2|Pacient 3|Pacient 4|Pacient 5', 'FontSize', 11, 'BackGroundColor', 'white', 'HandleVisibility', 'off');

h.popis_elektrody = uicontrol('Units', 'Normalized', 'Position', [0.04 0.56 0.18 0.04], 'Style', 'Text', 'String', 'Vybrané elektrody', 'FontSize', 12, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'off');

h.menu_elektrody = uicontrol('Units', 'Normalized', 'Position', [0.05 0.51 0.18 0.04], 'Style', 'Popupmenu', 'String', 'Fp1-F7|F7-T7|T7-P7|P7-O1|Fp1-F3|F3-C3|C3-P3|P3-O1|Fp2-F4|F4-C4|C4-P4|P4-O2|Fp2-F8|F8-T8|T8-P8|P8-O2|Fz-Cz|Cz-Pz|P7-T7|T7-FT9|FT9-FT10|FT10-T8', 'FontSize', 11, 'BackGroundColor', 'white', 'HandleVisibility', 'off');

% Tlačítko
h.vykreslit = uicontrol('Units', 'Normalized', 'Position', [0.05 0.3 0.18 0.06], 'Style', 'PushButton', 'String', 'Vykreslit', 'FontSize', 12, 'FontWeight', 'bold', 'BackGroundColor', [0.8 0.8 0.8], 'CallBack', @fce_vykreslit, 'HandleVisibility', 'off');

guidata(h.fig, h)

function fce_vyber (handle, eventdata)

h = guidata(handle);

clf

grafoelement = get(h.menu_grafoelement, 'Value');

switch grafoelement
    case 3
        set(h.menu_pacient,'String','Pacient 2','Value',1);
    otherwise
        set(h.menu_pacient,'String','Pacient 1|Pacient 2|Pacient 3|Pacient 4|Pacient 5','Value',1);
end

guidata(h.fig, h)



function fce_vykreslit(handle, eventdata)

h = guidata(handle);

clf

pacient = get(h.menu_pacient, 'Value');
grafoelement = get(h.menu_grafoelement, 'Value');
elektrody = get(h.menu_elektrody, 'Value');

switch grafoelement
    case 1
        load vlna_8.mat
        vlna = vlna_8;
        prah_k = 0.93;
        prah_p = 380000;
        h.nadpis_inf = uicontrol('Units', 'Normalized', 'Position', [0.05 0.19 0.2 0.06], 'Style', 'Text', 'String', 'Informace o detekovaném grafoelementu:', 'FontSize', 10, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'on');
        h.text_inf = uicontrol('Units', 'Normalized', 'Position', [0.05 0.05 0.9 0.13], 'Style', 'Text', 'String', 'Rychlý pohyb očí je typickým projevem REM spánku (rapid eye movement). Detekovatelný ve frontálních elektrodách. Má strmou vzestupnou část a mírnou část sestupnou. Detekce: Pacient 1 - Fp2-F4, F4-C4; Pacient 2 - Fp2-F4, Fp2-F8; Pacient 3 - Fp2-F4, Fp2-F8; Pacient 4 - Fp1-F7, Fp1-F3; Pacient 5 - Fp1-F7, Fp1-F3', 'FontSize', 10, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'on');

        switch pacient
            case 1 
                load pac_1_1.mat
                eeg = EEG_1';
                fvz = 256;
            case 2 
                load pac_2_1.mat
                eeg = EEG_1';
                fvz = 256;
            case 3
                load pac_3_1.mat
                eeg = EEG_1';
                fvz = 256;
            case 4
                load pac_4_1.mat
                eeg = EEG_1';
                fvz = 256;
            case 5
                load pac_5_1.mat
                eeg = EEG_1';
                fvz = 256;
        end
    case 2
        load vlna_1.mat
        vlna = vlna_1;
        prah_k = 0.91;
        prah_p = 400000;
        h.nadpis_inf = uicontrol('Units', 'Normalized', 'Position', [0.05 0.19 0.2 0.06], 'Style', 'Text', 'String', 'Informace o detekovaném grafoelementu:', 'FontSize', 10, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'on');
        h.text_inf = uicontrol('Units', 'Normalized', 'Position', [0.05 0.05 0.9 0.13], 'Style', 'Text', 'String', 'Tento artefakt je způsobený pohybem bulbů při mrknutí. S maximální amplitudou se projevuje ve svodech Fp, s nižší amplitudou ve svodech F. Na rozdíl od rychlého pohybu oka není vzestupná část tak strmá a do sestupné části přechází pozvolna. Detekce: Pacient 1 - Fp1-F7, Fp1-F3, F3-C3, Fp2-F4, F4-C4, Fp2-F8, F8-T8, Fz-Cz; Pacient 2 - Fp1-F7, F7-T7, Fp1-F3, Fp2-F4, Fp2-F8, F8-T8; Pacient 3 - Fp1-F7, F7-T7, Fp1-F3, F3-C3, Fp2-F4, F4-C4, Fp2-F8, F8-T8, FT9-FT10, FT10-T8; Pacient 4 - Fp1-F7, F7-T7, Fp1-F3, Fp2-F4, Fp2-F8, F8-T8; Pacient 5 - Fp1-F7, Fp1-F3, Fp2-F4, Fp2-F8,', 'FontSize', 10, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'on');

        switch pacient
            case 1
                load pac_1_2.mat
                eeg = EEG_2';
                fvz = 256;
            case 2
                load pac_2_2.mat
                eeg = EEG_2';
                fvz = 256;
            case 3
                load pac_3_2.mat
                eeg = EEG_2';
                fvz = 256;
            case 4
                load pac_4_2.mat
                eeg = EEG_2';
                fvz = 256;
            case 5
                load pac_5_2.mat
                eeg = EEG_2';
                fvz = 256;
        end
    case 3 
        load vlna_14.mat
        vlna = vlna_14;
        prah_k = 0.85;
        prah_p = 600000;
        h.nadpis_inf = uicontrol('Units', 'Normalized', 'Position', [0.05 0.19 0.2 0.06], 'Style', 'Text', 'String', 'Informace o detekovaném grafoelementu:', 'FontSize', 10, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'on');
        h.text_inf = uicontrol('Units', 'Normalized', 'Position', [0.05 0.05 0.9 0.13], 'Style', 'Text', 'String', 'Komplex hrot a vlna řadíme mezi generalizované epileptiformní vzorce. Komplexy se vyskytují opakovaně v sériích, nikoliv izolovaně. Na začátku výboje se často vyskytují asymetricky. Jsou příznakem epilepsie. Komplexy se neprojevují ve všech svodech. Detekce: Pacient 3 - F7-T7', 'FontSize', 10, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'on');

        switch pacient
            case 1
                load pac_2_3.mat
                eeg = EEG_3';
                fvz = 256;
        end
    case 4
        load vlna_23.mat
        vlna = vlna_23;
        prah_k = 0.35;
        prah_p = 50000;
        h.nadpis_inf = uicontrol('Units', 'Normalized', 'Position', [0.05 0.19 0.2 0.06], 'Style', 'Text', 'String', 'Informace o detekovaném grafoelementu:', 'FontSize', 10, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'on');
        h.text_inf = uicontrol('Units', 'Normalized', 'Position', [0.05 0.05 0.9 0.13], 'Style', 'Text', 'String', 'Svalový artefakt, který detekujeme, vzniká při žvýkání a polykání a jeho maximu je tedy v F a T svodech. Jde o směs hrotitých artefaktů, která zcela zakrývá EEG křivku. Detekce: u všech pacientů svody, Fp, F, T ', 'FontSize', 10, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'on');

        switch pacient
            case 1
                load pac_1_4.mat
                eeg = EEG_4';
                fvz = 256;
            case 2
                load pac_2_4.mat
                eeg = EEG_4';
                fvz = 256;
            case 3
                load pac_3_4.mat
                eeg = EEG_4';
                fvz = 256;
            case 4
                load pac_4_4.mat
                eeg = EEG_4';
                fvz = 256;
            case 5
                load pac_5_4.mat
                eeg = EEG_4';
                fvz = 256;
        end
    case 5
        load vlna_24.mat
        vlna = vlna_24;
        prah_k = 0.89;
        prah_p = 80000;
        h.nadpis_inf = uicontrol('Units', 'Normalized', 'Position', [0.05 0.19 0.2 0.06], 'Style', 'Text', 'String', 'Informace o detekovaném grafoelementu:', 'FontSize', 10, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'on');
        h.text_inf = uicontrol('Units', 'Normalized', 'Position', [0.05 0.05 0.9 0.13], 'Style', 'Text', 'String', 'Detekovaný epileptický hrot výrazně vystupuje ze základní aktivity, a většinou se hroty, ze svodů umístěných nad sebou, překrývají. Tyto hroty jsou v 98 % příznakem epilepsie, ale v 1 – 2 % je nalezneme i v EEG záznamu zdravého jedince. Detekce: Pacient 1 - T7-P7, P7-O1, P7-T7; Pacient 2 - C3-P3, P3-O1, T7-FT9; Pacient 3 - Fp1-F3, F3-C3, C3-P3, P3-O1, F4-C4, Fz-Cz; Pacient 4 - C3-P3, P3-O1, P4-O2, P8-O2, T7-FT9; Pacient 5 - Fp1-F7, F7-T7, Fp1-F3, C3-P3, T7-FT9, FT9-FT10', 'FontSize', 10, 'BackGroundColor', [0.8 0.8 0.8], 'HandleVisibility', 'on');

        switch pacient
            case 1
                load pac_1_5.mat
                eeg = EEG_5';
                fvz = 256;
            case 2
                load pac_2_5.mat
                eeg = EEG_5';
                fvz = 256;
            case 3
                load pac_3_5.mat
                eeg = EEG_5';
                fvz = 256;
            case 4
                load pac_4_5.mat
                eeg = EEG_5';
                fvz = 256;
            case 5
                load pac_5_5.mat
                eeg = EEG_5';
                fvz = 256;
        end
end

switch elektrody
    case 1
        eeg = eeg(:, 1);
    case 2
        eeg = eeg(:, 2);
    case 3
        eeg = eeg(:, 3);
    case 4
        eeg = eeg(:, 4);
    case 5
        eeg = eeg(:, 5);
    case 6
        eeg = eeg(:, 6);
    case 7
        eeg = eeg(:, 7);
    case 8
        eeg = eeg(:, 8);
    case 9
        eeg = eeg(:, 9);
    case 10
        eeg = eeg(:, 10);
    case 11
        eeg = eeg(:, 11);
    case 12
        eeg = eeg(:, 12);
    case 13
        eeg = eeg(:, 13);
    case 14
        eeg = eeg(:, 14);
    case 15
        eeg = eeg(:, 15);
    case 16
        eeg = eeg(:, 16);
    case 17
        eeg = eeg(:, 17);
    case 18
        eeg = eeg(:, 18);
    case 19
        eeg = eeg(:, 19);
    case 20
        eeg = eeg(:, 20);
    case 21
        eeg = eeg(:, 21);
    case 22
        eeg = eeg(:, 22);        
end


% Korelační analýza

[t, A, C_k, B_k] = korelace(eeg, fvz, vlna, prah_k);
C_kt = C_k';
C_kt = C_kt/fvz;

% Příprava grafu
h.graf_kor = axes('Units', 'Normalized', 'Position', [0.3 0.7 0.6 0.12], 'Visible', 'on', 'HandleVisibility', 'on');

% Vykreslení
figure(h.fig);
subplot(h.graf_kor);
plot(t, A);
hold on;
grid on;
plot(C_kt, B_k, 'g');                    % barevné zobrazení detekce grafoelementů
axis([0, 5, -300, 370])
title('Korelační analýza')
xlabel('Čas [s]')
ylabel('U [uV]')
hold off


% Přizpůsobený filtr

[t, A, C_p, B_p] = prizp_filtr(eeg, fvz, vlna, prah_p);
C_pt = C_p';
C_pt = C_pt/fvz;

% Příprava grafu
h.graf_prizp = axes('Units', 'Normalized', 'Position', [0.3 0.48 0.6 0.12], 'Visible', 'on', 'HandleVisibility', 'on');

% Vykreslení
figure(h.fig);
subplot(h.graf_prizp);
plot(t, A);
hold on;
grid on;
plot(C_pt, B_p, 'g');                    % barevné zobrazení detekce grafoelementů
axis([0, 5, -300, 370])
title('Přizpůsobený filtr')
xlabel('Čas [s]')
ylabel('U [uV]')
hold off


% Kombinovaný detektor

[t, A, C_s, B_s] = komb(eeg, fvz, vlna, C_k, C_p);
C_st = C_s';
C_st = C_st/fvz;

% Příprava grafu
h.graf_komb = axes('Units', 'Normalized', 'Position', [0.3 0.26 0.6 0.12], 'Visible', 'on', 'HandleVisibility', 'on');

% Vykreslení
figure(h.fig);
subplot(h.graf_komb);
plot(t, A);
hold on;
grid on;
plot(C_st, B_s, 'g');                    % barevné zobrazení detekce grafoelementů
axis([0, 5, -300, 370])
title('Kombinovaný detektor')
xlabel('Čas [s]')
ylabel('U [uV]')
hold off


        
        

