% kalmánův filtr:
% SCHÉMA ALGORITMU
%
%                   model
%   hodnota ----------------------> předpověď 
%                                   + měření              model
%                            = korigovaná předpověď ---------------> předpověď 
%                                                                    + měření              model
%                                                             = korigovaná předpověď ---------------> ...
%
%   
%       t=0                           t=1                              t=2                             t=3 
%      =====                         =====                            =====                           =====
% 
%                      model                             model                            model
%   Ta, sigmaTa^2   ---------->   Ta, sigmaTa^2         ------->   Ta, sigmaTa^2         ------->  .....
%                                     +                /                 +              /
%                                 Tb, sigmaTb^2       /            Tb, sigmaTa^2       /
%                                     =              /                   =            /
%                                 Ta, sigmaTa^2 ----               Ta, sigmaTa^2 ----
%
%
% METODY VÝPOČTU V ALGORITMU
%
% chyba předpovědi:   sigmaTa^2(t+1) = alpha^2 * sigmaTa^2(t) + sigmaM^2
% chyba korekce:      sigmaTa^2      = (1-w) * sigmaTb^2
% korekce předpovědi: Ta             = Tb + w * (Ta-Tb),    w = sigmaTb^2 / (sigmaTb^2 + sigmaTa^2)
%
%


%definice modelu
alpha = 1.; %nastavení parametru modelu
beta  = 1.; %nastavení parametru modelu
sM2   = 4.; %nastavení střední kvadratické chyby modelu
Model = @(x) alpha * x + beta; %model


%inicializace proměných
Ta   = zeros(1,6); %předpověď
sTa2 = zeros(1,6); %střední kvadratická chyba předpovědi
Tb   = zeros(1,6); %měření
sTb2 = zeros(1,6); %střední kvadratická chyba měření


%počáteční podmínky
Ta(1)   = 5; %první analýza v čase t=0
sTa2(1) = 2; %a její chyba
Tb(2)   = 6; %měření v čase t=1
sTb2(2) = 5; %a jeho chyba
Tb(3)   = 6; %měření v čase t=2
sTb2(3) = 4; %a jeho chyba


%výpočet
for t = 1:5

   Ta(t+1) = Model( Ta(t) ); %nová předpověď = model( stará předpověď )
   sTa2(t+1) = alpha^2 * sTa2(t) + sM2; %chyba nové předpovědi = konstanta modelu^2 * chyba staré předpovědí + chyba modelu

   %pokud mam naměřená data, tak je použiju k opravě předpovědi, kterou dává model
   if Tb(t+1) > 0
      w         = sTb2(t+1) / (sTb2(t+1) + sTa2(t+1)); %váhy = chyba měření / ( chyba měření + chyba předpovědi )
      Ta(t+1)   = Tb(t+1) + w * (Tb(t+1) - Ta(t+1));   %korigovaná předpověď = měření + váhy * ( měření - předpověď )
      sTa2(t+1) = (1-w) * sTb2(t+1);                   %chyba korigované předpovědi = ( 1 - w ) * chyba měření
   end
end

Ta
sTa2
