☰
基于扩展卡尔曼滤波的车辆质量在线估算及Simulink仿真实践
2026/9/26 7:28:00 网站建设 项目流程

1. 为什么车辆质量估算值得折腾——一个容易被低估的参数

在车辆纵向动力学里,整车质量大概是所有参数里最"现实"的一个。你翻任何一本控制理论的教材,里面的车辆模型几乎都把质量当成已知常数,可实际工况根本不是这么回事——空载和满载的乘用车质量能差出三四百公斤,商用车空重和满载更是差出好几吨,换一个驾驶员上车,整车质心位置和惯量也跟着变。ABS制动控制、ESP车身稳定、坡道辅助起步、纯电车的续航里程预估、自动挡换挡策略,这些系统全都要拿质量参数去算控制量,质量给错了,控制效果直接打折。

用卡尔曼滤波去估算车辆质量,本质上是把质量当作一个"慢变状态"放进状态向量里,依托整车纵向动力学模型,从带噪声的车速、加速度或驱动力信号中把质量实时滤出来。这个思路的好处是它不需要额外加装称重传感器,纯软件就能实现,而且天然具备抗噪声能力,可以在车辆正常行驶过程中持续在线更新。我自己在Matlab Simulink里搭了一套完整的仿真模型,跑了空载、满载、中载好几组工况,确认这套方案从原理到实现都站得住脚。这篇文章把我踩过的坑、调过的参数、写过的代码原原本本记录下来,适合正在做车辆状态估计、纵向控制或者刚接触卡尔曼滤波的工程师和研究生参考。

先说清楚这篇文章的范围:我会从整车纵向力平衡模型讲起,推导出适合扩展卡尔曼滤波的状态方程和雅可比矩阵,然后落到Simulink上的模块搭建与EKF算法实现,最后重点讲Q、R矩阵的整定逻辑,以及"为什么质量估算在某些工况下死活不收敛"这类实际工程里最容易撞上的问题。

2. 纵向动力学模型与状态方程搭建——估算的底子

2.1 从牛顿第二定律出发的整车纵向力平衡

车辆在平直路面上行驶时,纵向方向上作用的力量大致是这么几类:驱动轮上的驱动力、空气阻力、滚动阻力,以及坡度阻力。整车的纵向加速度由这四者的合力决定,写出来就是标准的牛顿第二定律:

m * a = Ft - Fw - Ff - Fi

其中:

  • m是整车质量,单位kg
  • a是纵向加速度,单位m/s²
  • Ft是驱动力,单位N,由发动机/电动机输出扭矩经过变速器、主减速器放大后作用到轮胎接地面上
  • Fw是空气阻力,Fw = 0.5 * ρ * Cd * A * v²,ρ取1.2258 kg/m³,Cd是空气阻力系数,A是迎风面积
  • Ff是滚动阻力,水平路面上Ff = m * g * f,f是滚动阻力系数
  • Fi是坡度阻力,Fi = m * g * sin(θ),θ是道路坡度角

驱动力Ft的计算也有一条经典链路。设发动机输出扭矩为Tq,变速器当前挡位传动比ig,主减速比i0,传动效率η,轮胎滚动半径r,那么:

Ft = Tq * ig * i0 * η / r

这条公式在Simulink里就是几个增益模块串起来的事,但要注意单位。扭矩是N·m,传动比无量纲,半径是m,出来的才是N。很多初学者在Simulink里仿真结果数量级不对,多半是这里某个参数写错,或者速度单位没有从km/h换成m/s。

下面是我仿真时用的一组基准参数,后面所有代码和调试记录都基于这张表:

参数符号数值单位
空载质量m_empty1800kg
满载质量m_full2500kg
空气阻力系数Cd0.4-
迎风面积A2.3m²
滚动阻力系数f0.012-
传动效率η0.92-
主减速比i04.3-
3挡传动比ig2.5-
轮胎滚动半径r0.326m
重力加速度g9.81m/s²

用这组参数很快可以算一笔账:当发动机输出200 N·m扭矩、车辆挂在3挡时,驱动力大约是6067 N,空载1800 kg时加速度约3.1 m/s²,满载2500 kg时加速度约2.2 m/s²。质量差近四成,加速度差异非常明显,这正说明车速信号里携带了质量信息,卡尔曼滤波才有东西可"滤"。

2.2 状态向量选什么,为什么这里必须上EKF而不是标准KF

要做卡尔曼滤波,首先要写状态方程。质量估计里状态向量最常见的选择是:

x = [v, m]ᵀ

也就是把纵向车速v和整车质量m同时作为状态量。为什么把质量放进状态方程而不是直接当参数?这里有个考虑:虽然质量本身是常数,但在实际行驶过程中它是慢变的,比如乘客上下车、货物装卸,这些变化是离散事件,你不可能精确预知它何时发生。把质量当作一个缓变状态,让滤波器自己去跟踪,就不需要外部事件触发,也不需要额外的传感器。

于是连续时间状态方程可以写成:

dv/dt = (Ft - 0.5 * ρ * Cd * A * v² - m * g * f) / m dm/dt = 0

第二个式子表达的就是"质量是慢变量",在单个滤波周期内近似常数。这个假设在绝大多数工况下成立,除非你在几秒内把整车载荷彻底换掉。

那么问题来了:标准卡尔曼滤波要求系统是线性的,即状态方程可写成x_dot = Ax + Bu + w。现在你观察dv/dt的表达式,里面出现了v²/m和1/m项——v和m在同一项里耦合,而且是对状态的乘积关系,这就是典型的非线性。所以不能用标准KF,得用扩展卡尔曼滤波(EKF),在每个采样周期把非线性方程在当前估计值附近做一阶泰勒展开,得到线性近似后再套卡尔曼的预测-更新框架。

如果你图省事,直接把dv/dt的表达式里v取上一次值、m取上一次值当成已知量,那也能跑,但那已经不是严格的卡尔曼结构,滤波增益的计算会有偏差,实际表现是估计值容易漂移。我建议该推导雅可比矩阵就老老实实推导,后面代码里也就是几个表达式的事。

2.3 雅可比矩阵推导,这一步最容易出错

EKF的预测步里需要求状态方程对状态的偏导数矩阵,也就是雅可比矩阵F。f1 = (Ft - 0.5 * ρ * Cd * A * v² - m * g * f) / m,分别对v和m求偏导:

∂f1/∂v = -(ρ * Cd * A * v) / m

这个式子来自v²项的导数,v前面的系数2被0.5约掉了,很干净。注意这里的负号不能丢——空气阻力随速度增大而增大,所以速度越快的车,速度导数的增量越小,这是物理上自洽的。

∂f1/∂m = -(Ft - 0.5 * ρ * Cd * A * v²) / m²

这里要特别小心一个陷阱:滚动阻力项m * g * f除以m之后变成了g * f,对m的偏导是0。很多人看到滚动阻力里含m,就直接把m²项写成撇开,结果雅可比矩阵多了一项,滤波器更新时质量估计会莫名其妙向错误方向修正。我第一次推这个偏导时也在这里卡了二十分钟,后来干脆在草稿纸上把f1拆成"含质量项"和"不含质量项"逐一求导,才把问题理清。

f2 = 0,所以∂f2/∂v = 0,∂f2/∂m = 0。

整理成矩阵就是:

F = [∂f1/∂v, ∂f1/∂m; 0, 0]

离散化时用一阶欧拉近似:F_d = I + F * Ts,其中Ts是滤波采样周期。对于车辆质量估计这种慢动态系统,这种离散化精度完全够用。量测方程就简单了,把车速传感器的输出当作量测,H = [1, 0],量测噪声假设为高斯白噪声,方差为R。

3. Simulink仿真模型搭建实操

3.1 整体架构:车辆模型、滤波器、量测注入三块

Simulink模型我拆成三块来看,这样不管是排查问题还是换算法都比较清晰。

第一块是"被辨识对象",说白了就是用一个Simulink模型模拟真车。这个模型按照上面那套纵向动力学方程搭建,内部把真实质量设成一个常数,比如2500 kg。输入是发动机扭矩Tq,输出是真实车速v_true。搭建方法不复杂:用一个Integrator把加速度积成速度,加速度由驱动力减阻力再除以质量得到。需要注意的细节是Integrator的初始条件要设成车辆起始车速,比如10 m/s,不然仿真从0开始加速,前面几秒的速度过低,阻力小,EKF的激励特性跟正常行驶差别很大。

第二块是"传感器模块"。用Band-Limited White Noise模块产生高斯白噪声,叠加到v_true上,模拟实际车速传感器(轮速传感器或GPS速度信号)的测量噪声。噪声方差这里取0.25,对应标准差0.5 m/s,这个量级对轮速传感器来说比较保守,但也符合实际。

第三块就是EKF滤波器本体。它接收两个输入:驱动力Ft和带噪声的速度量测v_meas,输出质量估计m_hat。在后面我会把EKF算法的完整MATLAB Function代码放出来,直接复制到Simulink的MATLAB Function模块里就能用。

3.2 EKF在Simulink里的三种实现方式

EKF的实现我试过三种路子,分别说一下优缺点。

第一种是纯MATLAB Function块。这也是我最推荐起步的方式。直接在Simulink里拖一个MATLAB Function模块,把EKF算法写成MATLAB函数,persistent变量保存状态和协方差矩阵。优点是代码直观、调试容易,可以在代码里打断点,也可以把中间变量通过额外的输出端口接出来看。缺点是仿真速度稍慢,而且后续想要代码生成上实车,还得改写成C语言S-Function。

第二种是S-Function。用Level-2 S-Function把EKF编写成C MEX,适合要跑硬件在环或者C代码生成的场景。开发效率上慢一些,但运行速度快,和嵌入式代码风格一致。

第三种是把滤波算法用Simulink原生模块搭出来。用Add、Gain、Product、Divide等模块把预测步、更新步逐级拼出来。这种做法的好处是可视化程度极高,矩阵运算是怎么一步步算的一目了然;坏处是模型规模大,模块连线多,稍不留神就出现代数环,排查起来很闹心。我一般只在演示算法原理时用这种,做实际项目还是MATLAB Function。

不管你选哪种,我都建议先跑通纯MATLAB Function版本,算法行为确认无误后再往S-Function迁移,不要一上来就搞C代码,连Q、R都还没调明白,迁过去只会两头抓瞎。

3.3 仿真参数设置与输入信号设计

Simulink的求解器设置里,我推荐用固定步长,求解器选ode4(四阶龙格-库塔),步长设0.001 s。为什么不用变步长?因为EKF里的persistent变量逻辑本质上是按离散步数运行的,变步长会让步长Ts不确定,你还要费劲去改离散化系数,没必要。固定步长0.001 s对车辆动力学来说计算量可以接受,精度也足够。如果你把步长拉到0.1 s,欧拉离散误差会明显增大,质量估计值会高频抖动,这个我在调试时确实遇到过。

输入激励信号是质量辨识成败的关键。卡尔曼滤波想从量测中提取某个状态的估计,前提是该状态在系统中被充分激励。对质量m来说,激励就是"加速度变化"。如果你让车辆一直匀速跑,那车速没有变化,量测里几乎没有携带质量信息,滤波器自然什么都估不出来。我用的输入信号是扭矩阶跃组合:前10 s给100 N·m稳定扭矩让车辆加速,10 s处阶跃到260 N·m持续8 s,18 s再跳回150 N·m,整个60 s仿真里穿插加速、接近匀速、再次加速等工况段。这个信号设计的好处是加速度覆盖多个区间,质量对驱动力的反作用在不同工况下都有体现,EKF能持续获得信息。

为了观察收敛性,还可以多跑几组对比试验:同一时刻扭矩跳变幅度分别设为200、260、320 N·m,看质量估计收敛速度如何变化。加速越猛,收敛越快,这从物理上很好理解——大油门时驱动力占主导,质量的推力效应越明显,辨识信噪比越高。

EKF核心的MATLAB Function代码如下,这是我实际调试过的版本,参数里已经包含完整的空气阻力和滚动阻力公式:

function [m_hat, v_hat] = ekf_mass(v_meas, Ft, Ts) persistent x P if isempty(x) x = [v_meas; 1800]; % 状态初值 [车速, 质量] P = diag([1e4, 2.5e5]); % 初始协方差,质量标准差约500 kg end % 常量定义 rho = 1.2258; % 空气密度 Cd = 0.4; % 风阻系数 A = 2.3; % 迎风面积 f = 0.012; % 滚动阻力系数 g = 9.81; % 重力加速度 v = x(1); m = x(2); % 状态方程 f1 = (Ft - 0.5 * rho * Cd * A * v^2 - m * g * f) / m; f2 = 0; x_pred = x + [f1; f2] * Ts; % 雅可比矩阵 F = [ -(rho * Cd * A * v) / m, ... -(Ft - 0.5 * rho * Cd * A * v^2) / m^2; 0, 0]; Fd = eye(2) + F * Ts; % 过程噪声协方差(核心整定对象) Q = diag([0.05, 0.5]); % 预测协方差 P = Fd * P * Fd' + Q * Ts; % 量测更新,量测为车速 H = [1, 0]; R = 0.25; % 量测噪声方差 K = P * H' / (H * P * H' + R); x = x_pred + K * (v_meas - H * x_pred); P = (eye(2) - K * H) * P; m_hat = x(2); v_hat = x(1); end

这段代码里有几个参数后面在整定环节会反复提到:初始协方差P中的质量项2.5e5,过程噪声Q(2,2)等于0.5,量测噪声R等于0.25。这几个数字不是随便拍的,后面细说。

4. Q、R矩阵整定:滤波器的性格调节旋钮

4.1 过程噪声协方差Q的含义与初值选取

卡尔曼滤波里的Q矩阵描述的是你对状态方程本身信任程度的"折扣"。Q越小,意味着你认为模型越准,状态预测的过程越可靠;Q越大,意味着你认为模型内部存在较多不确定性,滤波器会给量测修正更大的权重。

在质量估计这个场景里,Q是个二维对角阵,Q(1,1)对应速度状态,Q(2,2)对应质量状态。

Q(1,1)反映的是车辆纵向动力学模型中未建模因素对车速影响的强度,比如坡度突变、风阻变化、路面附着系数变化。我一般取0.01~0.1这个范围。取太小,滤波器对速度量测过度信任,容易把量测噪声透传进状态;取太大,又会让速度估计变得过于平滑,丢失高频信息。

Q(2,2)对应质量本身的"慢变假设"的不确定性。理论上质量是常数,Q(2,2)应该取0,但如果取0,滤波器一旦收敛到一个错误的质量值,就永远无法靠后续量测把偏差拉回来——因为协方差已经趋于0,增益也趋于0。所以工程上会保留一个小的非零值,让它有"醒来"的可能。我调试下来Q(2,2)取0.1~1之间比较合适,这个值越大,质量估计收敛越快,但对量测噪声的敏感度也会提高,估计曲线会明显变糙。想要兼顾收敛速度和稳态平滑性,可以试试分阶段调Q:仿真前10 s用较大Q(2,2),让质量从初始猜测快速拉近真实值;后面把Q(2,2)调小,细修稳态精度。在Simulink里可以用Signal/Crossing模块或者手动切换仿真段来实现,但初学阶段建议先用固定Q把行为看明白再说。

4.2 量测噪声协方差R的依据

R描述的是车速传感器的噪声方差,这一项相对最客观。如果你用的是轮速传感器,在正常路面上的车速量测噪声标准差大约在0.1~0.5 m/s,取方差就是0.01~0.25。如果是GPS速度,低速时误差略大,高速时会好一些,也可以用0.5~1 m/s的标准差。

R的实际意义是"滤波器认为速度量测有多可信"。R越小,滤波器越相信速度读数,增益K的第一行越大,速度估计紧跟量测;但第二行质量修正的权重也会跟着被拉高,噪声会被放大了灌进质量通道。所以你会发现一个很反直觉的现象:R设置得太小,质量估计反而剧烈抖动,不是因为算法错了,而是因为量测噪声被算法当成真实速度变化去反推质量了。

反过来R设得太大,滤波器对所有量测都"爱信不信",质量估计可能长时间徘徊在初始值附近不动,收敛非常慢。调试时可以先用量测数据离线统计一下残差方差,再作为R的参考基准。

下面这张表是我多次试错后整理的整定参考区间,贴出来供参考:

参数推荐范围太小太大
Q(1,1) 速度过程噪声0.01 ~ 0.1估计过度平滑,响应变慢速度估计抖动明显
Q(2,2) 质量过程噪声0.1 ~ 1收敛后卡死,无法纠正质量估计噪声大
R 量测噪声方差0.01 ~ 1质量通道被噪声污染收敛极慢,不贴近真实值
P(2,2) 初始协方差1e4 ~ 1e6收敛慢,初始偏差持续很久前几步修正幅度过大,可能振荡

4.3 调参实操中的典型案例:收敛慢与发散

调试阶段我遇到过两个特别典型的失灵场景,直接说出来可能帮你省掉不少排查时间。

第一个是质量估计全程"躺平",从初始值1800 kg几乎不动。排查下来发现是初始协方差P(2,2)设得太小了,只有1。这个数字的含义是滤波器认为自己一开始就知道真实质量在±1 kg范围内,根本不需要量测给什么修正意见,于是增益K的第二个分量接近0,后面的量测自然无法推动质量状态。解决方法是把P(2,2)调回2.5e5,相当于告诉滤波器"我一开始对质量一无所知,误差可能大到500 kg",它才会认真听量测信号的意见。这个教训告诉我,初始协方差的意义不是"对初值的信息量",而是"对初值的诚实程度"。

第二个是质量估计在中途突然跳出一大截,随后又慢慢回落,像受到一次大幅干扰。这个我最终定位到是仿真中输入激励切换导致的。当扭矩从260 N·m瞬间掉到150 N·m时,加速度突减,滤波器的预测步里ff1表达式在短时间内剧烈变化,雅可比F也跳变,协方差P被短暂放大,增益K跟着冲高,质量估计就被带偏了一块。这种阶跃激励下的瞬态偏离其实在物理上可以理解——驱动力突变时,模型来不及完全解释掉速度变化率,余量就被"推"给了质量状态。想要抑制这种现象,最有效的手段是适度增大Q(1,1),让速度状态吸收更多模型不确定性,而不是把锅甩给质量。

5. 仿真结果分析:三种载荷下的估算表现

5.1 空载/满载/中载工况对照

我分别把模型里的真实质量设为1800 kg、2200 kg、2500 kg,跑了三组仿真,其余参数完全一致,初始质量猜测统一设成1800 kg。这个初始猜测本身就已经等于空载工况的真实值,所以空载那组从一开始就是准的;而满载那组初始偏差达到了700 kg,最能检验滤波器的纠错能力。

仿真结果整体上是符合预期的:加速段内,质量估计快速向真实值靠拢,前5 s内就能逼近到真实值附近,之后进入慢速收敛阶段,60 s仿真结束时,满载组的稳态误差大约在±3%以内,也就是2500 kg的估计值稳定在2425~2575 kg区间。空载组的稳态误差更小,在±1.5%左右。中载组的收敛速度介于两者之间,这跟驱动力相同时加速度随质量增大而减小的物理规律是完全一致的——质量越大,系统的加速度信噪比越低?实际上,反而是质量越大,相同驱动力下加速度越小,如果量测噪声不变,那么信噪比是降低的,所以大质量工况下辨识难度略大。这一点在工程上是需要注意的:空载和满载的质量估计精度天然不一样。

如果把质量估计曲线和真实质量曲线叠在一起看,会发现一个很不错的特性:滤波输出的质量曲线不会反复穿越真实值,而是呈指数样逼近。这是卡尔曼滤波协方差收缩的自然效果,说明滤波器内部的"信心"在逐步建立,后面的量测逐渐变成对已有估计的微调。

5.2 收敛速度与稳态精度的平衡

这里的核心矛盾是:参数设置让收敛快一点,稳态的曲线就会糙一点;想让稳态曲线平滑,收敛又会拖沓。我在多次实验中找到的一个相对好用的平衡点就是代码里那组数:Q = diag([0.05, 0.5]),R = 0.25,P0(2,2) = 2.5e5。在这个参数下,满载工况大约4~6 s收敛到真实值±100 kg范围,稳态时质量估计曲线上的峰峰抖动大约在±80 kg左右,整体表现可用于实际工程逻辑。

如果你追求更平滑的稳态曲线,可以把Q(2,2)从0.5降到0.05,代价是满载组收敛时间可能拉长到15 s以上,对于某些需要快速响应的控制策略来说就太慢了。反之如果你想要更快的收敛速度,比如在线起步阶段就要知道大概载荷,可以把Q(2,2)提到2,稳态抖动会随之明显变大。

这个矛盾没有标准答案,主要看下游控制需求。我的经验是:质量估计这类慢变量,宁可选略保守的收敛速度,也不要让稳态抖动太大,因为控制模块用到一个带着±3%抖动的质量值,平顺性感受很差。很多控制策略不求实时质量曲线跟皱眉头似的精确,更在意它稳定不跳变。

5.3 激励不足时的可观测性问题

我在后面补了一组"匀速巡航"工况的仿真,直接把扭矩设为恒定值,车速稳定在20 m/s附近,加速度趋近于0,让质量在流逝的时间里几乎收不到新信息。结果很有意思:质量估计不像大家想象的那样维持在原处不动,而是缓慢地向一个偏离真实值的方向漂移——这是因为Q(2,2)的非零项在持续向协方差里注入不确定性,卡尔曼增益把这个不确定性转化为对质量的修正,但由于量测中缺乏与质量相关的激励,这个修正在噪声驱动下变成了随机游走。

这个现象很真实,它指向一个深层次问题:在匀速工况下,质量在系统方程里不具备可观测性,卡尔曼滤波无法从量测中提取质量信息。这不是算法的问题,是系统本身的物理信息不足。工程上处理这个问题的通用办法是设置激励检测器:只有当加速度绝对值超过某个阈值,比如0.2 m/s²,才允许质量估计结果对外发布或被控制模块采用,否则保持此前已收敛质量值,避免把游走结果递给下游模块。我在Simulink里实现这个逻辑很简单,在EKF输出后面接一个Switch判断加速度阈值即可。这个细节往往是仿真模型跟实车逻辑差异的关键一环,恰恰是它决定了整套算法在不同工况下是否可靠。

6. 踩坑记录与工程化建议

6.1 仿真结果看起来"完美"还远远不够

最开始跑通模型时,我盯着Scope里几乎完全重合的速度曲线和质量逼近曲线,一度以为问题解决了。后来仔细做残差分析才发现,速度估计残差的实际统计方差远大于我设置的R。这说明我的模型里可能存在未建模的动态偏差,比如阻力系数不准、传动效率被当成常数处理,这些偏差被EKF的模型不确定性项吸收了,但反映在残差上就变成了"超额噪声"。如果你发现滤波后的v_hat曲线和v_meas曲线贴合得很漂亮,但残差方差明显大于R的上限,就要停下来想一下模型本身是否还有漏项,而不是继续压参数。

另一个容易自我欺骗的是只看一条仿真工况。我建议至少设计三组覆盖不同加速度区间的工况:低速大扭矩加速、高速稳定巡航、带坡度的爬坡(如果用坡度信号),只有在这几类工况下质量估计都保持收敛且稳态不跳变,才敢说模型可用。

6.2 从Simulink到实车的距离

仿真里各个环节都是理想的:阻力系数恒定、坡度已知、传动效率固定。实车上的情况要复杂很多——坡度是个未知量,默认0会让上坡工况下质量估计天然偏大,因为坡度阻力被质量项吸收了;转弯工况下轮胎滑移率变化会引入额外的力;风阻在强侧风时也会偏离标称值。所以如果要做实车验证,我建议优先考虑两个方案。

第一个是坡度补偿方案:如果车上能拿到纵向加速度计的读数,可以把"加速度计读数 - 车速导数"粗略估计出坡度分量,再把坡度项补偿进阻力公式里,这样质量估计才不会被坡度污染。第二个是联合仿真方案:用Carsim提供高保真车辆动力学信号,Simulink里的EKF直接消费Carsim输出的驱动力矩和车速,形成闭环验证。Carsim的好处是它的轮胎、悬架、空气阻力模型比Simulink里的简化模型精细得多,能帮助你提前发现"算法在理想模型上成立、在精细模型上尴尬"的落差。

代码生成方面,MATLAB Function块在Simulink Coder下可以生成C代码,但要注意persistent变量的初始化逻辑在嵌入式环境里要保证全局静态变量被正确清零,浮点运算尽量统一成double或者根据ECU能力降成float,避免精度不一致导致协方差矩阵更新异常。

6.3 后续扩展:坡度联合估计、UKF对比、RLS对照

如果你把质量估算这条路走通了,可以顺手往几个方向扩展。

第一是坡度联合估计。把坡度θ也放进状态向量,状态方程里加上θ的慢变假设,x = [v, m, θ]ᵀ,量测仍然只有车速。这个系统有三个状态、一个量测,可观测性会变差不少,但依然可以跑。实测中坡度质量和加速度计的配合能显著改善坡道工况的辨识精度,代价是雅可比矩阵推导工作量又上了一个台阶。

第二是UKF对比。EKF靠一阶泰勒展开做线性近似,UKF则通过Sigma点集来传播分布的均值和协方差,对强非线性系统更稳健。车辆质量估算这种非线性程度中等的系统,两者的估计精度差异其实不大,但UKF无需推导雅可比矩阵,代码维护成本低,只是计算量更大。如果你是做研究生课题,这组对比可以作为算法深度分析部分的内容。

第三是递归最小二乘(RLS)对照。RLS的线性回归结构天然适合"输入是驱动力、输出是加速度"这种形式的质量辨识,而且在某些简单场景下收敛比EKF还快。但RLS对噪声协方差和遗忘因子的组合非常敏感,也不像EKF那样天然处理量测噪声分布,所以两者的适用场景有微妙差别。把EKF、UKF、RLS在相同工况下做一次横评,是我觉得对这个题目最有价值的工程化收尾。

就个人体会而言,卡尔曼滤波估算车辆质量这个项目最大的收获不是跑通了一个Simulink模型,而是让我明白:状态估计算法的效果上限,实际上是由系统物理模型的可观测性和激励条件决定的。调Q、调R只是在给定的信息条件下做最优权衡,永远无法凭空挤出模型里不存在的信息。真把模型和工况理解透了,滤波器的表现自然会上去。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询