FxLMS Filter学习笔记

前言

当前耳机中的主动降噪技术中,有FxLMS的一席之地,本文根据参考文档整理学习笔记,理解一下主动降噪和FxLMS技术。

循序渐进的了解主动降噪

在【7】的文章中,贴出了索尼公司耳机为主动降噪设计的双mic结构,下图引用一下:
在这里插入图片描述
很容易理解为了主动降噪,在耳机的外层利用mic采集环境噪音,作为自适应滤波的参考信号,帮助完成降噪的目的,那为什么在喇叭附近也放置一个mic呢?它的目的是什么?其实如图中所列文字,主动降噪是分前馈和反馈两种方式的,上面的是hyrid混合降噪,当然也最复杂,理论上效果更好。在All About Active Noise Cancellation & How It Helps You Hear Better !一文中有一个图例,形象的说明了三者的构造,有兴趣可以看看,担心版权问题不引用了。简单的翻译一下前馈(feedforward)和反馈(feedbackward)特点:

  1. 前馈(feedforward)mic降噪:实时采集环境噪声,响应时间有优势,(文中还提到这样会令1-2Khz的高频噪声得到有效的衰减,暂时不明所以);但前馈无法得知自己的降噪效果,因为从机制上听不到speaker降噪后的声音。
  2. 反馈(feedbackward)mic降噪:对噪声消除后的声音提供了反馈回路,理论上可以令声音更加纯净;但设计难度更大,容易引起环路的自激振荡(啸叫)

很显然市场上主流产品都是两个mic,即hybrid方案,那么这个方案是怎么实现的呢?在【11】中给出了基本的原理框图
在这里插入图片描述
这个前馈通道(Primary Noise+Reference Mic)和经典的ANC(Adaptive Filter)很接近,只不过增加了反馈通道(Error Mic)。比较一下经典的降噪框图【13】
在这里插入图片描述
可以看出ANC的反馈通道替换了自适应滤波器的加减器,至于工作的基本原理推荐博文【8】,写的深入浅出,通俗易懂。综上所述市场上的主动降噪耳机应该都具备两个mic,引用【14】文的图,对于耳塞型的耳机结构大致如下:
在这里插入图片描述

主动降噪的核心算法FxLMS Filter

利用经典的自适应滤波器也是可以进行噪声抑制的,即认为speaker处的噪声为信号 d d d,反馈mic采集到的信号为 e e e,而前馈mic采集到的为 x x x,经过anc模块的维信号 y y y,套用adaptive filter公式为: e ( n ) = d ( n ) − y ( n ) = d ( n ) − W T X ( n ) = d ( n ) − X T ( n ) W e(n)=d(n)-y(n)=d(n)-\bold W^T\bold X(n)=d(n)-\bold X^T(n)\bold W e(n)=d(n)y(n)=d(n)WTX(n)=d(n)XT(n)W
权重迭代公式为 W k + 1 = W k + 2 μ e ( k ) X ( k ) \bold W_{k+1}=\bold W_k +2 \mu e(k)X(k) Wk+1=Wk+2μe(k)X(k)当然实际上存在speaker,而这时候产生的信号是通过speaker变成模拟声音之后与噪声混合后的物理相消,所以此时自适应滤波器作为信号线性预测器来使用了。
不过上面的套用存在误差,真实的情景是信号 y y y处理完毕,要经过数模转换,还要播放到空气中产生振动,如果假设这些通道是卷积的,可以抽象为一个卷积滤波器S;同理前馈信号 x x x传播到speaker后的相位等信息也都发生了改变,姑且抽象为一个卷积滤波器P,那么框图就变成如下的样子:
在这里插入图片描述利用【15】中快速迭代方法的推导 ▽ [ e ( k ) ] = ▽ [ d ( n ) − S ( n ) ∗ W T X ( n ) ] = − S ( n ) ∗ X ( n ) \bold \triangledown[e(k)]=\bold \triangledown[d(n)-S(n)*\bold W^T\bold X(n)]\\=-S(n)*\bold X(n) [e(k)]=[d(n)S(n)WTX(n)]=S(n)X(n)这就得出了梯度的估算公式 ▽ ^ ( k ) = − 2 e ( k ) S ( k ) ∗ X ( k ) \hat{ \bold \triangledown}(k)=-2e(k)S(k)*X(k) ^(k)=2e(k)S(k)X(k)迭代公式为: W k + 1 = W k + 2 μ e ( k ) S ( k ) ∗ X ( k ) \bold W_{k+1}=\bold W_k +2 \mu e(k)S(k)*X(k) Wk+1=Wk+2μe(k)S(k)X(k)
很显然P滤波器是凭空想象的,也无法琢磨,但是S滤波器似乎还在环路内,也许能找到办法来估计一下参数,如果能得到一个无偏估计 S ^ \hat S S^,上面的自适应结果将令误差函数 e e e更加接近极小值,进而使得估计的噪声抵消结果完美,由此提出了FxLMS方法。大致的框图变成下面这样:
在这里插入图片描述上图中的P一般所指的维Primary path,S所指的Secondary Path。通过这样的算法,只要估计出S的滤波器系数,就可以从算法公式上取得更加接近零误差的结果。这些都理解的话,阅读【1】将事半功倍的了解FxLMS滤波器的构成。如果想更加深入的感受一下什么是P什么是S,参考文档【12】的图片应该更加直观和震撼:
在这里插入图片描述
上述的框图应该对了解fxlms类型的滤波器有了直观的认识,那么 S ^ \hat S S^参数的确定将是比较重要的话题了。

S ^ \hat S S^的估计

参考文档

1. FxLMS-based Active Noise Control: A QuickReview
2.Active Noise Reduction using LMS and FxLMS Algorithms
3.FxLMS Filter: wiki analog device
4.PERFORMANCE COMPARISON OF THE FXLMS, NONLINEAR FXLMS AND LEAKYFXLMS ALGORITHMS IN NONLINEAR ACTIVE CONTROL APPLICATIONS
5.Active Noise Control: Basic Understanding
6.CSR8670 — 说说什么是ANC、CVC、DSP降噪
7.主动降噪(Active Noise Control)
8.ANC主动降噪理论及Matlab代码实现
9.Adaptive Line Enhancer (ALE)
10.Kuo S M, Morgan D R. Active noise control: a tutorial review[J]. Proceedings of the IEEE, 1999, 87(6):943-973
11.Active NoiseControl SystemsAlgorithms and DSPImplementations
12.recent advances on active noise control:open issues and innovative applications
13.自适应滤波器原理,第五版
14.ANC主动降噪技术的原理
15.ANC 与 adaptive filter

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: FxLMS是自适应滤波器算法中的一种,全名为“自适应滤波的最小均方算法”(Adaptive Filter Least Mean Square)。fxlms matlab是指在MATLAB软件中用来实现FxLMS算法的代码。 FxLMS算法是一种与输入信号和期望响应信号的误差最小化相关的算法,被广泛应用于降噪、 echo cancellation 和系统辨识等领域。它利用自适应滤波的思想,不断更新滤波器的系数以逼近所期望的响应。 使用MATLAB来实现FxLMS算法,首先要定义输入信号和期望响应信号。然后通过计算误差信号,并根据误差信号来更新滤波器的系数。不断迭代这个过程,直到误差信号趋近于0或满足预设的终止条件。 在MATLAB中,可以使用相关的函数或算法来实现FxLMS算法,如filter等。首先,需要将输入信号和期望响应信号载入到MATLAB中,并定义滤波器的初始系数。然后,使用filter函数对输入信号进行滤波,并得到输出信号。计算输出信号与期望响应信号的误差,并根据误差信号来更新滤波器的系数。最后,根据要求设置迭代次数或误差容限,来实现算法的收敛和终止。 总之,fxlms matlab指的是在MATLAB软件中使用FxLMS算法进行自适应滤波的实现,它提供了一种方便、高效地处理信号降噪、 echo cancellation 和系统辨识的方法。 ### 回答2: FXLMS算法(Frequency-domain Modified Least Mean Squares Algorithm)是一种自适应滤波算法,主要应用于消除噪声、抑制回声或增强信号等方面。而MATLAB是一种常用的数学软件,具有强大的矩阵运算和数据处理能力。 FXLMS算法的基本原理是基于频域的LMS算法,在每个时刻通过估计主要噪声的频谱特性来进行频谱建模,然后通过计算滤波器系数的梯度减小误差,从而不断逼近用于滤波的最优滤波器。 在MATLAB中,可以利用其强大的信号处理工具箱和FFT函数来实现FXLMS算法。首先,需要确定待处理信号的采样频率和长度,然后通过FFT将信号从时域转换为频域表示,进而对信号进行频谱分析。接下来,利用FXLMS算法对噪声信号进行建模,得到滤波器的系数。最后,将滤波器系数与原始信号进行卷积,得到消除噪声后的信号。 MATLAB提供了丰富的函数和工具,可以方便地实现FXLMS算法。通过调用相关函数,如fft、ifft和filter等,可以快速实现信号的频域分析和滤波处理。同时,MATLAB还提供了可视化工具,可以实时显示处理前后的信号波形和频谱,便于分析和调试算法的性能。 总之,使用MATLAB实现FXLMS算法可以简化算法的实现过程,并且通过其强大的信号处理功能可以更好地理解和分析算法的性能。 ### 回答3: FXLMS(快速自适应LMS)是一种在自适应滤波器中常用的算法,用于主动噪声抑制和自适应控制系统中。FXLMS算法通过在输入信号和误差信号之间建立一种反相关系,来实现抗噪声和抑制系统中的干扰信号。 在Matlab中实现FXLMS算法,首先需要定义响应滤波器模型和期望输出信号。然后,利用输入信号和实际输出信号,使用LMS算法计算出误差信号。接下来,根据误差信号和参考信号之间的相关性,调整滤波器的权重。不断重复这个过程,直到达到期望的滤波效果。最后,将输入信号通过滤波器后得到输出信号。 以下是一个FXLMS算法的简单示例: 1. 定义响应滤波器模型: ```matlab order = 10; % 滤波器阶数 response_filter = dsp.LMSFilter(order); ``` 2. 定义期望输出信号: ```matlab desired_output = ... % 定义期望输出信号,可以是一个时间序列 ``` 3. 计算误差信号: ```matlab error_signal = desired_output - output_signal; % 假设output_signal为实际输出信号 ``` 4. 更新滤波器权重: ```matlab response_filter.adapt(input_signal, error_signal); % input_signal为输入信号 ``` 5. 重复以上步骤直到收敛。 利用FXLMS算法可以很好地抑制噪声和干扰信号,提高信号的质量和准确性。在实际应用中,可以根据具体情况调整滤波器的阶数、期望输出信号和相关参数,以达到最佳效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值