# adaptive_filter
#### 介绍
自适应滤波器,回声消除学习
MDF公式整理
自适应滤波器建模为FIR,其长度是有限的,论文中滤波器长度为$N$,FFT点数$N^\prime = \frac{2N}{M}$,$M$为总的块数。$j$为帧序列号,即为第几帧的含义。从公式1看,每次进来的新数据为$N^\prime/2$个点,和之前的$N^\prime/2$个点进行拼凑形成$N^\prime$个点,然后进行FFT变换。
各变量及其维度表示如下:
$$\boldsymbol{X}(M, j)\in \Complex ^{N^\prime\times N^\prime}$$
近端麦克数据的新进来一块$N^\prime/2$长度数据
$$\boldsymbol{d}(j) \in \R^{N^\prime/2\times 1}$$
权重系数
$$\boldsymbol{W}(m, j)\in \Complex ^{N^\prime\times 1}, m = 1,2,\ldots, M$$
步长因子
$$\boldsymbol{\mu}(j) = \begin{bmatrix}
{\mu_0(j)}&{0}&{\cdots}&{0}\\
{0}&{\mu_1(j)}&{\cdots}&{0}\\
{\vdots}&{\vdots}&{\ddots}&{\vdots}\\
{0}&{0}&{\cdots}&{\mu_{\frac{N^\prime}{2}-1}(j)}\\
\end{bmatrix}\in \R ^{N^\prime/2\times N^\prime/2}$$
整体计算过程如下:
1. 公式1计算$\boldsymbol{X}(M, j)$,采用队列的方式,先进后出,剔除头部老数据,更新尾部新数据。
2. 公式3计算,取后面$N^\prime/2$个点。
$$\boldsymbol{y}(j) = \left\{ FFT^{-1}\left[\sum_{m=1}^{M}\boldsymbol{X}(m, j)\boldsymbol{W}(m, j) \right]\right\}[N^\prime/2+1: N^\prime]$$
3. 公式4计算
$$\boldsymbol{E}(j) = FFT\left\{\underbrace{0,0,\ldots, 0}_{1\times\frac{N^\prime}{2}}, \underbrace{ [\boldsymbol{d}(j)-\boldsymbol{y}(j)]^T}_{1\times\frac{N^\prime}{2}}\right\}^T \in\Complex^{N^\prime\times 1}$$
4. 公式5计算,取前面一半的数据,结果存成行向量。
$$\phi(m,j) = \left\{FFT^{-1}[\boldsymbol{X}^*(m, j)\boldsymbol{E}(j)] \right\}[1:\frac{N^\prime}{2}]$$
5. 公式6计算
$$\Phi(m, j) = FFT\left[\phi(m,j)_{1\times\frac{N^\prime}{2}}, \underbrace{0,0,\ldots, 0}_{1\times\frac{N^\prime}{2}}\right]^T\in \Complex^{N^\prime\times 1}$$
6. 更新权重
$$\boldsymbol{W}(m, j+1) = \boldsymbol{W}(m, j) + \boldsymbol{\mu}(j)\Phi(m, j)$$
7. 步长因子的计算,公式12
$$P_k(m,j) = X^*_k(m, j)X_k(m, j)$$
8. 步长因子计算,公式11
$$Z_k(j) = \beta Z_k(j) + (1-\beta)\left[\sum_{m=1}^MP_k(m, j) \right], \beta = 0.8$$
9. 步长因子计算,公式10
$$\mu_k(j) = \frac{M\mu}{Z_k(j)}, k = 0, 1, \ldots, \frac{N^\prime}{2}-1$$
那么问题来了,无论公式7还是公式8,维度都是对不上的。不过刚好少了一半可利用FFT的对称性进行解决。
按照论文说法,第4-5步骤做法的目的是*weight constraint*,第4-5步骤有一次FFT正反变换,如果把这个拿掉,那么就是*unconstrained multidelay block frequency domain (UMDF)*,但是这样做也会导致一些问题,比如*larger misadjustment*,如果第4-5步骤我们做正反FFT变换,但是不全做,只做一个小块m,那么就是*alternative unconstrained multidelay block frequency domain (AUMDF)*。
*SIMULATION*的一些补充说明
图2中给出了MDF算法的一些参数,比如初始值$Z_k(0) = 5.0E+5,\mu = 0.1$
图3中的参数就比较小了,$\mu = 0.625E-7, \mu = 0.12E-6$
第二次补充说明:
*由于gitee公式显示不全,建议用vscode markdown all in one插件进行preview*