⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smoother.m

📁 it is a source code from internet
💻 M
字号:
function smoother(Q,R,b)
%SMOOTHER Scalar steady model.
%   	    Forward filtering and smoothing of an observation series b.
%	       System noise covariance Q, observation noise covariance R.

% The included observation series b represents receiver
% clock offsets (ns) from a steered clock.

%Kai Borre 03-27-97
%Copyright (c) by Kai Borre
%$Revision: 1.0 $  $Date: 1997/09/22  $

global b
e = exist('smoot.eps');
if e ~= 0
   delete smoot.eps
end
e = exist('smootvar.eps');
if e ~= 0
   delete smootvar.eps
end

%b = kalclock('ptb.96o','pta.nav',0);  % Creation of another input set
%b = b*10^9;		 % Conversion of second to nanosecond
if nargin == 2
   b = [...
         -406.05 -331.08 -266.85	 -210.83  -170.77 ...
         -134.14  -96.63  -65.40	  -40.09   -23.08 ...
          -17.42  -17.54  157.41	  331.35   493.32 ...
          642.38  752.80  848.02	  925.23   974.17 ...
          980.48  972.66  929.62	  854.92   734.40 ...
          626.17  541.18  475.70	  421.21   374.44 ...
          322.89  254.76  226.38	  190.00   157.51 ...
          139.05  106.41   75.90	   48.49    17.22 ...
          -19.32  -48.17  -78.52	 -113.18  -145.47 ...
         -170.82 -190.06 -207.77	 -218.61  -226.48 ...
         -237.92 -233.96 -223.53	 -210.70  -196.02 ...
         -186.03 -224.64 -246.42	 -238.71  -193.83 ...
         -172.58 -161.17 -152.88	 -153.72  -156.46 ...
         -164.55 -174.27 -173.64	 -158.99  -152.54 ...
         -145.98 -135.08 -120.72	 -119.30  -112.49 ...
          -88.95  -64.95  -49.72	  -25.61    -0.25];
end

N = size(b,2);
F = 1;
A = 1;
% Initial conditions
x_minus = b(1);
P_minus = 1000;
% Accumulating arrays
x_minus_forw = [];
P_minus_forw = [];
x_plus_forw = [];
P_plus_forw = [];

% Forward Kalman filtering
for i = 0:N-1
   [x_plus, P_plus, K, innovation_var] = ...
                       k_updatx(x_minus, P_minus, A, b(i+1), R, Q);
   x_minus = x_plus;
   P_minus = F*P_plus*F' + Q;
   % Storing
   x_minus_forw = [x_minus_forw x_minus];
   P_minus_forw = [P_minus_forw P_minus];
   x_plus_forw = [x_plus_forw x_plus];
   P_plus_forw = [P_plus_forw P_plus];
   %	  fprintf(' %4g %8.4f %8.4f %8.4f %8.4f %8.4f\n',...
   %		      i, x_plus, P_plus, x_minus, P_minus, b(i+1));
end

% Fixed interval smoothing
x_smoo = zeros(1,N);
P_smoo = zeros(1,N);
% Initial condition  at N for smoothing
P_smoo(N) = P_plus_forw(N);
x_smoo(N) = x_plus_forw(1,N);

% We start the smoothing at k = N-1
for k = N-1:-1:1
   B = P_plus_forw(1,k)*F/P_minus_forw(1,k+1);
   x_smoo(k) = x_plus_forw(k) + B*(x_smoo(k+1) - F*x_minus_forw(k));
   P_smoo(1,k) = P_plus_forw(1,k) + B*(P_smoo(1,k+1) ...
                                          - P_minus_forw(1,k+1))*B';
%   fprintf(' %4g %8.4f %8.4f  %8.4f\n', ...
%                                    k, B, x_smoo(1,k), P_smoo(1,k));
end
t = 0:N-1;

figure;
pl1 = plot(t,b(1:N),'mo', t, x_plus_forw(1:N),'g:', t, x_smoo,'b-');
ylabel('Receiver clock offset [ns]','Fontsize',12)
set(gca,'Fontsize',12);
legend('Observation','Forward state update  ', 'Smoothed estimate  ');
set(pl1,'MarkerSize',6);
set(gca,'Fontsize',12);
legend('Observation','Forward state update  ', 'Smoothed estimate  ');

pause
print smoot -deps
figure;
pl2 = plot(t, P_plus_forw, 'g:', t, P_smoo, 'b-');
ylabel('Error variance of updates','Fontsize',12)
set(gca,'Fontsize',12);
legend('Variance of forward filter ', 'Variance of smoother ');
disp('                           To move the legend, use the mouse.')
disp('                           Anyway press ENTER to continue.')
pause
print smootvar -deps
%%%%%%%% end smoother.m  %%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -