%% PŘIZPŮSOBENÝ FILTR AKTIVAČNÍHO GESTA:
% Skript pro tvorbu přizpůsobeného filtru, který detekuje aktivační gesto pro zapnutí
% ovladače

clear all, close all, clc

%% Nahrání a výběr požadovaných signálů:
signaly = load('mereniNemocnice.mat');
nazvySignalu = fieldnames(signaly);
C2a2PravaNahoru = signaly.C2a2PravaNahoru;
C2b2LevaNahoru = signaly.C2b2LevaNahoru;

%% Část výběru a tvorby imp. charakteristik:
% {
% Úprava raw dat z měřícího přípravku:
[signalR,xR,yR,zR,casR] = upravSignal(C2a2PravaNahoru,1);
[signalL,xL,yL,zL,casL] = upravSignal(C2b2LevaNahoru,1);
%{
% Výběr úseku pro přizpůsobenou filtraci:
pocatekR = 367;                      % hodnota odečtená z vykresleného signálu
konecR = 543;                        % hodnota odečtená z vykresleného signálu
usekFiltruR = yR(pocatekR:konecR);   % gesto se projevuje nejvíce v ose Y

pocatekL = 324;                      
konecL = 538;                        
usekFiltruL = yL(pocatekL:konecL);   

% Tvorba impulzní charakteristiky:
impCharR = fliplr(usekFiltruR);
save('impCharR.mat')
impCharL = fliplr(usekFiltruL);
save('impCharL.mat')
%}

%% Načtení uložených impulzních charakteristik:
load('impCharR.mat');
impCharL = impCharR*(-1);

%% Výpočet korelace s mateřským signálem:
korelaceR = conv(yR,impCharR);
upravaKorelaceR = abs(korelaceR).^2;
pocetPrvkuR = length(yR)+length(impCharR)-1;
rozsahR = -(length(impCharR)-1):(pocetPrvkuR-length(impCharR));

korelaceL = conv(yR,impCharL);
upravaKorelaceL = abs(korelaceL).^2;
pocetPrvkuL = length(yR)+length(impCharL)-1;
rozsahL = -(length(impCharL)-1):(pocetPrvkuL-length(impCharL));

%% Vykreslení přizpůsobené filtrace zdrojových signálů:
figure
subplot 411
plot(rozsahR,korelaceR)
title('Korelační funkce (1. verze gesta)')
xlim([min(rozsahL)-10,max(rozsahL)+10])
xlabel('Index posunu')
ylabel('Amp. kor. fce')

subplot 412
plot(rozsahL,korelaceL)
title('Korelační funkce (2. verze gesta)')
xlim([min(rozsahL)-10,max(rozsahL)+10])
xlabel('Index posunu')
ylabel('Amp. kor. fce')

subplot 413
plot(rozsahR,upravaKorelaceR)
title('Upravená korelační funkce (1. verze gesta)')
xlim([min(rozsahR)-10,max(rozsahR)+10])
xlabel('Index posunu')
ylabel('Amp. kor. fce')

subplot 414
plot(rozsahL,upravaKorelaceL)
title('Upravená korelační funkce (2. verze gesta)')
xlim([min(rozsahL)-10,max(rozsahL)+10])
xlabel('Index posunu')
ylabel('Amp. kor. fce')

%% Vykreslení imp. charakteristik:
figure
subplot 211
plot(impCharR)
title('Impulzní charakteristika (1. verze)')
xlabel('Číslo vzorku')
ylabel('Amplituda')

subplot 212
plot(impCharL)
title('Impulzní charakteristika (2. verze)')
xlabel('Číslo vzorku')
ylabel('Amplituda')

%% Hledání prahu pro zapnutí ovladače:
% Provedení korelací se všemi měřenými signály a následně stanovení prahu

matMaxKor = zeros(length(nazvySignalu),2);
for i = 1:length(nazvySignalu)
    prubeh = nazvySignalu{i,:};
    [aktualSig,x,y,z,cas] = upravSignal(signaly.(prubeh),0);
    korR = conv(y,impCharR);
    upravaKorR = abs(korR).^2;
    korL = conv(y,impCharL);
    upravaKorL = abs(korL).^2;
    matMaxKor(i,:) = [max(upravaKorR),max(upravaKorL)];
end

% Vykreslení maxim upravených korelačních funkcí:
upravMat = rescale(matMaxKor);      % převedení na normalizovaný rozsah 0-1

figure
plot(1:length(matMaxKor),matMaxKor(:,1),'o','MarkerEdgeColor','#A2142F','MarkerFaceColor','#A2142F')
xlabel('Číslo měřeného signálu')
ylabel('Hodnota maxima upravené korelační funkce')

prah = 1.25E7;      % práh určený z grafu korelací