混合主动降噪算法——SFANC‐FxNLMS算法
算法思路总结于论文:A Hybrid SFANC-FxNLMS Algorithm for Active Noise Control Based on Deep Learning。
算法背景
主动降噪(ANC)的核心原理是产生与不需要的噪声振幅相等、相位相反的抗噪声来抑制噪声 。但在实际应用中,传统的两种主流算法各有利弊:
- 自适应算法(FxNLMS):优点是能够自适应优化,稳态误差极低,降噪效果好 。但缺点是收敛速度慢,一旦遇到突发性、快速变化的非平稳噪声(比如突然驶过的汽车、鸣笛),它往往反应不过来 。
- 固定滤波器算法(SFANC):系统里提前存好了针对各种噪声的滤波器,遇到噪声直接切换,响应极快 。但缺点是过于死板,如果选错了滤波器,或者实际噪声和训练时有偏差,就会留下很大的残余噪声(误差大) 。
基于上面两种算法的优缺点,提出了一种混合 SFANC-FxNLMS 算法,用深度学习给算法装上智能大脑,先快速选定一个大致准确的方向,再让自适应算法去精雕细琢 。
算法详解
1、离线准备
作者使用了 15 种不同频段的宽带噪声,利用基础算法提前训练出了 15 个最优的控制滤波器w(这是基于最基础的NLMS算法,进行缓慢收敛得到的),并把它们存进数据库 。然后生成了 80,000 条包含不同频段、幅度的高保真噪声波形来训练一个一维卷积神经网络(1D CNN) 。这个模型的作用是:只要听 1 秒钟的声音,就能立刻判断出该调用哪一个滤波器。
2、宏观调度
主要有系统内的协处理器(专门跑 AI 模型的芯片)进行处理。麦克风每采集 1 秒钟的噪声,就会把它交给 1D CNN 模型 。为了保留包含相位信息的信号特征,模型会先对输入的波形进行归一化处理,将数值缩放到 (-1, 1) 的范围内 。1D CNN 迅速识别当前属于什么噪声,输出一个最优滤波器的索引序号,并发送给实时控制器 。
3、微观微调
这部分在实时处理器上运行,它的速度极快,是在每一个音频采样点上进行的。当实时处理器收到 1D CNN 发来的索引序号时,如果不等于当前使用的序号,就会瞬间完成切换 。但是,预训练的滤波器不一定 100% 贴合当前的真实环境。于是,FxNLMS 算法在此基础上接管,在每一个采样点上自适应地微调滤波器的权重 。
总结
传统FxNLMS在遇到环境变化时往往需要一个漫长的自适应摸索过程才能达到理想的降噪效果,而混合算法则巧妙地引入了一个轻量级的1D CNN作为智能大脑,在听到噪声的瞬间就能识别其特征,并直接调用数据库中最合适的预训练滤波器作为完美的初始起点,随后再交由FxNLMS算法在采样级别进行精准微调。
本算法的优势就是可以极大的提高NLMS算法收敛的速度,因为在进行NLMS算法之前,通过提前训练选择一个适合的跳板,然后再用NLMS算法进行微调。
注意:"合适的跳板"也是通过最初的NLMS算法缓慢收敛得到的。
