ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

轮速计算车速:低通与高通滤波选择及工程调参实践

轮速计算车速:低通与高通滤波选择及工程调参实践 1. 从一次轮速信号抖动排查说起前阵子帮朋友调一台履带底盘的行走控制他反馈的问题很具体车子直线跑起来还行一旦进入低速蠕行或者过坎仪表上显示的车速就抽风——数字在0和实际值之间来回跳偶尔还蹦出个负值。控制器里用的车速是由四个轮速传感器平均算出来的按理说不该这么飘。我让他把原始轮速曲线和滤波后的车速曲线同时打出来看一眼就看出问题了他在计算车速前对轮速做了高通滤波。这个选择乍看挺有道理——轮速信号里混着零漂和低频干扰高通不是正好把低频脏东西滤掉吗但恰恰是这个直觉把真正有用的车速信息也一起滤没了。低速时车轮转得慢轮速信号本身就是低频的高通一开信号直接被削平剩下的全是噪声车速自然乱跳。这件事让我意识到计算车速时该用低通还是高通这个问题看着像道送分题实际上踩坑的人真不少。它背后牵扯的是对信号频谱、车速物理本质和滤波目的三者的理解。这篇就把这个问题彻底讲透为什么车速计算几乎总是选低通什么情况下会有人误用高通两种滤波在轮速场景下的具体表现差异以及工程上真正落地时该怎么设计滤波器参数。不管你是做整车控制、底盘电控还是机器人/AGV的里程计只要涉及轮速算车速这篇都能直接拿去用。2. 先搞清楚车速信号到底长什么样要回答用哪种滤波得先弄明白我们处理的信号本身是什么特性。很多人一上来就纠结滤波器类型却从没认真想过轮速信号在频域上到底分布在哪儿车速这个物理量随时间变化的快慢是怎样的把这两个问题想清楚答案基本就自己浮出来了。2.1 车速是一个慢变量它的能量集中在低频车速的本质是车辆平动速度受整车质量、驱动力、阻力共同决定。一辆车从0加速到60km/h就算地板油也得几秒正常行驶中车速的变化率通常远小于1g的加速度对应值。换算到频域车速信号的主要能量集中在0到几赫兹这个极窄的低频段。你正常开车车速曲线就是一条平滑的、缓慢起伏的线它天然就是个低频信号。这一点非常关键。滤波器的选择本质上是要保留信号频段、抑制干扰频段。既然车速是有用的低频信号那我们就应该让低频通过、把高频挡掉——这正是低通滤波器的定义。所以从信号本身特性出发答案已经很明显了。2.2 轮速信号里的噪声和干扰都在高频那轮速信号里哪些是我们不想要的主要有几类齿圈/磁钢加工误差和安装偏心每转一圈会产生周期性的高频波动频率等于齿数乘以转速低速时可能几十赫兹高速时能到上千赫兹。电磁干扰传感器线束耦合进来的开关噪声、PWM驱动器的辐射频率通常很高。量化噪声数字采集的台阶效应表现为高频抖动。路面激励引起的轮速瞬时波动过坎、打滑、抱死时轮速会突变这些突变在频域上表现为高频分量。看出来了吗干扰几乎全在高频有用信号在低频。这就是一个标准的低通保信号、高通保噪声的局面。用低通信号留下、噪声滤掉用高通等于把信号扔了、把噪声留下——完全反了。2.3 一个容易被忽略的点低速时信号频率更低有人可能会想高速时轮速信号频率高会不会和噪声混在一起不好分确实高速时齿圈波动频率会升高但它依然是有规律的周期分量而且车速本身还是低频。真正麻烦的是低速工况车速接近0时有用信号频率趋近于0这时候如果用了高通截止频率哪怕只设0.5Hz也会把整个车速信号干掉。这就是我朋友那台车低速抽风的根本原因——高通在低速时把信号清零了。提示判断该用低通还是高通最朴素的办法是问自己一句——我想要的信号是快变的还是慢变的慢变信号配低通快变信号配高通。车速是典型的慢变量答案不言自明。3. 低通和高通在轮速算车速里的真实表现对比光讲道理不够工程上得看数据。我拿一段实测轮速数据做了对比实验同一组四轮轮速原始信号分别经过低通和高通处理后再做平均得到车速观察两者的输出差异。下面把结论摊开讲。3.1 低通滤波车速平滑但要注意相位滞后低通滤波后的车速曲线非常干净低速蠕行时数字稳定过坎时的瞬时抖动也被压下去了。这是符合预期的。但低通有个绕不开的代价相位滞后。一阶低通的滞后时间常数约等于1/(2πfc)fc是截止频率。比如截止频率设2Hz滞后大约80ms。这个滞后在车速闭环控制里是要命的——控制器以为的车速比实际车速慢半拍容易引起超调或振荡。所以低通不是随便设个截止频率就完事得在平滑度和滞后之间找平衡。截止频率越低越平滑但滞后越大越高滞后越小但噪声滤不干净。这个权衡后面第4节会详细讲怎么定。3.2 高通滤波低速直接归零高速残留噪声高通滤波的表现就惨不忍睹了。低速时车速信号频率低于截止频率被大幅衰减输出趋近于0于是仪表显示0车轮稍微一动信号频率刚过截止点输出又突然跳起来形成0和实际值之间反复横跳的现象。高速时车速信号能通过但那些高频噪声同样畅通无阻车速曲线毛刺明显。更隐蔽的问题是高通会把车速的直流分量也就是真实平均车速滤掉只留下变化部分。这意味着你得到的根本不是车速而是车速的波动量。用它去做里程积分里程会严重偏小用它做速度环反馈稳态误差巨大。3.3 对比表格一张表看清两者差异对比维度低通滤波高通滤波对车速信号低频保留略有衰减严重衰减甚至归零对高频噪声有效抑制完全保留低速工况表现稳定可能有轻微滞后抽风、跳变、归零高速工况表现平滑毛刺明显直流分量平均车速保留丢失相位滞后有与截止频率相关有方向相反适用性适合车速计算不适合车速计算结论很明确计算车速低通是正解高通是误区。那为什么还会有人用高通我分析下来通常是两种误判一是把去除零漂和高通划等号其实零漂是极低频的直流偏置用去均值或极低截止频率的高通确实能处理但代价是连车速一起滤了正确做法应该是在标定阶段消除零漂而不是靠滤波二是把轮速信号的波动误当成有用信息想提取加速度那才需要高通但那是另一个需求了。4. 工程落地低通滤波器到底怎么设计和调参知道了该用低通接下来的问题是用几阶截止频率设多少离散化怎么实现这部分是真正决定成败的地方也是很多文档一笔带过、实际却最容易翻车的地方。4.1 一阶还是二阶先看滞后容忍度一阶低通RC滤波实现简单计算量小相位滞后相对温和是轮速滤波最常用的选择。二阶低通滤波更陡峭对高频抑制更强但相位滞后更大且容易在截止频率附近产生谐振峰调不好反而引入振荡。我的经验是轮速算车速优先一阶低通。因为车速本身不需要特别陡的过渡带一阶足够把齿圈波动和电磁噪声压下去。只有在噪声特别恶劣、且对滞后不敏感的场景比如纯显示用途才考虑二阶。如果确实要用二阶建议用巴特沃斯型避免谐振峰。4.2 截止频率怎么定从工况反推截止频率fc是低通滤波的核心参数。定得太低滞后大、响应慢定得太高噪声滤不干净。定fc的方法我一般分三步确定车速信号的最高有效频率。正常驾驶中车速变化的最快情况比如紧急制动减速度约1g对应车速变化率约9.8m/s²。假设车速100km/h约27.8m/s从27.8降到0大约2.8秒这个过程的等效频率大约0.36Hz。所以车速有效频率上限大概在1Hz以内。确定需要抑制的噪声最低频率。齿圈波动频率 齿数 × 转速。假设齿圈48齿车速10km/h时轮速约1.4r/s波动频率约67Hz。所以噪声从几十赫兹起步。在两者之间取截止频率。信号上限约1Hz噪声下限约几十Hz中间有大片空白。fc取2到5Hz是常见区间既能保留车速动态又能有效压制噪声。我朋友那台车最后取的是3Hz低速稳定性和制动响应都兼顾了。注意如果系统对制动响应要求极高比如ABS/ESCfc可以适当提高到5到10Hz但此时要配合更好的传感器和线束屏蔽否则噪声会漏进来。4.3 离散化实现别直接照搬模拟公式工程上都是数字控制低通得离散化。一阶低通的连续传递函数是H(s) 1 / (1 s/(2πfc))离散化常用后向差分或双线性变换。后向差分实现最简单代码就一行// 一阶低通滤波后向差分实现 // fc: 截止频率(Hz), Ts: 采样周期(s) float alpha 2.0f * 3.1415926f * fc * Ts / (1.0f 2.0f * 3.1415926f * fc * Ts); y y alpha * (x - y); // x为本次输入y为滤波输出这个alpha就是滤波系数取值0到1之间。alpha越小滤波越强、滞后越大。注意采样周期Ts必须和实际调用周期一致如果任务周期抖动大滤波效果会不稳定。我见过有人把Ts写死成10ms结果实际任务20ms才跑一次等效截止频率直接减半滞后翻倍。4.4 四轮轮速的融合顺序先滤波还是先平均这是个细节但影响不小。有两种做法先对每个轮速单独滤波再求平均能分别抑制每个通道的噪声但如果某个轮子打滑它的滤波输出仍会污染平均值。先求平均再对平均车速滤波计算量小且平均本身就有一定降噪效果但单个轮子的异常会先污染平均再被滤。我的建议是先对每个轮速做轻量滤波去毛刺再求平均最后对车速做一次低通。这样既处理了单通道噪声又保证了最终车速的平滑。如果要做打滑识别还得在平均前加一层轮速一致性判断把明显偏离的轮子剔除这属于更高阶的处理后面第5节会提。5. 那些年踩过的滤波坑与排查思路滤波这东西参数调对了岁月静好调错了就是玄学。我把轮速算车速场景里踩过和见过的坑整理一下附上排查链路方便你对照复现。5.1 坑一低速抽风误以为是传感器坏了现象低速时车速显示在0和实际值之间跳。第一反应往往是轮速传感器故障换传感器、查线束折腾半天没用。排查链路先抓原始轮速和滤波后车速的时域曲线。如果原始轮速正常有稳定输出而滤波后车速抽风那问题一定在滤波环节。再看滤波器类型——如果是高通基本就锁定了。改低通问题消失。这个坑的本质是把滤波问题误判成硬件问题浪费大量时间。5.2 坑二滤波系数写死换采样率后失效现象代码在A项目跑得好好的移植到B项目后车速要么太毛要么太肉。根因滤波系数alpha是按固定采样周期算的B项目任务周期不同等效截止频率就变了。解决办法是把alpha的计算放到初始化里用实际Ts动态算而不是写死常数。或者干脆在代码里用截止频率和Ts实时计算alpha可读性和可移植性都更好。5.3 坑三滤波太狠制动时车速下不来现象紧急制动时仪表车速下降明显滞后于实际控制器误判还在高速制动策略延迟介入。根因截止频率设得太低比如0.5Hz滞后时间常数约300ms制动这种快速工况下滞后就暴露了。解决办法是提高fc或者采用变截止频率策略稳态时用低fc求平滑检测到制动/大加速度时临时提高fc求响应。这种自适应滤波在要求高的场合很实用。5.4 坑四忽略轮速打滑平均值被带偏现象单侧车轮打滑时平均车速偏高里程和实际对不上。根因四个轮速直接平均打滑轮的高值拉高了均值。这不是滤波能解决的属于数据融合问题。正确做法是先做轮速一致性判断剔除异常轮再平均。判断方法可以用四轮轮速的中位数、或者基于轮速差和加速度的合理性检验。滤波只负责去噪不负责纠错这个边界要分清。5.5 坑五把高通和去趋势混为一谈现象有人想去除轮速的缓慢漂移直接上了高通结果车速没了。根因缓慢漂移是极低频接近直流去漂移确实可以用高通但截止频率要设得极低比如0.01Hz而且更好的做法是在标定阶段做零位补偿。用常规截止频率的高通去漂移等于杀敌一千自损八百。这个坑的本质是没区分去直流偏置和去低频信号两者截止频率差了几个数量级。6. 进阶什么时候高通才真正派上用场讲了这么多低通的好话也得给高通正名——它不是没用只是不该用在计算车速上。在轮速相关的信号处理里高通有它自己的正确位置。6.1 提取轮速波动量用于路面识别如果你关心的不是车速本身而是轮速的高频波动比如想通过轮速波动特征识别路面类型粗糙路面波动大、平整路面波动小那这时候高通就对了。做法是先低通得到平滑车速再用原始轮速减去平滑车速剩下的就是波动量等效于高通。这个波动量的能量和频率特征可以用来做路面分类。6.2 计算加速度对车速做微分需要先滤波车速的微分是加速度。微分运算本身是个高通特性会放大高频噪声。所以正确流程是先对车速做低通去噪再微分求加速度而不是直接对原始轮速高通。很多人求加速度时发现噪声爆炸就是因为跳过了前置低通。6.3 带通滤波同时要车速和波动时的折中有些场景既要平滑车速又要保留一定动态可以用带通下限截止频率设很低保留车速上限截止频率设较高抑制高频噪声。但带通本质是低通加高通下限那个高通依然会威胁低速车速信号所以下限必须设得极低实际用起来要小心。6.4 一个实用的组合架构综合下来我在轮速处理里常用的架构是这样的原始轮速 → 单通道轻量低通去毛刺fc较高如20Hz四轮一致性判断剔除异常轮求平均得到车速原始值对车速做低通fc 2到5Hz得到平滑车速需要加速度时对平滑车速微分后再轻量低通需要波动量时用原始轮速减平滑车速这个架构把低通用在了该用的地方高通差分只在需要波动或加速度时出现各司其职。7. 我在实际项目里的一些参数经验最后分享几个我实际调过的参数组合供参考但切记要结合自己的传感器、齿圈和工况调整不能照搬。应用场景采样周期截止频率fc说明普通仪表显示10ms2Hz追求平滑滞后可接受车速闭环控制10ms5Hz兼顾响应配合良好传感器ABS/ESC5ms10Hz响应优先需硬件抗扰里程积分20ms1Hz平滑优先积分误差小路面识别10ms低通20Hz差分保留波动特征几个实操心得第一先抓数据再调参别凭感觉设fc把原始和滤波后曲线叠在一起看一目了然。第二变截止频率很实用稳态低fc、动态高fc用加速度或制动信号触发切换。第三滤波不是万能的传感器质量、线束屏蔽、接地做不好再好的滤波也救不回来硬件是地基。第四留好调试接口把滤波前后的数据都能实时上传出问题时能快速定位是滤波还是别的环节。回到最初那个问题——计算车速该用低通还是高通答案已经很清楚低通。因为车速是慢变的低频信号干扰是高频的低通保信号、抑噪声方向正确高通则相反会把车速本身滤掉低速时尤其致命。高通不是没用但它属于波动提取、加速度计算这些场景不该出现在车速计算的主链路上。把这个逻辑理顺轮速滤波这件事就不会再让你纠结了。
返回列表