%% *************************************************************************************************
%  File: coherent_correlation.m
% 
%  Brief: subor obsahuje algoritmus koherentnej korelacie pre detekciu stredu 
%         interferencnych pruzkov
% 
%  Version: 1.0  Revision: 0.0   Name: peter novotny
% 
%  Date: 2011-05-10
%
%  Matlab version: R2009a
% **************************************************************************************************

% clear all; close all; clc;

%% *************************************************************************************************
%  Vytvorenie modelu signalu pre korelaciu - ma rovnaku dlzku(pocet vzoriek) ako originaly signal
%  Pretoze merania su zaznamenavane v [um] budu aj v tomto kode zmenene jednotky z [nm] na [um]
%  I_model_corr - je model signalu vytvoreny z parametrov zdroja svetla
%  model_lambda_source -  stredna vlnova dlzka zdroja svetla v [um], je udavana v posune zrkadla 
%  preto je rovna polovici skutocnej strednej vlnovej dlzky      
%  model_Lc - koherencna dlzka modelu v [um] 
%  model_int - dlzka intervalu modelu v [um]
%  model_step - krok merania v modely [um]
%  model_z - osa z odpovedajuca modelovanemu rozdielu optickych drah
% **************************************************************************************************

model_lambda_source = 0.230;  
model_Lc = 2.5;                   
model_interval = model_Lc + 3;     
model_step = step; 
model_z = -model_interval/2:model_step:model_interval/2; %[nm] os "x" pre model
model_I = exp(-(2*model_z/model_Lc).^2).*cos(2*pi*model_z/model_lambda_source);%*0.5+0.5 ;
model_N = numel(model_I);

% model treba predlzit na dlzku realneho signalu a vycentrovat
% doplnenie nulami
model_I(end+1:N) = 0; 
% posun potrebny na vystredenie modelu
model_posun = round(N/2-model_N/2); 
% vycentrovanie modelu
model_I = circshift(model_I,[0 model_posun]); 

% normaliacia vstupneho signalu (aby sa neporovnavali jednosmerne zlozky)
I_1D_norm = I_1D - mean(I_1D); 

%% *************************************************************************************************
%  Vypocet stredu pruzkov pouzitim korelacie
%  Po korelacii nameraneho a modelovaneho signalu sa najde miesto maximalnej zhody signalov a
%  dopocita sa poloha odpovedajuca tomuto miestu v nameranom signale co odpoveda miestu s OPD=0.
%  convoluion - vektor vyslednej konvolucie 
%  model_corr_center - stred modelovaneho signalu(OPD = 0) potrebny pre vypocet polohy OPD=0 
%                      v nameranom signale.
% **************************************************************************************************

% absolutne hodnota aby sa nasla najlepsia podobnost aj v pripade zapornych hodnot
correlation = xcorr(abs(I_1D_norm), abs(model_I));
% figure, plot(correlation); grid; title('korelacia');

% zistenie maxima korelacnej funkcie
[max_corr_value,max_corr_position] = max(correlation);

% znalost stredu pruzkov v modely
model_corr_center = round(N/2);

% vypocet stredu pruzkov v realnom signale
% najpv sa zisti index, kotremu sa nasledne priradi odpovedajuca hodnota
corr_fringe_center = round(max_corr_position - model_corr_center);
fringe_center = x(corr_fringe_center);

%% *************************************************************************************************
%  Zobrazenie - pouziva sa len pri ladeni
% **************************************************************************************************

% figure;
% subplot(3,1,1), plot(x*2,I_1D), title('Experimentalne zaznamenany (realny) interferogram'), grid
% xlabel('Rozdiel dlzky optickych drah [um]'), ylabel('Intenzita [-]'),
% subplot(3,1,2), plot(x*2,model_I), title('Model interferogramu'), grid
% xlabel('Rozdiel dlzky optickych drah [um]'), ylabel('Intenzita [-]'),
% x1 = [x (x(1:end-1)+x(end))];
% subplot(3,1,3), plot(x1*2,correlation), title('Vysledok vzajomnej korelacie experimentalneho a modelovaneho interferogramu'), grid
% xlabel('Vzajomne posunutie signalov k [um]'), ylabel('Korelacny koeficient[-]'),

% **************************************************************************************************
%  END OF FILE: coherent_correlation.m
% **************************************************************************************************