JackXavier added verb_x_t_u_t__.tex  almost 8 years ago

Commit id: 575b214e92c57eceb1b5104c52c550876efed2a5

deletions | additions      

         

\verb|% x(t) = u*t + a*x(t-1) + v_t   % y(t) = b*x(t-1) + e_t  %  % количество шагов  Quantity = 20;  % инициализируем массивы  k = 1:Quantity;  % координата  x = k;  % предсказанная координата  x_predic = k;  % оценочная координата  x_estim = k;  % наблюдаемая координата  y = k;  % предсказанное наблюдение  y_predic = k;  % дисперсия ошибки в предсказании X в  Sn = k;  % усиление калмана  KalmanGain = k;  % оценка дисперсии  EstimVar = k;  % предсказанная дисперсия  PredicVar = k;  %константы  % коэффииент координаты  a = 0.26;  % коэффициент наблюдения  b = 0.72;  % коэффициент при упраляющей функции  ControlF = 0.8;  % дисперсия ошибки модели  disp_ErrorModel = 0.2;  % дисперися ошибки сенсора  disp_ErrorSensor = 5;  % ошибка модели  ErrorModel = normrnd(0,disp_ErrorModel);   % ошибка сенсора  ErrorSensor = normcdf(0,disp_ErrorSensor);   % заполняем координаты  x(1) = 0;  y(1) = b*x(1) + ErrorSensor;  for time = 1 : (Quantity-1)  ErrorModel = normrnd(0,disp_ErrorModel);  ErrorSensor = normrnd(0,disp_ErrorSensor);  x(time+1) = a*x(time) + ControlF*time + ErrorModel;  y(time+1) = b*x(time+1) + ErrorSensor;  end;  % в момент t = 1;  Sn(1) = 1;  PredicVar(1) = 1;  x_predic(1) = 0;  y_predic(1) = 0;  % симуляция фильтра  for time = 1 : (Quantity-1)  disp(time);  KalmanGain(time) = (b*Sn(time))/((b*b*Sn(time)) + disp_ErrorModel);  disp(KalmanGain(time));  EstimVar(time) = (1 - b*KalmanGain(time))*Sn(time);  disp(EstimVar(time));  PredicVar(time+1) = EstimVar(time) * a * a + disp_ErrorSensor;  disp(PredicVar(time));  Sn(time+1) = a*a*EstimVar(time) + disp_ErrorSensor;   end;  % заполняем координаты  for time = 1 : (Quantity-1)  disp(time);  x_estim(time) = x_predic(time) + KalmanGain(time)*(y(time)-y_predic(time));  disp( x_estim(time));  x_predic(time+1) = (ControlF*time) + a*x_estim(time);  disp( x_predic(time));  y_predic(time+1) = b*x_predic(time+1);  end;  set(0,'DefaultAxesFontSize',14,'DefaultAxesFontName','Times New Roman');  set(0,'DefaultTextFontSize',14,'DefaultTextFontName','Times New Roman');   figure('Units', 'normalized', 'OuterPosition', [0 0 1 1]);  title('Одномерный фильтр Калмана');  hold on;  plot(k,x,'r','Color',[.7 .1 .1],'LineWidth',2);  plot(k,y,'--','Color',[.1 .7 .1],'LineWidth',2);  plot(k,x_predic,'r','Color',[.1 .1 .7],'LineWidth',2);  plot(k,x_estim,':b','Color',[.7 .1 .7],'LineWidth',2);  legend('координата','наблюдение','предсказание','оценка', 4);  hold off;|