FxLMS Filter学习笔记
前言
当前耳机中的主动降噪技术中,有FxLMS的一席之地,本文根据参考文档整理学习笔记,理解一下主动降噪和FxLMS技术。
循序渐进的了解主动降噪
在【7】的文章中,贴出了索尼公司耳机为主动降噪设计的双mic结构,下图引用一下:
很容易理解为了主动降噪,在耳机的外层利用mic采集环境噪音,作为自适应滤波的参考信号,帮助完成降噪的目的,那为什么在喇叭附近也放置一个mic呢?它的目的是什么?其实如图中所列文字,主动降噪是分前馈和反馈两种方式的,上面的是hyrid混合降噪,当然也最复杂,理论上效果更好。在All About Active Noise Cancellation & How It Helps You Hear Better !一文中有一个图例,形象的说明了三者的构造,有兴趣可以看看,担心版权问题不引用了。简单的翻译一下前馈(feedforward)和反馈(feedbackward)特点:
- 前馈(feedforward)mic降噪:实时采集环境噪声,响应时间有优势,(文中还提到这样会令1-2Khz的高频噪声得到有效的衰减,暂时不明所以);但前馈无法得知自己的降噪效果,因为从机制上听不到speaker降噪后的声音。
- 反馈(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