3、传感器模型与噪声:高斯噪声模型、卡尔曼滤波基础、传感器标定
做目标点跟踪,传感器就是我们的眼睛。但说实话,没有哪双眼睛是完美的。我做了这么多年控制,见过太多因为传感器噪声没处理好,导致整个系统崩溃的案例。今天咱们就来聊聊,怎么跟这些噪声打交道。
3.1 高斯噪声模型——最常用的噪声假设
为什么几乎所有传感器模型都假设噪声是高斯分布?说白了,就是中心极限定理在撑腰。多个独立随机因素叠加,最终都会趋向正态分布。
高斯噪声的数学表达很简单:
# 一维高斯噪声
import numpy as np
import matplotlib.pyplot as plt
# 生成1000个高斯噪声样本
mu = 0.0 # 均值
sigma = 0.1 # 标准差
noise = np.random.normal(mu, sigma, 1000)
# 看看分布长什么样
plt.hist(noise, bins=30, density=True)
plt.title('高斯噪声分布')
plt.show()
嗯,这里要注意:高斯噪声有两个关键参数——均值 μ 和标准差 σ。均值代表系统偏差,标准差代表噪声强度。
核心要点:
- 均值 μ = 0:说明传感器没有系统性偏差
- 标准差 σ:决定了噪声的波动幅度
- 68-95-99.7 法则:±1σ 内占68%,±2σ 内占95%
我在项目中遇到过一件事:有个激光雷达,厂家标称精度 ±2cm。我们直接用了,结果跟踪误差一直下不去。后来一测,实际噪声标准差是 3.5cm。你想想看,这差了快一倍。所以拿到传感器,第一件事就是实测噪声参数。
3.2 卡尔曼滤波基础——从噪声中提取真相
卡尔曼滤波,说白了就是一个「预测+修正」的循环。我刚开始学的时候觉得它很玄乎,其实核心就五个公式。
先看预测阶段:
# 卡尔曼滤波预测步骤
def predict(x, P, F, Q):
"""
x: 状态估计
P: 协方差矩阵
F: 状态转移矩阵
Q: 过程噪声协方差
"""
x_pred = F @ x # 状态预测
P_pred = F @ P @ F.T + Q # 协方差预测
return x_pred, P_pred
再看更新阶段:
# 卡尔曼滤波更新步骤
def update(x_pred, P_pred, z, H, R):
"""
z: 测量值
H: 观测矩阵
R: 测量噪声协方差
"""
y = z - H @ x_pred # 残差计算
S = H @ P_pred @ H.T + R # 残差协方差
K = P_pred @ H.T @ np.linalg.inv(S) # 卡尔曼增益
x = x_pred + K @ y # 状态更新
P = (np.eye(len(x)) - K @ H) @ P_pred # 协方差更新
return x, P
我的经验:卡尔曼增益 K 是灵魂。K 大,说明更相信测量;K 小,说明更相信预测。实际调参时,我一般先固定 R(测量噪声),再调 Q(过程噪声)。
为什么会这样?因为 R 可以从传感器标定中得到,而 Q 更多是凭经验。我曾经在一个无人机项目中,Q 设得太小,结果滤波器反应迟钝,目标跟丢了。后来把 Q 放大两倍,效果立竿见影。
3.3 传感器标定——消除系统性偏差
传感器标定,说白了就是给传感器「校零」。我见过太多人跳过这步,直接拿原始数据用,结果可想而知。
标定的核心流程:
- 静态标定:传感器固定不动,采集大量数据
- 偏差计算:计算均值,这就是零偏
- 噪声分析:计算标准差,这就是噪声水平
- 动态标定:让传感器运动,测试响应特性
来看一个实际的标定代码:
# 传感器标定示例
def calibrate_sensor(raw_data, true_value):
"""
raw_data: 传感器原始读数
true_value: 真实值(由高精度设备提供)
"""
# 计算偏差
bias = np.mean(raw_data - true_value)
# 计算噪声标准差
noise_std = np.std(raw_data - true_value)
# 标定后的数据
calibrated = raw_data - bias
return calibrated, bias, noise_std
# 使用示例
raw_measurements = np.array([1.02, 1.05, 0.98, 1.01, 1.03])
true_position = 1.00
calibrated, bias, noise_std = calibrate_sensor(raw_measurements, true_position)
print(f"偏差: {bias:.3f}")
print(f"噪声标准差: {noise_std:.3f}")
避坑指南:我曾经犯过一个低级错误——标定时用的参考设备精度不够。结果标定完,误差反而更大了。记住:参考设备的精度至少要比被标定传感器高一个数量级。
3.4 知识体系总览
下面这张图,是我自己总结的传感器噪声处理框架。你把它记在心里,做目标跟踪时就不会乱:
这张图把三个模块串起来了。高斯噪声模型是理论基础,卡尔曼滤波是核心算法,传感器标定是前置条件。三者缺一不可。
本章小结:
- 高斯噪声模型:用 μ 和 σ 描述传感器噪声特性
- 卡尔曼滤波:预测+修正的迭代过程,核心是卡尔曼增益
- 传感器标定:消除系统性偏差,获取真实噪声参数
说实话,这三个知识点看起来各自独立,但在实际项目中是环环相扣的。标定做不好,卡尔曼滤波的参数就设不准;噪声模型搞错了,滤波器性能就上不去。我建议你动手跑一遍上面的代码,把每个参数都调一调,感受一下它们之间的相互作用。
可可精品资料库