3d 三维位置的Matlab卡尔曼滤波

3d 三维位置的Matlab卡尔曼滤波,3d,kalman-filter,3d,Kalman Filter,我正在尝试使用卡尔曼滤波器寻找三维位置。如果有人能帮助我如何将我的一维代码修改为三维,那将是一件非常好的事情。我对这个滤波器感到困惑 i = 100; % time points s=[i, 1]; % size r=22; % actual value Q=4e-5; % variance R=0.23; % measurement variance m = r + sqrt(R)*randn(s); % measured value v_est=zeros(s); % es

我正在尝试使用卡尔曼滤波器寻找三维位置。如果有人能帮助我如何将我的一维代码修改为三维,那将是一件非常好的事情。我对这个滤波器感到困惑

i = 100; % time points  
s=[i, 1]; % size
r=22; % actual value  
Q=4e-5; %  variance 
R=0.23; % measurement variance  
m = r + sqrt(R)*randn(s); % measured value 
v_est=zeros(s); % estimated variace :taken after measurment 
x_hat_minus=zeros(s); %estimation before measurment at n-1 step 
v_minus_est=zeros(s); % variance estimated before measurments 
K=zeros(s); % Kalman factor 
x_hat(1) = 21.5; % estimation starts at this value       
v_est(1) =1; % error in variance  
 for n = 2:i    
% step:1 time update 
x_hat_minus(n) = x_hat(n-1); %estimating the current value based on previous    estimations       
v_minus_est(n) = v_est(n-1)+Q; %variance prediction
% step 2: Measurement Update 
K(n) = v_minus_est(n)/( v_minus_est(n)+R ); %calculating kalman factor
x_hat(n) = x_hat_minus(n)+K(n)*(m(n)-x_hat_minus(n)); %estimation    
v_est(n) = (1-K(n))*v_minus_est(n); %variance achieved in last estimation 
end

我还没有完全阅读您的代码(大约一年没有使用matlab),但您似乎只实现了一阶Kalman滤波器(?),我相信,一旦增益稳定下来,它就是一个简单的IIR滤波器

无论如何

回答您的问题:只需实现3个卡尔曼滤波器,每个轴一个XYZ

因为它们是正交的,所以彼此独立,生活在自己的小宇宙中

假设为单阶,如果您愿意,您可以构建一个3x3状态矩阵,但是使用3个1x1(或者更好的是,如果您还没有创建3个二阶2x2)更透明