卡尔曼滤波matlab_汽车毫米波雷达距离测量中的一种扩展卡尔曼滤波实现

本文详细描述了卡尔曼滤波器在汽车毫米波距离测量应用中的工作原理,详细介绍了卡尔曼的工作原理,实际测量中的噪声来源,并在搭建好模型后运用MATLAB分析验证了模型的有效性。

毫米波雷达对待测目标进行间隔时间为T的一系列测量,获得距离,速度和角度信息,这些测量信息中因为包含测量噪声,所以我们不能完全采信这些测量结果。同时,我们假设待测目标按照匀加速度模型进行运动,那么当前状态下的待测目标距离可以按照待测目标上一状态的距离,速度信息依据牛顿线性模型计算得出,但是这种牛顿线性理想模型未能考虑其他能破坏模型的外力作用,比如待测目标的动力输出不可能是恒定不变的,地面阻力以及风的阻力也不是恒定不变的,因此按照牛顿线性模型推算的结果是缺损的,未能考虑其他外力作用。卡尔曼滤波器可以很好的平衡含冗余噪声的测量结果和缺少信息的过于理想的计算结果,并实现对待测目标的准确跟踪。

1、卡尔曼滤波介绍

卡尔曼早期最成功的应用案例是在阿波罗登月计划中成功解决了轨道预测问题。由于卡尔曼滤波是一种时域滤波方法,其算法采用递归形式,便于在计算机上实现,目前,卡尔曼滤波被广泛应用在惯性制导,地图导航,雷达测量等各个领域。总结起来,卡尔曼能解决的问题特征为:一是不能对待测目标进行准确建模,外力作用不稳定,但是掌握外力作用效果的统计值;二是虽然可进行一系列的测量,但是测量结果因含有噪声而不能完全采信。

毫米波雷达测量示意图如图1所示,假设雷达的测量周期T,时刻nT的测量向量记为u(n),

d1d849cfb484482a629e9f9b978a01f1.png    (1)

r(n)代表目标相对于雷达的径向距离,φ(n)代表目标相对于雷达角度,263a95c757caf3b553af4707f0eb79a2.png代表目标相对于雷达径向速度。由于毫米波雷达测量得到的距离速度等信息都是径向的,因此测量向量u(n)是在极坐标系下获得的。

2d5d505320798f992e2fba1106d7631d.png

图1、雷达目标测量示意图

但是为了便于利用简单的牛顿线性预测模型对目标进行跟踪,也即对待测目标连续两次时间间隔为T的两个状态进行关联,我们需要获得笛卡尔坐标系下待测目标的距离,速度等信息。由于测量是在极坐标系中而状态跟踪是在笛卡尔坐标系,因此需要进行坐标系转换。由于这种坐标系的转换是非线性的,因此需要使用扩展卡尔曼滤波器。      

假设笛卡尔坐标系下待测目标在时刻nT的状态向量记为S(n):

fee18a12bb9318f06d966d5e65d5f1f2.png    (2)

其中x(n),

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卡尔曼滤波(Kalman Filter)是一种用于估计系统状态的递归滤波器,它通过融合系统的测量值和预测值来提供最优的状态估计。卡尔曼滤波器假设系统的状态和测量值都是高斯分布,并且系统的动态和测量模型都是线性的。 扩展卡尔曼滤波(Extended Kalman Filter,EKF)是卡尔曼滤波一种扩展,用于处理非线性系统。EKF通过在每个时间步骤上线性化非线性模型来近似系统的动态和测量模型,然后使用卡尔曼滤波的方法进行状态估计。 无损卡尔曼滤波(Unscented Kalman Filter,UKF)是对EKF的一种改进,它通过使用无损变换(unscented transformation)来近似非线性函数的传播和观测模型。相比于EKF,UKF能够更准确地估计非线性系统的状态。 下面是使用Matlab实现卡尔曼滤波扩展卡尔曼滤波和无损卡尔曼滤波的简单示例代码: 1. 卡尔曼滤波: ```matlab % 系统动态模型 A = [1 1; 0 1]; B = [0.5; 1]; C = [1 0]; D = 0; % 系统噪声和测量噪声的协方差矩阵 Q = [0.01 0; 0 0.01]; R = 1; % 初始化状态和协方差矩阵 x0 = [0; 0]; P0 = eye(2); % 测量值 y = [1.2; 2.3; 3.5; 4.7]; % 卡尔曼滤波 x_kalman = zeros(2, length(y)); P_kalman = zeros(2, 2, length(y)); x_kalman(:, 1) = x0; P_kalman(:, :, 1) = P0; for k = 2:length(y) % 预测步骤 x_pred = A * x_kalman(:, k-1) + B * u; P_pred = A * P_kalman(:, :, k-1) * A' + Q; % 更新步骤 K = P_pred * C' / (C * P_pred * C' + R); x_kalman(:, k) = x_pred + K * (y(k) - C * x_pred); P_kalman(:, :, k) = (eye(2) - K * C) * P_pred; end % 输出结果 disp(x_kalman); ``` 2. 扩展卡尔曼滤波: ```matlab % 系统动态模型和测量模型(非线性) f = @(x) [x(1) + x(2); x(2)]; h = @(x) x(1); % 系统噪声和测量噪声的协方差矩阵 Q = [0.01 0; 0 0.01]; R = 1; % 初始化状态和协方差矩阵 x0 = [0; 0]; P0 = eye(2); % 测量值 y = [1.2; 2.3; 3.5; 4.7]; % 扩展卡尔曼滤波 x_ekf = zeros(2, length(y)); P_ekf = zeros(2, 2, length(y)); x_ekf(:, 1) = x0; P_ekf(:, :, 1) = P0; for k = 2:length(y) % 预测步骤 x_pred = f(x_ekf(:, k-1)); F = [1 1; 0 1]; % 线性化系统动态模型 P_pred = F * P_ekf(:, :, k-1) * F' + Q; % 更新步骤 H = [1 0]; % 线性化测量模型 K = P_pred * H' / (H * P_pred * H' + R); x_ekf(:, k) = x_pred + K * (y(k) - h(x_pred)); P_ekf(:, :, k) = (eye(2) - K * H) * P_pred; end % 输出结果 disp(x_ekf); ``` 3. 无损卡尔曼滤波: ```matlab % 系统动态模型和测量模型(非线性) f = @(x) [x(1) + x(2); x(2)]; h = @(x) x(1); % 系统噪声和测量噪声的协方差矩阵 Q = [0.01 0; 0 0.01]; R = 1; % 初始化状态和协方差矩阵 x0 = [0; 0]; P0 = eye(2); % 测量值 y = [1.2; 2.3; 3.5; 4.7]; % 无损卡尔曼滤波 x_ukf = zeros(2, length(y)); P_ukf = zeros(2, 2, length(y)); x_ukf(:, 1) = x0; P_ukf(:, :, 1) = P0; for k = 2:length(y) % 预测步骤 [x_pred, P_pred] = unscented_transform(f, x_ukf(:, k-1), P_ukf(:, :, k-1), Q); % 更新步骤 [y_pred, S] = unscented_transform(h, x_pred, P_pred, R); C = P_pred * S' / S / S'; x_ukf(:, k) = x_pred + C * (y(k) - y_pred); P_ukf(:, :, k) = P_pred - C * S * C'; end % 输出结果 disp(x_ukf); ``` 以上是简单的卡尔曼滤波扩展卡尔曼滤波和无损卡尔曼滤波Matlab代码示例。请注意,这只是一个简单的演示,实际应用可能需要根据具体问题进行适当的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值