3.2 FxLMS核心算法 本节摘要:FxLMS(滤波参考最小均方算法)是 ANC 的行业标准答案:在 LMS 的权值更新通路里插入一个次级路径估计模型,让梯度方向重获物理一致性。本节给出完整的信号流、伪代码与开销核算,并用一次车载调参案例展示步长与模型精度的相互牵制。 3.1 节的试水暴露了纯 LMS 在声学环路里的致命伤:权值更新用的梯度方向没有计入次级路径,等于交易员按失真的行情下单。这一节开的药方只有一步——在更新通路里插一个次级路径的估计模型——但它值得用整节的篇幅讲透,因为这一步就是"ANC 算法"与"通用自适应滤波"的分界线。 为什么参考信号必须先被滤波 先把物理链条摆正。
本节摘要:FxLMS(滤波参考最小均方算法)是 ANC 的行业标准答案:在 LMS 的权值更新通路里插入一个次级路径估计模型,让梯度方向重获物理一致性。本节给出完整的信号流、伪代码与开销核算,并用一次车载调参案例展示步长与模型精度的相互牵制。
3.1 节的试水暴露了纯 LMS 在声学环路里的致命伤:权值更新用的梯度方向没有计入次级路径,等于交易员按失真的行情下单。这一节开的药方只有一步——在更新通路里插一个次级路径的估计模型——但它值得用整节的篇幅讲透,因为这一步就是"ANC 算法"与"通用自适应滤波"的分界线。
先把物理链条摆正。控制器输出 y 并不是直接灌进误差传感器的——它要经过功放、扬声器、空气(或结构)、麦克风这一整条次级路径 S 才变成真实的对冲声压。于是目标点处的残余实际是 d 加上 S 作用后的 y,即 e = d + S 作用于 y。求最优权值要对 e 的均方求梯度,梯度里必然带着 S 的身影;LMS 却用裸的输入向量 x 乘误差来近似梯度,等于假设 S 是纯增益加零时延——假设不成立时,梯度方向在相位上错开,错得多的频段上权值更新实际是在爬坡而不是下山,系统发飘甚至发散。
FxLMS 的修正只有一个动作:把参考信号 x 先送进一个次级路径估计模型,用它的输出替代裸 x 参与权值更新。这个"滤波后的参考信号"就是算法名字里 Filtered-x 的来历。直觉上这步很妙:模型是对 S 的仿真,把 x 先仿真一遍"S 会怎么折腾它",再拿去算梯度,梯度方向就与真实物理对齐了。代价是每采样多一趟滤波运算,模型阶数 M 决定这笔开销。
一句话概括:FxLMS 不消除次级路径,而是把它显式地写进学习规则——承认市场有滑点,把滑点模型装进交易策略,而不是假装滑点不存在。

把主循环写成伪代码,每采样周期执行一遍。设主滤波器 L 阶、模型 M 阶:
# FxLMS 主循环,每采样周期执行一次 输入: x_n # 当前参考信号采样 状态: W[0..L-1] # 主滤波器权值 Sh[0..M-1] # 次级路径模型系数(离线标定或在线更新) x_buf, yf_buf # 输入与滤波参考的延迟线 1. x_buf 压入 x_n # 维护参考延迟线 2. y = sum(W[i] * x_buf[i], i=0..L-1) # 主滤波:生成对冲信号 3. 输出 y 到 DAC 功放扬声器 # 下单 4. yf_buf 压入 y_n # 把对冲信号喂给模型支路 5. xf = sum(Sh[k] * yf_buf[k], k=0..M-1) # 模型仿真出滤波参考 6. e_n = 读取误差麦克风 - (d 估计项) # 盯市(前馈里直接读残余) 7. W[i] += mu * e_n * xf 对应延迟样本 # 用滤波参考更新权值
开销核算:第 2 步 L 次乘加,第 5 步 M 次乘加,第 7 步 L 次乘加,合计每采样约 2L 加 M 次乘加。典型耳机配置 L 为六十四、M 为六十四,每采样约一百九十二次乘加;四万八千赫兹采样率下就是每秒约九百二十万次乘加——对现代音频 DSP 的定点内核来说是零头,真正的压力来自多通道(乘通道数)与附加模块(在线建模、风噪检测、限幅器)。这份账在第 6 章选型时会重新拿出来用。
FxLMS 的收敛对模型误差表现出令人意外的宽容:理论上,只要模型相位误差小于九十度(对所有频率),算法就保持稳定——相位错得不超过直角,梯度至少还有正确的分量,权值仍朝碗底爬。这个宽容量是 FxLMS 能在真实系统里活下来的原因:耳机的佩戴状态天天在变,模型不可能精确,但只要大形状没变,系统就还能工作。
宽容不等于无限。模型相位误差逼近九十度的频段,收敛速度趋近于零,稳态残余上升;超过九十度,方向反转,直接失稳。工程含义很明确:模型精度在主力降噪频段必须保证,在边缘频段可以放宽——这与 2.2 节"建模预算投向赚钱频段"的原则严丝合缝。另一个实践要点是模型的时延对齐:模型抽头数必须覆盖真实路径的纯时延加拖尾,少抽一段时延,相位误差在高频迅速爆表,这是新手调 FxLMS 最常见的翻车点。
背景。某燃油 SUV 在怠速与缓加速工况下,车厢内二阶点火频率(四缸机,转速乘二再除以六十,怠速约二十三赫兹)及其四次、六次谐波明显。项目采用前馈式主动式座舱降噪:参考来自 CAN 总线的转速信号(传感式参考,无声学反馈污染),执行器是原车低音单元,误差麦克风在头枕内。控制器为 FxLMS,主滤波器按窄带结构配置(详见 3.3 与第 4 章)。
操作。标定分四步。第一步,台架上扫频辨识次级路径:从低音单元到头枕麦克风,覆盖二十到五百赫兹,采样率两千赫兹专用于控制环路,模型阶数六十四,覆盖路径纯时延约四毫秒加拖尾。第二步,设置初始步长:按窄带结构下的稳定判据取上限五分之一。第三步,怠速静态标定:锁定转速,观察误差信号收敛,微调步长使收敛时间落在两秒内且稳态残余达标。第四步,动态工况验证:从怠速缓加速到每小时六十公里对应的转速,观察跟踪是否掉线。
结果。怠速工况,二阶分量对冲深度约十四分贝,总声压级下降约四分贝,主观评价"发动机嗡鸣明显变轻"。缓加速工况暴露问题:转速爬升时对冲深度瞬时跌到六分贝、两秒后恢复——步长不够大,跟不动阶次频率的快速爬升。把步长上调一档后动态跟踪合格,但怠速稳态残余回升了约一点五分贝,梯度噪声变大。最终采用步长调度:转速变化率超过阈值时用大步长,稳态时切小步长,两个工况同时达标。
**结果之后,模型精度的考验来了。冬季标定的车夏季复测,次级路径因内饰件热胀与座椅状态变化而漂移,某频点模型相位误差逼近限值,该频段深度掉了三分贝。团队随即启用第 5 章的在线建模机制,低速工况下定期注入探询信号刷新模型,问题消除。
解读。这个案例浓缩了 FxLMS 工程化的三条主线。其一,传感式参考加窄带结构,让算力开销降到耳机的零头,但换来的约束是只对与转速同步的阶次建仓——非同步的路噪风噪一概不管,分工清晰。其二,步长不是常数而是策略:静态保安静、动态保跟踪,调度逻辑本身也是标定产物。其三,模型精度是会过期资产,离线标定的保质期以季节计,长期稳定依赖在线机制——这正是下一章 5.2 与 5.3 节存在的理由。
变式。若参考信号改用引擎舱加速度计而非 CAN 转速,优点是能捕捉到与转速不完全同步的燃烧激励成分,缺点是信噪比与温度漂移特性变差,模型支路需要更频繁的刷新。两种参考的取舍在第 6 章传感器选型里有系统对比。
💡 关键直觉:调 FxLMS 出问题时,先查三件事的顺序是——模型的时延对齐、模型的相位误差分布、步长大小。八成的问题在前两件,步长只是最后的微调旋钮;把发散原因全归咎于步长,是新手最常见的误诊。
标准算法立住了,下一节看工程里真正的算法动物园:什么场景换什么变体。