# adaptive_filter **Repository Path**: hhquan/adaptive_filter ## Basic Information - **Project Name**: adaptive_filter - **Description**: 自适应滤波器,回声消除学习 - **Primary Language**: Python - **License**: BSD-3-Clause-Clear - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-07-26 - **Last Updated**: 2023-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 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*