1 前言
版权声明:本文为博主原创文章,转载请附上博文链接!
在之前的博文中介绍了有源噪声控制中最常用的FxLMS算法。FxLMS算法实现简单,运算量小,然而该算法的瞬态特性和稳态特性都有改进的空间。有些算法是基于FxLMS算法的改进,有些则与FxLMS算法结构原理完全不同。这些算法旨在提高收敛速度和减少稳态误差等等。下面介绍几种应用于有源噪声控制的算法。
2 牛顿算法
相对于梯度下降方法,牛顿(Newton)法是二阶收敛的,用二次函数 g ( x ) g(x) g(x)代替代替目标函数 f ( x ) f(x) f(x),然后用 g ( x ) g(x) g(x)的极小点代替 f ( x ) f(x) f(x)的极小点。牛顿法的迭代公式为 x ( n + 1 ) = x ( n ) − [ ∇ 2 f ( x ( n ) ) ] − 1 ∇ f ( x ( n ) ) x(n+1)=x(n)-[\nabla^2f(x(n))]^{-1}\nabla f(x(n)) x(n+1)=x(n)−[∇2f(x(n))]−1∇f(x(n))该式中步长取1。如果步长取为 μ \mu μ,则上式变为 x ( n + 1 ) = x ( n ) − μ [ ∇ 2 f ( x ( n ) ) ] − 1 ∇ f ( x ( n ) ) x(n+1)=x(n)-\mu[\nabla^2f(x(n))]^{-1}\nabla f(x(n)) x(n+1)=x(n)−μ[∇2f(x(n))]−1∇f(x(n))由前一篇博文中可以知道,误差平方的梯度为 ∇ ( n ) = 2 v ( n ) e ( n ) \nabla(n)=2\bm{v}(n)\bm{e}(n) ∇(n)=2v(n)e(n)则 ∇ 2 ( n ) = 2 v ( n ) v T ( n ) \nabla^2(n)=2\bm{v}(n)\bm{v}^T(n) ∇2(n)=2v(n)vT(n)则在有源噪声控制中,权系数的牛顿法迭代公式为 w ( n + 1 ) = w ( n ) − μ [ v ( n ) v T ( n ) ] − 1 v ( n ) e ( n ) \bm{w}(n+1)=\bm{w}(n)-\mu[\bm{v}(n)\bm{v}^T(n)]^{-1} \bm{v}(n)\bm{e}(n) w(n+1)=w(n)−μ[v(n)vT(n)]−1v(n)e(n)与FxLMS算法相比较,上式可以写为 w ( n + 1 ) = w ( n ) − μ v ( n ) v T ( n ) v ( n ) e ( n ) \bm{w}(n+1)=\bm{w}(n)-\frac{\mu }{\bm{v}(n)\bm{v}^T(n)}\bm{v}(n)\bm{e}(n) w(n+1)=w(n)−v(n)vT(n)μv(n)e(n)则牛顿算法将步长参数归一化。
3 FxAP算法
仿射投影(affine projection, AP)算法有数据重复利用、
N
N
N 个梯度方向的正交投影和归一化处理等特性。FxAP 算法是AP 算法在ANC 领域的推广,AP 算法是参考信号相关的情况下提高自适应滤波器收敛速度的一种算法,能在收敛速度和失调量中取得平衡,在无环境噪声和阶数充分时,AP 算法的最优解是线性独立的输入信号向量构成的
L
L
L 个超平面的交集,AP 算法使系数更新到这个交集上,仿射投影算法还拥有数据重复利用、
N
N
N个梯度方向的正交投影和归一化处理等特性。
设放射投影的阶数为
N
N
N。则
N
N
N次重用的滤波x信号为
V
(
n
)
=
[
v
(
n
)
,
v
(
n
−
1
)
,
.
.
.
,
v
(
n
−
N
+
1
)
]
\bm{V}(n)=[\bm{v}(n),\bm{v}(n-1),...,\bm{v}(n-N+1)]
V(n)=[v(n),v(n−1),...,v(n−N+1)]
N
N
N次重用的误差信号行向量为
E
(
n
)
=
[
e
(
n
)
;
e
(
n
−
1
)
;
.
.
.
e
(
n
−
N
+
1
)
]
\bm{E}(n)=[\bm{e}(n);\bm{e}(n-1);...\bm{e}(n-N+1)]
E(n)=[e(n);e(n−1);...e(n−N+1)]FxAP算法中控制滤波器的权系数迭代公式为
w
(
n
+
1
)
=
w
(
n
)
−
μ
V
(
n
)
[
V
T
(
n
)
V
(
n
)
+
δ
I
]
−
1
E
(
n
)
\bm{w}(n+1)=\bm{w}(n)-\mu\bm{V}(n)[\bm{V}^T(n)\bm{V}(n)+\delta\bm{I}]^{-1}\bm{E}(n)
w(n+1)=w(n)−μV(n)[VT(n)V(n)+δI]−1E(n)归一化收敛系数
μ
\mu
μ通常取1。
δ
\delta
δ 为防止矩阵无法求逆的正则化因子。FxAP 算法的性能对
δ
\delta
δ的取值十分敏感,因此要十分小心地调整
δ
\delta
δ的取值,
δ
\delta
δ过大会导致收敛性能不能达到最优,过小将导致不收敛。当N 等于1 时,FxAP 算法近似为Newton算法。
4 FxRLS算法
在前面的博文中,我们介绍过RLS算法区别于LMS算法的特性。当控制宽带有色噪声时,基于LMS的算法收敛速度比较慢。与LMS算法相比,RLS算法的收敛速度更快,对参考信号的自相关矩阵特征根散布不敏感,同时稳态误差小。
RLS增益向量
k
(
n
)
=
λ
−
1
P
(
n
−
1
)
v
(
n
)
1
+
λ
−
1
v
(
n
)
T
P
(
n
)
v
(
n
)
\bm{k}(n)=\frac{\lambda^{-1}\bm{P}(n-1)\bm{v}(n)}{1+\lambda^{-1}\bm{v}(n)^T\bm{P}(n)\bm{v}(n)}
k(n)=1+λ−1v(n)TP(n)v(n)λ−1P(n−1)v(n)抽头权系数的迭代为
w
(
n
)
=
w
(
n
−
1
)
−
μ
k
(
n
)
e
(
n
)
\bm{w}(n)=\bm{w}(n-1)-\mu\bm{k}(n)\bm{e}(n)
w(n)=w(n−1)−μk(n)e(n)误差相关矩阵的迭代(Riccati方程)为
P
(
n
)
=
λ
−
1
P
(
n
−
1
)
−
λ
−
1
k
(
n
)
v
(
n
)
T
P
(
n
−
1
)
\bm{P}(n)=\lambda^{-1}\bm{P}(n-1)-\lambda^{-1}\bm{k}(n)\bm{v}(n)^{T}\bm{P}(n-1)
P(n)=λ−1P(n−1)−λ−1k(n)v(n)TP(n−1)可以看到FxRLS算法与RLS算法公式基本相同。
FxRLS算法虽然在收敛速度和宽带噪声控制方面优于FxLMS算法,但是它的运算量较大。对于RLS算法,可以采用快速横向滤波器(fast transversal filter, FTF)来提高实现算法的效率。
5 FsLMS算法
FsLMS 算法是在单层函数联接型人工神经网络(functional linked artificial neural network, FLANN)基础上发展起来的一种非线性自适应控制算法。FLANN 是多重人工神经网络的一种常用替代形式,它是一种没有隐层的扁平结构神经网络。在函数联接模型中,输入的元素 x ( n ) x(n) x(n),被展开成 s ( n ) \bm{s}(n) s(n) 。函数展开的形式有多种,以下三种比较具有代表性:多项式展开、三角函数展开和张量或内积展开。FsLMS 算法采用三角函数展开的联接模型,对于P 阶的三角函数展开,每个输入元素 x ( n ) x(n) x(n)均被映射为 x ( n ) → [ x ( n ) , s i n ( i π x ( n ) ) , c o s ( i π x ( n ) ] 0 ≤ i ≤ P x(n)\rightarrow[x(n),sin(i\pi x(n)),cos(i\pi x(n)]\ 0\leq i\leq P x(n)→[x(n),sin(iπx(n)),cos(iπx(n)] 0≤i≤P与FxLMS算法不同,此时第 j j j个次级声源的输出为 y j ( n ) = ∑ i = 1 I s i ( n ) w i j ( n ) y_j(n)=\sum_{i=1}^I\bm{s}_i(n)\bm{w}_{ij}(n) yj(n)=i=1∑Isi(n)wij(n)根据最速下降法原理,有 w i j ( n + 1 = w i j ( n ) − 2 μ ∑ k = 1 K e k ( n ) v i j k ( n ) \bm{w}_{ij}(n+1=\bm{w}_{ij}(n)-2\mu\sum_{k=1}^Ke_k(n)\bm{v}_{ijk}(n) wij(n+1=wij(n)−2μk=1∑Kek(n)vijk(n)式中 v i j k ( n ) \bm{v}_{ijk}(n) vijk(n)为第 i i i个映射信号经过第 j j j个次级声源到第 k k k个误差传感器之间的次级通路后产生的滤波-x信号,即 v i j k ( n ) = s i ( n ) ∗ h j k ( n ) \bm{v}_{ijk}(n)=s_i(n)*h_{jk}(n) vijk(n)=si(n)∗hjk(n)
6 算法编程
为了进一步理解ANC中的算法,作者进行了Matlab编程,如果您有兴趣,请参考
1、有源噪声控制Newton算法
2、有源噪声控制FxAP算法
3、有源噪声控制FsLMS算法
注意:程序为Matlab函数文件,不可以直接运行,需要您自行输入参数。