首页/文章/ 详情

主动降噪不是黑科技!智能座舱静音大战北京车展,LMS算法深度拆解

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家/独家讲师
平台推荐
内容稀缺
5月前浏览313
 
点击文尾阅读原文报名
作者 | NVH仿真试验 仿真秀优秀讲师
首发 | 仿真秀App
图片  
2026北京车展与近期行业动态显示,主动降噪已成为智能座舱静谧性竞争的核心赛道。特斯拉通过 OTA 推送路噪主动降噪功能,用算法重构座舱静音体验;采埃孚发布纯软件底盘主动降噪方案,依托智能传感器与 CubiX 平台,无需新增硬件即可抑制 200Hz 胎噪峰值,降噪目标最高可达 10dB;歌尔 RNC 2.0 PLUS、国芯 CCD5001 车载 DSP 等国产技术快速崛起,路噪降噪可达 8dB (A) 以上,推动 ANC 从豪华车下放至主流车型,中高端车型搭载率快速突破 70%。
新能源时代电机噪声弱化,路噪、胎噪、低频轰鸣成为第一 NVH 矛盾。传统被动降噪依赖材料堆砌与结构优化,面对多路径耦合的低频峰值,往往优化有限、主观提升不明显,验收常处于及格边缘。而主动降噪凭借 “以声消声” 的技术优势,单频点可实现 5dB 以上显著衰减,成为突破 NVH 性能瓶颈、打造高端静谧座舱的必选方案。
在NVH工程领域,主动降噪技术相较于传统被动降噪,其降噪收益更为显著。例如,针对某一低频噪声峰值,主动降噪可实现5dB左右的明显衰减;而基于传递路径的结构优化,由于单个噪声峰值往往是多个传递路径共同作用的结果,并非由某一单一零部件或单体路径单独贡献,因此在制定可工程化的NVH优化方案时,难以获得显著的降噪效果。即便叠加多个结构优化方案,最终的主观噪声评价也无法实现质的提升,验收结果往往仅处于可接受的边缘。
在此背景下,LMS(Least Mean Square,最小均方)算法作为一种基于随机梯度下降的自适应滤波算法,被广泛应用于主动降噪系统中。该算法通过实时调整滤波器系数,使系统输出的“抗噪声”信号能够最大程度抵消原始噪声,最终让误差麦克风检测到的残余噪声趋近于零。当然这个基础算法有些弊端,因此在LMS算法的基础上已衍生出多种改进算法,本文将从公式和数值计算两个维度,详细解析这一基础算法的核心逻辑。
01    

物理表现与运行逻辑讲解    

1.下面引入具体的物理表现讲解上述流程图运行逻辑:
设X(n)为轮芯振动参考信号,P(z)为车身结构声学传递路径;轮芯振动经传递路径激励车身壁板,最终向乘员舱辐射形成人耳处噪声,记为期望信号d(n)。
W(z)为自适应滤波器(如三阶滤波器初始权值可设为[0,0,0])。参考信号X(n)经滤波器加权输出控制信号:$y(n),y(n)作为抵消反向声波,用于抵消舱内原始噪声d(n)。
定义残余误差信号:
以参考信号X(n)驱动LMS算法完成滤波器权值自适应更新,权值迭代基础公式为:式中:μ为固定学习率;代价函数采用均方误差,工程中用瞬时误差平方近似数学期望,即;∇J(w)为代价函数对权向量的梯度。
梯度方向是代价函数增长最快的方向,迭代公式中引入负梯度,使滤波器权值沿代价函数最快下降的方向更新。对梯度求解并化简后,得到LMS标准权值更新公式:。
02    

数值计算过程解析    

以下是上述流程的具体运行的计算过程,可以帮助更好的理解算法原理:

   

   
基础前提设定  
1、阶横向滤波器W(行向量),初始权重W(0)=[0,0,0]
2、LMS更新公式:
3、信号链路划分三条并行通路:
  • 通路①原生噪声通路:轮芯振动参考信号x(t)经车身/空气路径传递,形成人耳处原始噪声d(t);
  • 通路②降噪抵消通路:参考信号经滤波器权重运算,输出抵消声y(t),误差信号e(t)=d(t)−y(t);
  • 通路③LMS权重更新通路:参考输入向量+误差信号,实时迭代更新滤波器权重,实现自适应降噪。

   

   
第一时刻:t=0~t=0.001s  
1、通路①原生噪声
轮芯初始振动:x(t=0)=2经物理路径传递延时0.001s,人耳处原始噪声:d(t=0.001)=2.1(这里经过路径传递数值2.1只是举个例子,输入和输出有强相关性);
2、通路②抵消输出运算当前滤波器初始权重:W(t=0)=[0,0,0]
参考信号延时向量:x(t=0)=[2,0,0](参考输入向量,新样本移入、旧样本移出)
抵消声输出:
残余误差信号:
3、通路③LMS权重迭代
代入LMS更新公式:

   

   
第二时刻:t=0.001~t=0.002s  
1、通路①原生噪声
下一时刻轮芯振动:x(t=0.001)=2.05
经固定路径延时传递,人耳处原始噪声:d(t=0.002)=2.13
2、通路②抵消输出运算
滤波器更新后权重:W(t=0.001)=[0.42,0,0]
参考信号滑动更新:新样本移入、旧样本移出,重构延时向量x(t=0.001)=[2.05,2,0]
抵消声输出:
残余误差信号:
3、通路③LMS权重迭代
以上一时刻权重为基础,结合当前误差、参考向量更新:
03    

可运行Python实现代码    

以下给出过程代码,可直接在python里运行,感兴趣的朋友可以在文章末尾点赞和再看,发到本公 众号,我手动发您以下过程代码。

















































































































import numpy as npimport matplotlib.pyplot as plt# =====================解决Matplotlib中文显示问题 =====================plt.rcParams['font.sans-serif'] = ['SimHei','Microsoft YaHei','WenQuanYi Zen Hei']plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['font.family'] ='sans-serif'# ==========================================================================
class LMSFilter:    """标准LMS自适应滤波器实现。适用于实时或离线处理,用于系统辨识、噪声消除等场景。"""    def __init__(self, filter_order, step_size=0.01):        """初始化滤波器。        参数:        filter_order (int): 滤波器阶数(抽头数)。阶数越高,模型能力越强,但计算量越大,收敛可能越慢。        step_size (float): 步长参数 μ。必须在稳定范围内 (0 < μ < 2/输入功率)。通常从0.01这样的小值开始尝试。        """        self.order = filter_order        self.mu = step_size        # 初始化滤波器权重为零向量        self.weights = np.zeros(filter_order)        # 用于存储最近的输入样本,构成输入向量x(n)        self.input_buffer = np.zeros(filter_order)
    def adapt(self, desired, reference):        """处理一个采样点,并更新滤波器。        参数:        desired (float): 期望信号 d(n),即主输入(如带噪语音)。        reference (float): 参考输入 x(n),与干扰噪声相关(如参考麦克风采集的噪声)。        返回:        output (float): 滤波器输出 y(n)。        error (float): 误差信号 e(n),通常作为系统输出(降噪后的信号)。        """        # 更新输入缓冲区:将新参考样本移入,最旧的样本移出        self.input_buffer[1:] = self.input_buffer[:-1]        self.input_buffer[0] = reference        # 计算滤波器输出:权重向量与输入向量的内积        output = np.dot(self.weights, self.input_buffer)        # 计算瞬时误差        error = desired - output        # LMS核心:更新权重向量-input_buffer 参考信号序列        self.weights += self.mu * error * self.input_buffer        return output, error
    def filter(self, desired_signal, reference_signal):        """批量处理整个信号序列。        参数:        desired_signal (np.array): 期望信号序列。        reference_signal (np.array): 参考信号序列。必须与desired_signal长度相同。        返回:        output_signal (np.array): 滤波器输出序列(预测的噪声)。        error_signal (np.array): 误差信号序列(估计的干净信号)。        weights_history (np.array): 权重向量的历史记录,用于分析收敛过程。        """        n_samples = len(desired_signal)        output_signal = np.zeros(n_samples)        error_signal = np.zeros(n_samples)        # 可选:记录权重变化,用于调试和分析        weights_history = np.zeros((n_samples, self.order))        for i in range(n_samples):            output_signal[i], error_signal[i] = self.adapt(desired_signal[i], reference_signal[i])            weights_history[i, :] = self.weights        return output_signal, error_signal, weights_history

def test_lms_basic():    """基础测试:滤除一个正弦波干扰。"""    np.random.seed(42) # 确保结果可复现    Fs = 1000 # 采样率    t = np.arange(0, 1.0, 1 / Fs) # 1秒时长    # 生成干净信号(我们想保留的): 10Hz正弦波    clean = 0.5 * np.sin(2 * np.pi * 10 * t)    # 生成干扰噪声: 50Hz正弦波    noise = 0.8 * np.sin(2 * np.pi * 50 * t)    # 主输入:干净信号与噪声的混合    desired = clean + noise    # 参考输入:我们得到的噪声参考,可能与实际噪声有幅度和相位差异    # 这里模拟一个简单的线性失真:幅度变化+加一点随机扰动    reference = 1.2 * noise + 0.05 * np.random.randn(len(t))    # 创建并应用LMS滤波器    lms = LMSFilter(filter_order=32, step_size=0.02)    # 我们关心的是error_signal,即降噪后的输出    _, error_signal, weights_history = lms.filter(desired, reference)    # 可视化结果    fig, axes = plt.subplots(3, 1, figsize=(10, 8))    axes[0].plot(t, desired, 'b', alpha=0.7, label='带噪信号 (Desired)')    axes[0].plot(t, clean, 'r--', linewidth=2, label='原始干净信号 (目标)')    axes[0].set_ylabel('幅度')    axes[0].set_title('输入信号对比')    axes[0].legend()    axes[0].grid(True)    axes[1].plot(t, error_signal, 'g', label='LMS输出 (Error)')    axes[1].plot(t, clean, 'r--', linewidth=2, label='原始干净信号')    axes[1].set_ylabel('幅度')    axes[1].set_title('降噪效果对比')    axes[1].legend()    axes[1].grid(True)    # 绘制某个权重系数的收敛过程    axes[2].plot(weights_history[:, 5], 'm') # 跟踪第6个权重的变化    axes[2].set_xlabel('采样点')    axes[2].set_ylabel('权重值')    axes[2].set_title('滤波器权重收敛过程 (示例: w[5])')    axes[2].grid(True)    plt.tight_layout()    plt.show()    # 计算并打印性能指标:均方误差(MSE)改善    mse_before = np.mean((desired - clean) ** 2)    mse_after = np.mean((error_signal - clean) ** 2)    print(f"降噪前MSE:{mse_before:.6f}")    print(f"降噪后MSE:{mse_after:.6f}")    print(f"MSE改善:{10 * np.log10(mse_before / mse_after):.2f}dB")
if __name__ == "__main__":    test_lms_basic()
04    

LMS 主动降噪工程落地能力教程    

总之,随着 ANC/RNC 路噪主动控制快速普及,懂 LMS 核心算法、能落地调试已成为 NVH 工程师、声学算法工程师的核心竞争力。只懂被动优化、只会操作软件而不懂底层逻辑,将难以跟上软件定义声学、算法驱动静谧性的行业趋势。
为帮大家快速掌握 LMS 主动降噪工程落地能力,配套推出路噪多参考 TPA 传递路径分析 + LMS 主动降噪实战课程《NVH试验仿真必学硬核技能:Simcenter Testlab 实战教学路噪多参考TPA传递路径分析》。
限时特价 (限10名)
秒杀:399元(售价:500元 )
可回放/开发票/奖学金/加餐
讲师提供vip交流群/ 答疑/相关学习资料
NVH试验仿真必学硬核技能:Simcenter Testlab 实战教学路噪多参考TPA传递路径分析_SIEMENS 其他-仿真秀视频课程
以下是课程的具体安排:
路噪查不清?整改凭感觉?1 节课吃透多参考 TPA,精准定位根源!课程基于Simcenter Testlab 2019.1进行经典路噪TPA分析,主要包括:
  1. 多参考pca主成分分析实操
  2. 逆矩阵载荷提取实操
  3. 传递路径贡献分析实操
(1)车辆概况:
  • 副车架:前副车架(框形)与车身连接为弹性连接
  • 悬架:前麦弗逊独立悬架/后扭力梁式非独立悬架
(2)测试环境:
  • 测试地点:结构动态特性试验室 北京通州试验场
  • 测试工况:匀速60km_h (采用空挡熄火滑行65km_h-55km_h)
  • 测试路面:粗糙沥青路面
  • 道路环境:风速小于1.5m/s,车内背景噪声满足测试要求
(3)测试内容:
  • 道路工况:不同路面,整车状态下车内目标噪声及车身激励点振动加速度测试;
  • 试验室FRF测试:基于TB车身,激励点至车内目标点FRF测试,激励点至相应指示点FRF测试。
(4)激励点:
  • 该车前副车架与车身属于弹性连接,副车架与车身有4各连接点
  • 左、右下摆臂布置在前副车架上,每个摆臂与副车架有2个连接点
  • 动力总成后悬置布置在副车架上,与副车架有1个连接点
  • 底盘悬挂系统有左前、右前2个减震器,分别与车身各有1个连接点,左后减震器、弹簧、拖拽臂和右后减震器、弹簧、拖拽臂,分别与车身各有1个连接点。故本次试验总共有17个激励点,而每个连接点有X、Y、Z三个方向,所以激励点到目标点的传递路径总共有17X3=51条
总之,本课程从实车路噪传递机理切入,深度拆解多参考 PCA、载荷提取、路径贡献分析,结合本文 LMS 算法原理、数值计算与 Python 可运行代码,手把手带你完成 “路径定位根源 + 算法精准抵消” 的全流程闭环,掌握从测试、建模到算法调试的完整技能。
课程配套实车测试数据、标准工况方案与可复现代码,学完即可独立输出 ANC/RNC 方案与降噪验证报告,快速适配车企与 Tier 1 的量产开发需求,抓住主动降噪普及带来的职业增长机遇。更多内容可以关注我的精品课《汽车NVH振动噪声开发14讲》,见下图。
(完)
声明:本文首发仿真秀App,部分图片和内容转自网络,如有不当请联系我们,欢迎分享,禁止私自转载,转载请联系我们。欢迎投稿,投稿与技术交流请联系杨老师18610516616(微同)
图片  
     
点赞
       
       
转发
       
       
收藏
       
       
评论
       
     


来源:仿真秀App
振动汽车python新能源UMLMS声学电机材料机器人NVH控制试验ANSYSDAP
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-05-12
最近编辑:5月前
仿真圈
技术圈粉 知识付费 学习强国
获赞 12103粉丝 23560文章 4677课程 277
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈