声学回声消除(AEC)是自适应滤波最流行的应用之一。自适应滤波器的作用是识别终端扬声器和麦克风之间的声学回声路径,即房间声学脉冲响应。尽管许多自适应算法在理论上适用于 AEC,但在精度和处理能力有限的应用中,归一化最小均方 (NLMS) 算法及其某些版本(例如,频域或子带版本)最常用。该算法的性能,在收敛速度、失调和稳定性方面,由步长参数控制。在稳定条件下,该参数的选择一方面反映了快速收敛速度和良好的跟踪能力与另一方面低失调之间的权衡。为了满足这些相互冲突的要求,需要控制步长。因此,已经提出了许多可变步长 NLMS (VSS-NLMS) 算法。本文提出了一种非参数 VSS-NLMS (NPVSS-NLMS) 算法,该算法在 AEC中具有良好的性能。
一般来说,这些算法是在假设精确建模情况下开发的,即自适应滤波器的长度等于必须建模的系统的长度。由于声学回波路径非常长,欠建模情况(即自适应滤波器的长度小于回波路径的长度)经常发生。系统无法建模的部分引起的残余回波可以解释为附加噪声,它会影响算法的性能。我们提出了一种在欠建模情况下派生的 VSS-NLMS 算法。该算法不需要任何有关声学环境的额外信息,因此在实际 AEC 应用中高效且易于控制。
系统模型配置如图 1 所示,其中目标是使用长度为N的自适应滤波器对长度未知的系统进行建模。假设两个系统都是有限脉冲响应滤波器,由实值向量定义
$$\begin{aligned}
\mathbf{h} &=\left[\begin{array}{llll}
h_{0} & h_{1} & \ldots & h_{N-1}
\end{array}\right]^{T} \\
\hat{\mathbf{h}}(n) &=\left[\begin{array}{llll}
\hat{h}_{0}(n) & \hat{h}_{1}(n) & \cdots & \hat{h}_{L-1}(n)
\end{array}\right]^{T}
\end{aligned}$$
n为时间索引。
考虑建模不足的情况,当$L<N$的情况下,我们可以写作$y(n)=y_{L}(n)+y_{N-L}(n)$,$x(n)=\left[\mathbf{x}_{L}^{T}(n)\mathbf\quad{x}_{N-L}^{T}(n)\right]^{T}$,$h=\left[\mathbf{h}_{L}^{T}(n)\mathbf\quad{h}_{N-L}^{T}(n)\right]^{T}$。则
$$\mathbf{h}_{L}=\left[\begin{array}{llll}
h_{0} & h_{1} & \ldots & h_{L-1}
\end{array}\right]^{T}$$
$$\mathbf{h}_{N-L}=\left[\begin{array}{llll}
h_{L} & h_{L+1} & \ldots & h_{n-L+1}
\end{array}\right]^{T}$$
$$\mathbf{x}_{L}(n)=\left[\begin{array}{llll}
x(n) & x(n-1) & \ldots & x(n-L+1)
\end{array}\right]^{T}$$
$$\mathbf{x}_{N-L}(n)=\left[\begin{array}{llll}
x(n-L) & x(n-L-1) & \ldots & x(n-N+1)
\end{array}\right]^{T}$$
$$y_{L}(n)=\mathbf{x}_{L}^{T}(n) \mathbf{h}_{L}$$
$$y_{N-L}(n)=\mathbf{x}_{N-L}^{T}(n) \mathbf{h}_{N-L}$$
因此,先验误差信号可表示为:
$$\begin{aligned}
e(n) &=d(n)-\hat{y}(n)=d(n)-\mathbf{x}_{L}^{T}(n) \hat{\mathbf{h}}(n-1) \\
&=\mathbf{x}_{L}^{T}(n)\left[\mathbf{h}_{L}-\hat{\mathbf{h}}(n-1)\right]+y_{N-L}(n)+v(n)
\end{aligned}$$
后验误差信号可表示为:
$$\varepsilon(n)=\mathbf{x}_{L}^{T}(n)\left[\mathbf{h}_{L}-\hat{\mathbf{h}}(n)\right]+y_{N-L}(n)+v(n)$$
基于梯度的自适应算法的更新方程是:
$$\hat{\mathbf{h}}(n)=\hat{\mathbf{h}}(n-1)+\mu(n) \mathbf{x}_{L}(n) e(n)$$
后验和先验误差信号之间的关系为
$$\varepsilon(n)=e(n)\left[1-\mu(n) \mathbf{x}_{L}^{T}(n) \mathbf{x}_{L}(n)\right]$$
为了在稳定性条件下导出步长参数,可以选择几种方法。一个可能的解决方案是假设$\varepsilon(n)=0$,$e(n) \neq 0$。因此, 经典 NLMS 算法的步长即为$\mu_{N L M S}(n)=\left[\mathbf{x}_{L}^{T}(n) \mathbf{x}_{L}(n)\right]^{-1}$。应该注意的是,这种方法适用于无噪声情况(即$v(n)=0$)和精确建模情况(即$N=L$)。在实践中,一个正适应常数(通常小于 1)乘以这个步长,以在收敛速度和失调之间实现适当的折衷。在存在噪声和建模不足的情况下若让后验误差强制为0,则:
$$\mathbf{x}_{L}^{T}(n)\left[\mathbf{h}_{L}-\hat{\mathbf{h}}(n)\right]=-y_{N-L}(n)-v(n) \neq 0$$
这将使得自适应滤波器估计产生偏差。在这种情况下,$\mathbf{x}_{L}^{T}(n)\left[\mathbf{h}_{L}-\hat{\mathbf{h}}(n)\right]=0$意味着
$$\varepsilon(n)=e(n)\left[1-\mu(n) \mathbf{x}_{L}^{T}(n) \mathbf{x}_{L}(n)\right]=y_{N-L}(n)+v(n)$$
因此,在这种情况下推导的更合理的方法选择$\mu(n)$ ,使得$E\left\{\varepsilon^{2}(n)\right\}=E\left\{y_{N-L}^{2}(n)\right\}+E\left\{v^{2}(n)\right\}$,其中$E\{\boldsymbol{\bullet}\}$表示数学期望。并且$y_{N-L}(n)$与$v(n)$是不相关的。并假设$\mathbf{x}^{T}(n) \mathbf{x}(n)=LE\left\{x^{2}(n)\right\} \text { for } L \gg 1$(这在自适应滤波器长度约为数百的 AEC 中有效),我们发现
$$\begin{aligned}
E\left\{e^{2}(n)\right\}[1-L \mu(n) E&\left.\left\{x^{2}(n)\right\}\right]^{2} =E\left\{y_{N-L}^{2}(n)\right\}+E\left\{v^{2}(n)\right\} .
\end{aligned}$$
步长参数的解是
$$\mu(n)=\frac{1}{\mathbf{x}_{L}^{T}(n) \mathbf{x}_{L}(n)}\left[1-\sqrt{\frac{E\left\{y_{N-L}^{2}(n)\right\}+E\left\{v^{2}(n)\right\}}{E\left\{e^{2}(n)\right\}}}\right]$$
假设$y_{L}(n)$与$y_{N-L}(n)$是不相关的,我们得到
$$E\left\{y_{N-L}^{2}(n)\right\}=E\left\{d^{2}(n)\right\}-E\left\{y_{L}^{2}(n)\right\}-E\left\{v^{2}(n)\right\}$$
考虑到自适应滤波器系数已经收敛到一定程度,可以假设
$$E\left\{y_{L}^{2}(n)\right\}=E\left\{\hat{y}^{2}(n)\right\}$$
因此步长参数可表示为:
$$\mu(n)=\frac{1}{\mathbf{x}_{L}^{T}(n) \mathbf{x}_{L}(n)}\left[1-\sqrt{\frac{E\left\{d^{2}(n)\right\}-E\left\{\hat{y}^{2}(n)\right\}}{E\left\{e^{2}(n)\right\}}}\right]$$
在实际中,上式写为:
$$\mu(n)=\frac{1}{\mathbf{x}_{L}^{T}(n) \mathbf{x}_{L}(n)}\left[1-\frac{\sqrt{\hat{\sigma}_{d}^{2}(n)-\hat{\sigma}_{\hat{y}}^{2}(n)}}{\hat{\sigma}_{e}(n)}\right]$$
一般来说,参数$\hat{\sigma}_{\alpha}^{2}(n)$表示序列$\alpha(n)$的功率估计,并且可以计算为
$$\hat{\sigma}_{\alpha}^{2}(n)=\lambda \hat{\sigma}_{\alpha}^{2}(n-1)+(1-\lambda) \alpha^{2}(n)$$
其中$\lambda$是加权因子,值为$\lambda=1-1/(KL)$,其中$K>1$。$\hat{\sigma}_{\alpha}^{2}(0)$初始值为0。
在步长参数计算中,为了避免被小数除法,需要在第一个分母上添加一个正常数$\delta$,称为正则化因子。该参数的值随着噪声水平的增加而增加,同时考虑到环境噪声和建模不足的噪声,可进一步优化。此外,在式中添加一个较小的正值$\xi$,以避免被零除。其次,我们将开始迭代时使用 NLMS 步长(带正则化)启动算法,直到$y(n)=y_{L}(n)$并且系数估计仅受系统噪声$v(n)$影响。
综上所述,所提出的用于欠建模的VSS-NLMS(VSS-NLMS-UM)算法的步长参数为
$$\mu(n)=\left\{\begin{array}{ll}
\mu_{N L M S}(n), & \text { for } n \leq L \\
\frac{1}{\delta+\mathbf{x}_{L}^{T}(n) \mathbf{x}_{L}(n)} \mid 1-\frac{\sqrt{\hat{\sigma}_{d}^{2}(n)-\hat{\sigma}_{\hat{y}}^{2}(n)}}{\xi+\hat{\sigma}_{e}(n)}, & \text { for } n>L
\end{array}\right.$$
所有关于声学环境变化的信息(例如,回声路径变化,环境噪声变化)都包含在第二个比率中。因此,所提出的算法在实际环境中更加稳健且更易于控制。