扩展卡尔曼滤波EKF工程实践:线性化、协方差与数值稳定性

发布时间:2026/10/26 20:58:32
扩展卡尔曼滤波EKF工程实践:线性化、协方差与数值稳定性 简介面向惯性导航、姿态估计与多传感器融合方向的学习者和开发者这份资料围绕扩展卡尔曼滤波EKF展开对应9维IMU双阶段卡尔曼滤波姿态跟踪论文的实现思路并包含基于EKF-IMU与ESKF-IMU的姿态解算算法实现可用于理解IMU数据下的滤波建模、状态更新与误差状态处理。压缩包为zip格式体积约2.23MB文件总数与类型明细未在资源页列出内容以算法实现与论文复现相关模块为主适合课程设计、科研预研及工程对照。已有441人学习表明其在EKF/ESKF入门与实践中具备一定参考价值。读者可从中获得论文算法到代码实现的对应关系、姿态跟踪滤波流程、EKF与ESKF方案的比较线索以及调试和移植时可复用的工程思路。1. EKF 的第一反直觉它不是升级而是给非线性系统套了一层线性壳很多人第一次看到扩展卡尔曼滤波EKF这个名字会默认它是卡尔曼滤波的加强版更强的模型、更高的精度、更广的适用范围。实际情况恰好相反——EKF 是一种降级方案。标准卡尔曼滤波的最优性建立在一个很苛刻的前提上状态转移和观测都是线性的噪声是高斯的。只要系统一非线性那套闭式递推就整体失效连“最优”的定义都站不住。EKF 做的事不是把理论推广出去而是把非线性系统强行拉回线性假设能够处理的范围内在当前估计点做一阶泰勒展开用雅可比矩阵代替线性系统里的 F 和 H然后原封不动地跑那五个公式。所以真正值得搞懂的不是“EKF 怎么用”而是“这一刀切掉了什么、切掉的部分去哪了、什么时候会回来找你”。搞不清这一点调参就永远是碰运气。2. 线性化到底做了什么雅可比矩阵凭什么代替 F 和 H2.1 泰勒展开只留一次项被丢掉的那一项去哪了真实的状态转移写成 $x_k f(x_{k-1}, u_k) w_k$其中 $f$ 是非线性的。EKF 在当前估计 $\hat{x}$ 处展开$$f(x) \approx f(\hat{x}) F,\delta x \tfrac{1}{2}\delta x^\top \mathcal{H}_f \delta x \cdots$$其中 $\delta x x - \hat{x}$$F \partial f/\partial x$ 在 $\hat{x}$ 处取值。如果把 $\hat{x}$ 当成新的坐标原点误差 $\delta x$ 的传播就变成了严格线性的 $\delta x_k \approx F \delta x_{k-1} w_k$协方差递推这才成立。关键就在被丢掉的那个二阶项上。它并不是零均值白噪声它的期望和 $\delta x$ 的分布有关它和状态强相关而且量级正比于 $f$ 的二阶导。这意味着两件事。第一当 $\delta x$ 很大时初始误差大、观测中断很久、被野值拽偏过二阶项不可忽略滤波器算出来的 P 和真实误差统计不匹配表现出来的就是“越来越自信地错”。第二当 $f$ 的曲率很大时近距离方位观测、大角速度转弯、强透视投影即便 $\delta x$ 很小二阶项也可能不小。常见的实现思路是把这份误差顺手折进 Q。这就是为什么很多人调参时会发现“Q 调大一点反而更稳”——变大的并不是传感器噪声而是在补线性化误差造成的偏差。还有一个容易被忽略的选择线性化点取在哪里。标准 EKF 在预测步用先验 $\hat{x}_{k|k-1}$ 展开 $f$在更新步也用先验展开 $h$算出增益之后才更新状态。如果改成在更新后的后验点上重新展开、重新算增益就是迭代 EKFIEKF。二者在弱非线性下几乎没区别但在强非线性下IEKF 的收敛域明显更大。很多“EKF 怎么调都发散了”的案例换 IEKF 就活了。2.2 雅可比手推还是数值差分误差和代价的取舍$F$ 的每一项都是偏导。以平面上的匀速转向模型为例状态是 $[p_x, p_y, \theta]^\top$控制量是线速度 $v$ 和角速度 $\omega$import numpy as np def f(x, u, dt): 非线性状态转移把控制量积分一步 v, w u return np.array([x[0] v * np.cos(x[2]) * dt, x[1] v * np.sin(x[2]) * dt, x[2] w * dt]) def F_analytic(x, u, dt): 手推的雅可比逐项对应上面的 f v, _ u return np.array([[1.0, 0.0, -v * np.sin(x[2]) * dt], [0.0, 1.0, v * np.cos(x[2]) * dt], [0.0, 0.0, 1.0]]) def jacobian_numeric(fn, x, args(), eps1e-6): 中心差分兜底主要用于写单元测试对拍 x np.asarray(x, dtypefloat) n x.size J np.zeros((n, n)) for i in range(n): d np.zeros(n) d[i] eps # 中心差分误差 O(eps^2)但 eps 太小会被浮点舍入吃掉 J[:, i] (fn(x d, *args) - fn(x - d, *args)) / (2.0 * eps) return J参数说明eps是差分步长取 1e-6 是双精度下的经验值步长再小$f(xd)-f(x-d)$ 的相减会损失有效位误差反而按 $1/\epsilon$ 放大步长再大截断误差按 $\epsilon^2$ 增长。量级不统一的系统比如位置是米、角度是弧度、速度是米每秒不能共用一个eps得按各维度的典型尺度缩放。手推解析式和数值差分的关系我一般当作单元测试来用拿十几个随机状态点对拍两者np.allclose的容差给 1e-6 左右。手推公式写错一个符号是极高频的事故而这种错误在弱非线性、小噪声的数据上往往跑得“看起来还行”等换到真实数据才爆。数值差分在实际滤波器里也能用代价是每步多出 $n$ 次中心差分是 $2n$ 次函数求值。状态维度到几十维时这个开销就不划算了何况嵌入式上根本不想付这个成本。注意数值差分算出的雅可比和解析式在数学上等价但它天然带一点点数值噪声。这个噪声会进入 P 的递推长期跑会表现为 P 略微偏大、增益略微偏高不算致命但会让一致性检验不通过。2.3 观测方程的 H同一个物理量写法不同条件数差一个量级观测模型更容易出问题。假设有一个已知位置的路标 $(l_x, l_y)$传感器测到的是距离 $r$ 和方位角 $\phi$。记 $d_x l_x - p_x$、$d_y l_y - p_y$、$q d_x^2 d_y^2$$$h(x) \begin{bmatrix} \sqrt{q} \ \operatorname{atan2}(d_y, d_x) - \theta \end{bmatrix},\qquad H \begin{bmatrix} -\frac{d_x}{r} -\frac{d_y}{r} 0 \[4pt] \frac{d_y}{q} -\frac{d_x}{q} -1 \end{bmatrix}$$看第二行$\partial \phi/\partial p_x d_y / q$分母是 $q r^2$ 而不是 $r$。这意味着方位角对位置的敏感度按距离平方衰减。路标在 1 米处位置偏 1 厘米会带来约 0.01 弧度的方位变化路标在 100 米处同样 1 厘米只带来约 1e-6 弧度。换算成信息量就是远距离方位观测几乎不提供位置约束。这直接决定了滤波器的行为远距离时方位那一维的 H 行几乎全零$H P H^\top$ 退化S 接近奇异K 在这一维趋近于零滤波器实际上主要靠距离那一行在更新。如果只用方位观测单目视觉里很常见初始距离完全不可观滤波器会在深度方向上出现一条极长的“香蕉形”不确定带表现出来就是深度估计长时间卡着不动、突然被某一帧拽飞。同一个 $h$如果写成“预测路标在相机坐标系下的三维点”再投影H 的结构会完全不同条件数可以差一个量级。这不是数学错误是数值病态理论上有解浮点下解不准。工程上的对策通常是换观测表达用归一化坐标、或用对数极坐标、加观测门限、或者干脆在距离过大时不更新这一维。3. 协方差怎么传播P 矩阵才是 EKF 的真正状态3.1 预测步$F P F^\top$ 是一次线性变换下的形状搬运把 P 想成一个椭球主轴方向是不确定性大的方向轴长是标准差。$F P F^\top$ 的几何含义就是把这个椭球按 F 描述的线性变换整体搬运一遍——旋转、拉伸、剪切。转弯时角度不确定性会被 $F$ 里的 $-v\sin\theta \cdot dt$ 项耦合到位置上位置的不确定椭球就跟着转速度越大、时间越长耦合越强。加上的 Q 是这一步新注入的不确定性。这里有个高频踩坑点Q 必须随步长变化。连续时间下的噪声是功率谱密度 $Q_c$离散化之后$$Q_k \approx G,Q_c,G^\top \Delta t$$对二阶模型位置速度离散 Q 的四个块分别是 $\Delta t^3/3$、$\Delta t^2/2$、$\Delta t^2/2$、$\Delta t$ 乘以谱密度。也就是说位置项按 $\Delta t^3$ 缩放速度项按 $\Delta t$ 缩放。如果你把 Q 写成一个固定的对角矩阵那么换传感器、改频率、掉帧的时候滤波器对“这一步该有多不确定”的判断就全错了。掉帧时 $\Delta t$ 突然变大真实不确定性涨得比固定 Q 快得多表现出来就是大机动时明显滞后、跟不住。3.2 卡尔曼增益这个 K 并不承担调参作用把标量情形写出来最清楚$K \sigma_p^2 / (\sigma_p^2 \sigma_r^2)$。它就是一次带权平均的权重谁的方差大就多信另一边。多维情形 $K P H^\top (H P H^\top R)^{-1}$ 是同一个意思只是权重变成了矩阵。这里有两个推论值得记住。第一K 不是旋钮。它完全由 P 和 R 决定任何“手调 K”的做法都是在掩盖 P 或 R 设错的事实。第二$S H P H^\top R$ 是新息协方差新息 $y z - h(\hat{x})$ 在模型正确时应该服从零均值、协方差为 S 的分布。这就给了我们一个可以量化的自检指标归一化新息平方 $\text{NIS} y^\top S^{-1} y$自由度等于观测维度。二维观测下95% 的样本应该落在 5.99 以内。如果 NIS 长期在几十上百说明 R 给小了或者模型漏了项如果长期远小于 1说明 R 给大了滤波器没充分吸收观测信息。3.3 一个能跑的最小 EKF预测 更新把前面的东西拼起来一个完整的两步递推大约是这样import numpy as np def wrap(a): 把角度归一化到 (-pi, pi]所有角度相关的加减都要过这一层 return (a np.pi) % (2.0 * np.pi) - np.pi def ekf_predict(x, P, u, dt, Q): v, w u th x[2] # 非线性状态转移 f(x, u) x_pred np.array([x[0] v * np.cos(th) * dt, x[1] v * np.sin(th) * dt, wrap(th w * dt)]) # 雅可比在 x先验点处取值 F np.array([[1.0, 0.0, -v * np.sin(th) * dt], [0.0, 1.0, v * np.cos(th) * dt], [0.0, 0.0, 1.0]]) P_pred F P F.T Q # 协方差搬运 注入过程噪声 return x_pred, P_pred, F def ekf_update(x_pred, P_pred, z, R, lm): lx, ly lm dx, dy lx - x_pred[0], ly - x_pred[1] q dx * dx dy * dy r np.sqrt(q) # 观测模型 h(x)距离 方位 h np.array([r, wrap(np.arctan2(dy, dx) - x_pred[2])]) # 观测雅可比注意方位那一行的分母是 q r^2 H np.array([[-dx / r, -dy / r, 0.0], [ dy / q, -dx / q, -1.0]]) y z - h y[1] wrap(y[1]) # 残差先归一化漏了这行必炸 S H P_pred H.T R # 新息协方差2x2 K np.linalg.solve(S, H P_pred).T # K P Hᵀ S⁻¹用 solve 不解逆 x_new x_pred K y x_new[2] wrap(x_new[2]) IKH np.eye(3) - K H P_new IKH P_pred IKH.T K R K.T # Joseph 形式见 4.1 return x_new, P_new, y, S维度梳理一下更清楚状态 3 维观测 2 维所以 H 是 2×3S 是 2×2K 是 3×2np.linalg.solve(S, H P_pred)求的是 $S^{-1} H P$形状 2×3转置后正好是 $P H^\top S^{-1}$。用solve而不是显式求逆是因为 2×2 求逆虽然便宜但维度升上去后求逆的数值稳定性和速度都不如直接解线性方程。P的初值也是有讲究的。常见做法是给一个对角阵对角线元素是“我最多能错这么多”的平方——位置给 1 m²角度给 0.1 rad² 之类。如果给 0第一步的 K 会接近 0滤波器会把初始那段观测全部忽略掉之后靠 Q 慢慢把 P 撑起来表现为“前几十帧完全不收敛”。验证这套东西能不能跑不必等真实数据。构造一段无噪声的轨迹喂进去同样的输入和观测看估计误差是否收敛到零、P 的对角线是否单调收缩到合理量级再往观测里加已知方差的高斯噪声统计 NIS 的分布。这两步做完才轮到调 Q 和 R。4. 数值实现中的三个陷阱正定性、角度回绕、量纲4.1 用 Joseph 形式把 P 拉回正定教科书上更新协方差写的是 $P_k (I - KH)P_{k|k-1}$。数学上没问题浮点上有问题。原因在于 $I - KH$ 在理论上应该让 P 保持对称半正定但 K 是从 $S^{-1}$ 算出来的S 条件数一大K 的每一位都带相对误差$(I-KH)$ 乘出来的 P 就可能出现极小的负特征值或者明显的不对称。单步无所谓跑几千步之后负特征值会被逐步放大P 不再是一个合法协方差矩阵K 随之失去意义最后要么 NaN要么状态被一个荒唐的增益拽飞。Joseph 形式把同一个式子改写成$$P_k (I-KH)P_{k|k-1}(I-KH)^\top K R K^\top$$两项都是“矩阵乘自身转置”的形式对任意 K 都保证半正定因此即使 K 有误差P 也不会负定。代价是多两次矩阵乘法——状态维度在几十以内时这个开销可以忽略。# 每步更新之后顺手做一次对称化成本几乎为零 P 0.5 * (P P.T) eig np.linalg.eigvalsh(P) assert eig.min() -1e-9, fP 已经不正定了最小特征值 {eig.min():.3e}eigvalsh只取对称矩阵的特征值比通用eig快也更稳。这个断言建议在开发期常开上线后改成计数器上报。最小特征值一旦掉到 1e-12 以下说明整个滤波器已经在病态边缘需要同时检查 S 的条件数和 Q 的量级而不是继续调 R。如果维度真的很高或者对数值稳定性有更强要求还可以用平方根滤波对 P 做 Cholesky 分解递推分解因子而不是 P 本身把条件数直接压掉一半。工程上大多数场景用 Joseph 加对称化就够了。4.2 角度回绕残差没归一化滤波器会绕着圆周爬回来角度是一个周期量。$179°$ 和 $-181°$ 在物理上是同一个朝向但在算术上是两个相差 360 的数。EKF 的所有公式都假设变量在欧氏空间里直接拿角度做减法就会得到一个大得离谱的新息。一次典型的故障长这样真实朝向在 $\pi$ 附近观测给出 $-179°$预测给出 $179°$。$y z - h$ 得到 $-358°$也就是 $-6.25$ 弧度。这个数被 K 放大之后加进状态状态直接跳到 $-358°$ 附近滤波器“认为自己转了整整一圈”。接下来靠 Q 慢慢把 P 撑大观测一点点把状态拉回来整个过程可能持续几百毫秒轨迹上表现为一段莫名其妙的急转。正确的写法def wrap(a): # 先加 pi 平移取模后再平移回来一次处理任意多个周期 return (a np.pi) % (2.0 * np.pi) - np.pi # 更保险的等价写法对超大数值也不丢精度 def wrap2(a): return np.arctan2(np.sin(a), np.cos(a))有三个地方必须过wrap状态里的角度、观测模型输出 $h(x)$ 里的角度、以及新息 $y$ 里的角度分量。前两个漏了$h$ 和 $z$ 不在同一个周期上第三个漏了减出来的差值就是错的。很多实现只做了前两个然后在第三个上翻车。顺带提一句角度量的“平均”也不能用算术平均。两个角度 $179°$ 和 $-179°$ 的平均是 $0°$但物理上应该是 $180°$。多传感器融合朝向时用 $\operatorname{atan2}(\sum \sin\theta_i, \sum \cos\theta_i)$。如果系统里角度是三维姿态而不是单个平面角上面的处理就不够了——欧拉角在万向锁附近雅可比会奇异。这类系统通常换成误差状态 EKFESKF名义状态用四元数或旋转矩阵维护滤波器只估计一个小量的误差状态线性化点始终在 0 附近既避开了奇异性也让二阶项变得可以忽略。思路和 2.1 里“把 $\hat{x}$ 当原点”是同一件事只是换了个更聪明的参数化。4.3 Q 和 R 的量纲调参调到怀疑人生的根源大部分“参数怎么调都不对”的问题本质是量纲没对齐。把每个参数的含义摊开看参数物理含义量纲/尺度偏大的后果偏小的后果Q 位置块单位时间内位置漂移的谱密度m²/s稳态增益偏高输出跟随观测的抖动滞后于真实机动P 收敛过小Q 角度块陀螺零偏、模型失配折算的角噪声rad²/s朝向抖动观测被过度信任转弯时明显滞后R 距离项测距传感器的方差m²距离被忽略位置靠方位硬撑单个野值就能拽偏位置R 方位项测角传感器的方差rad²朝向不更新漂移朝向跟着噪声跳最容易错的两处。第一传感器手册给的精度常常是“±2°”这种形式那是最大误差不是标准差直接平方填进 R 会大出好几倍而且给的是度进公式之前必须乘 π/180 转成弧度。第二R 必须在观测空间里不是状态空间里。方位观测的 R 是 rad²不是 m²两者差着 $1/r^2$ 的量级混用会让不同距离下的估计精度完全失控。Q 那边同样要小心。如果你用固定 Q 而步长在变等价于假设“传感器掉帧的时候世界变稳定了”。正确做法是把 Q 写成 dt 的函数def make_Q(q_pos, q_th, dt): 按步长缩放的离散过程噪声q_pos: m^2/s, q_th: rad^2/s return np.diag([q_pos * dt, q_pos * dt, q_th * dt])一阶模型下噪声按 dt 线性增长就够了如果状态里含速度、用二阶模型位置块还要再乘 dt² 的因子因为速度噪声要经过积分才影响位置。判断自己有没有写对看一个现象把数据采样率减半再跑一遍如果轨迹明显变差或者明显变抖说明 Q 没有跟着 dt 走。提示调参有一个相对可靠的顺序——先把 R 按传感器手册估出来并固定住只动 Q等 NIS 的均值落在观测维度附近再回头微调 R。反过来先调 R 会把 P 的收敛行为带偏后面怎么调 Q 都是在补前面的账。5. 排查手册EKF 跑飞的五个真实故障模式5.1 状态“锁死”观测完全拉不动现象前几十帧正常之后估计变成一条近乎直线的外推观测数据明显偏离也不修正NIS 长期小于 0.1。原因P 被算得过小K 随之趋近于零滤波器彻底不信任观测。最常见的三个来源是 Q 给成了 0 或极小值、因为时间戳没更新导致 dt0 却仍然每帧都在预测、以及同一帧观测被重复喂了多次每次更新都让 P 收缩一次但信息量并没有真的增加。解决给 Q 设一个不可再小的下限保证 P 在任何情况下都不会无限收缩在预测入口检查 dt小于阈值直接跳过给每帧观测打序号重复的直接丢弃。做完这三件事再复测 NIS正常应该回到观测维度附近。5.2 朝向突然反向然后缓慢爬回来现象轨迹上出现一段几百毫秒的异常转向角度估计跳到 $\pm\pi$ 附近的另一侧之后靠观测慢慢拉回位置也跟着偏了一段。原因新息里的角度分量没有做回绕。$z$ 和 $h(x)$ 分别落在 $(-\pi,\pi]$ 的两端相减得到接近 $\pm 2\pi$ 的数被 K 放大后把状态推过了头。解决把 4.2 里的wrap应用到状态角度、观测模型输出和新息三个位置。检查方法很直接在更新步打印abs(y[1])正常应该始终小于 π一旦出现大于 π 的值就是漏了。5.3 P 出现负特征值增益越来越大直到 NaN现象跑几千步后 K 的数值开始异常增大状态出现无理由的高频抖动最后输出 NaN。日志里 P 的对角线已经不为正。原因用 $(I-KH)P$ 递推浮点误差逐步累积破坏正定性S 条件数过大时显式inv求逆进一步放大误差。解决换成 Joseph 形式更新 P每步做一次对称化用np.linalg.solve代替inv。再加一条开发期断言检查最小特征值。如果换完仍然病态去查 S 的条件数——很大概率是某一维观测的 H 行几乎全零比如远距离的方位观测需要加观测门限或改写观测方程。5.4 初始误差一大就发散怎么调 Q 都没用现象初始位置差几米时滤波器完全不收敛估计值越跑越远把初始误差改小到几十厘米就正常了。原因线性化点离真值太远一阶近似失效H 在错误的点上算出来指向错误的方向更新把状态推得更偏下一次线性化更糟——形成正反馈。解决把更新步改成迭代式IEKF在后验点上重新展开、重新算增益迭代到状态增量小于阈值或达到上限或者先做一次粗初始化用第一批观测解一个闭式解、或多帧三角化再启动滤波器再简单一点的做法是前期放大 R、降低增益用更多数据把初值“泡”准。三种方法可以叠加。5.5 单个野值把整条轨迹拽偏之后再也回不来现象绝大部分时间正常某一帧观测异常遮挡、反光、误匹配状态被拽偏一大截之后需要很久才收敛甚至永久偏移。原因没有野值拒绝机制R 给得偏小使 K 很大一帧错误观测就能覆盖掉积累的全部信息更糟的是错误状态会让后续的线性化点也错观测模型的一致性被破坏。解决每次更新前算 NIS与卡方分布门限比较二维观测、95% 置信度对应 5.99超门限就丢弃这一帧或者临时把 R 放大若干倍再用。门限不要设太松也不要一超限就永久拉黑某个观测源。另外野值处理最好和 5.4 的迭代更新一起上因为迭代过程本身会让残差收敛得更准门限判断也更可靠。注意野值被拒绝之后P 不应该跟着收缩否则滤波器会误以为“这一帧我更新过了”。跳过更新的正确做法是整步跳过连 P 一起不动。6. 设计取舍EKF 到底该不该被换掉把 EKF 的代价讲清楚之后该不该用它就变成一个可以算的账而不是信仰问题。下面这张表是我自己在选方案时会过一遍的对比维度都是工程上真正会痛的维度。方案每步复杂度非线性处理多峰分布主要风险EKF$O(n^3)$n 小则极快一阶泰勒强非线性下失效不支持线性化误差、需要手推雅可比迭代 EKF常数倍于 EKF后验点重线性化收敛域更大不支持迭代不保证收敛需要退出条件误差状态 EKF同 EKF线性化点固定在原点附近不支持误差状态参数化设计复杂无迹滤波$O(n^3)$常数约为 EKF 的 $2n1$ 倍通过 sigma 点传播二阶精度不支持权重可能为负高维下不稳定粒子滤波$O(N \cdot n)$N 是粒子数无线性化假设支持维度灾难N 随 n 指数增长批量优化/因子图每次重优化非实时迭代求解精度最高支持有延迟算力需求大选型的判断标准其实只有三条。第一非线性有多强。如果状态转移和观测在工作的取值范围内近似线性小角度、短时间、近距离一阶近似完全够用上 EKF 是性价比最高的选择。第二需不需要多峰。EKF 天然是单峰的一旦出现“可能是 A 也可能是 B”的歧义全局定位、数据关联不确定高斯假设就是错的这时候粒子滤波或混合高斯才是正解。第三能不能容忍延迟。如果场景允许几十毫秒的延迟批量优化在精度上几乎总是胜过滤波器因为它会反复重线性化把 EKF 一次性丢掉的二阶信息捡回来。真正的取舍点在中间地带状态维度十几到几十、非线性中等、算力受限、要跑在毫秒级循环里。这个区间里 EKF 和它的变体IEKF、ESKF至今仍然是最实用的选择原因很朴素——每步只有几次矩阵乘法没有迭代收敛问题没有粒子数这个旋钮失败模式也相对好诊断。而它所有的坑几乎都能归结到同一件事上线性化点错了或者被丢掉的那一项被当成了噪声。所以与其问“EKF 过时了吗”不如问“我的系统里二阶项到底有多重要我有没有办法测出来”。测的方法前面已经给过了跑一遍无噪声数据看收敛跑一遍带噪数据看 NIS 分布再把采样率减半看性能退化多少。这三组数字出来用不用换方案基本不用纠结。从那以后我每次接入一个新的观测源第一件事都是把残差序列画出来看一眼——零均值还在不在、量级对不对、有没有周期性的大跳——而不是先去动 R。因为残差图会直接告诉你是传感器的问题、模型的问题还是线性化的问题。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询