本文对 John J. Shynk 于 1992 年在 IEEE Signal Processing Magazine 上发表的论文进行简单地翻译。如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。

论文链接https://course.ece.cmu.edu/~ece792/handouts/Shynk92.pdf

目录

  • 1. 论文目的
  • 2. 介绍
  • 3. 块自适应滤波
  • 4. FDAF 算法的一般形式
  • 5. 卷积实现
    • 5.1. 线性和循环卷积
    • 5.2. Overlap-Save Method
    • 5.3. 算法约束和矩阵形式
    • 5.4. Overlap-Add Method
    • 5.5. 循环卷积
    • 5.6. 计算复杂度
    • 5.7. Sliding DFT and Frequency-Sampling Methods
  • 6. 子带实现
    • 6.1. 滤波器组
    • 6.2. 子带自适应滤波
  • 7. IIR 算法和非线性误差函数
    • 7.1. IIR 实现
    • 7.2. 非线性误差函数
  • 8. 结论与总结
  • 9. 后记

1. 论文目的

全面地介绍了频域自适应滤波器和子带自适应滤波器。

2. 介绍

近些年,自适应信号处理应用引起了广泛的关注,这些应用中所需的自适应滤波器往往具有很长的冲激响应。这并不罕见,比如,通道均衡、自适应噪声消除、声学回声消除以及许多其它应用都需要上千阶的 FIR 滤波器来达到预期的性能水平。这个复杂问题的解决方案之一是使用自适应 IIR 滤波器,这样,一个有效的长冲激响应能使用相对少的滤波器系数来实现。自适应 IIR 滤波器的复杂度优势是众所周知的,但是因为存在算法不稳定、收敛慢以及局部最小等潜在性问题,导致它们并没有被广泛使用。

另一种降低长自适应 FIR 滤波器计算复杂度的方法是结合块更新策略,使用 FFT(快速傅立叶变换) 算法有效地执行滤波器卷积和梯度相关。这些技术能降低计算复杂度的原因是,仅在累积了一大块的数据之后才计算滤波器的输出和自适应的权重。除了块卷积方法,基于子带技术的计算高效的自适应算法也在最近被开发了出来。这两种类型的自适应滤波器都可以被认为是多速率信号处理器,正是它们能以较低的采样率执行某些功能,才导致了复杂度的降低。根据数据的组织方式,这些方法可能会导致性能下降,包括端到端延迟以及算法步长的稳定范围的减少。对于非平稳信号,块算法的跟踪性能通常会变差。

频域自适应滤波器的基本操作是:在自适应处理之前将输入数据转换为更理想的形式。这是通过一个或多个离散傅里叶变换(DFTs)或者滤波器组实现的,由此输入信号被变换到频域,如图1 所示。该变换是非自适应的,对应于一个独立于数据的简单预处理步骤。图1 展示了两种表达方法:(a) 在时域计算误差信号 e(n)e(n)e(n),然后对其进行变换,或 (b) 首先对期望响应 d(n)d(n)d(n) 进行变换,然后直接在频域计算误差。对于误差是数据的线性函数的自适应算法(如最小均方(LMS)算法),这两种方法产生相似的结果。然而,对于那些非线性误差函数算法(如 the constant modulus algorithm(CMA)),这两种结构产生的结果差异可能非常大,只有其中一种可以提供可接受的性能。性能最佳的配置还取决于滤波器组(变换)的类型和具体的应用。

与时域实现相比,频域自适应滤波器主要有两个优点,第一个优点是:可以大大节省计算复杂度,正如前面所提到的。FFT 是 DFT 的一种有效实现,它为节省计算复杂度做出了贡献。第二个优点是:DFT 和滤波器组结构生成的信号近似不相干(正交)。 因此,可以给每个自适应权重使用时变的步长,使其收敛速度更均匀。 众所周知,输入信号相关矩阵的特征值差异通常决定了梯度下降算法的收敛速度。These eigenvalues correspond roughly to the power of the signal spectrum at equally-spaced frequency points around the unit circle. 因此,可以通过使用与 DFT 频点功率级别成反比的步长来补偿这种功率的变化。因此,可以提高算法的整体收敛速率,sometimes approaching that achievable with RLS (recursive-least-squares) algorithms without a similar increase in the computational complexity.

本文的目标是为几种频域和子带自适应滤波器提供一个统一的框架。本文考虑了两种实现。第一种实现使用 FFT 滤波技术直接高效地实现时域块自适应滤波器。这种方法根据数据采样点的组织形式,所实现的要么是线性卷积,要么是圆周卷积。第二种实现基于滤波器组(filter-bank)技术和子带滤波,也就是在自适应处理之前对内部信号(internal signal)进行下采样(抽取)。如果适当地选择滤波器组,混叠失真影响可以得到充分控制。这两种实现都将被称为频域自适应滤波器(FDAFs),即使它们并不总是使用 DFT.

尽管本文的重点是 FIR 滤波器和 LMS 算法,there is a brief discussion of frequency-domain adaptive IIR filtering for both the equation-error and output-error formulations. Nonlinear error functions are also considered, such as those encountered with CMA and decision-directed equalizers. 本文中讨论的所有配置都可以被修改,以 handle 各种自适应算法,而且也可以通过简化某些组件来进一步降低它们的复杂度,这具体要取决于应用程序的性能要求。

本文通篇将使用以下符号。小写字母将用来表示时域变量,频域变量用大写字母表示。向量和矩阵将以粗体显示,而标量以斜体显示。

3. 块自适应滤波

标准时域 LMS 算法的非块(nonblock)系数(权重)更新公式如下:
w(n+1)=w(n)+2μx(n)e(n)(1)\bm w(n+1) = \bm w(n) + 2 \mu \bm x(n) e(n) \tag{1} w(n+1)=w(n)+2μx(n)e(n)(1)

其中,w(n)\bm w(n)w(n) 是可调权重向量,x(n)\bm x(n)x(n) 是输入信号向量:
w(n)=[w0(n),⋯,wN−1(n)]T(2)\bm w(n) = [w_{0}(n), \cdots, w_{N-1}(n)]^{T} \tag{2} w(n)=[w0​(n),⋯,wN−1​(n)]T(2)

x(n)=[x(n),⋯,x(n−N+1)]T(3)\bm x(n) = [x(n), \cdots, x(n-N+1)]^{T} \tag{3} x(n)=[x(n),⋯,x(n−N+1)]T(3)

系数的数量为 NNN,TTT 表示矩阵/向量转置。步长 μ\muμ 是个正数标量,用以控制算法的收敛速度和稳态性能。输出的误差表示为 e(n)=d(n)−y(n)e(n) = d(n) - y(n)e(n)=d(n)−y(n),滤波器的输出 y(n)y(n)y(n)为:
y(n)=xT(n)w(n)(4)y(n) = \bm x^{T}(n) \bm w(n) \tag{4} y(n)=xT(n)w(n)(4)

d(n)d(n)d(n) 是期望响应信号,它依赖于自适应滤波器的具体应用。梯度的估计值 ∇(n)\nabla(n)∇(n) 是简单地通过 e2(n)e^2(n)e2(n) 对 w(n)\bm w(n)w(n)求导得到的:
∇(n)=x(n)e(n)(5)\nabla(n) = \bm x(n) e(n) \tag{5} ∇(n)=x(n)e(n)(5)

LMS 算法试图最小化均方误差(MSE)性能函数,其定义为 ξ=E[e2(n)]\xi = E[e^{2}(n)]ξ=E[e2(n)],E[⋅]E[\cdot]E[⋅] 表示取期望。 LMS 算法基于梯度下降法,它在各种信号情况下的收敛情况是众所周知的。

每当收到一组新的采样点对{x(n),d(n)}\{x(n), d(n)\}{x(n),d(n)},就执行一次 (1)(1)(1) 中的递归过程。可选地,也可以保持权重系数固定不变,直到收到 NNN 组采样点对之后,来合并这些信息用以更新权重系数。也就是说,每 NNN 组采样点对只更新一次权重系数。考虑以下的权重更新过程:
w(n+L)=w(n+L−1)+2μx(n+L−1)e(n+L−1)(6)\bm w(n+L) = \bm w(n+L-1) + 2 \mu \bm x(n+L-1) e(n+L-1) \tag{6} w(n+L)=w(n+L−1)+2μx(n+L−1)e(n+L−1)(6)

上式除了递增的时间参数外,其余均与 (1)(1)(1) 式类似,其中 1≤L≤N1 \leq L \leq N1≤L≤N 是整数。使用 w(n+L−2)\bm w(n+L-2)w(n+L−2) 来表示 w(n+L−1)\bm w(n+L-1)w(n+L−1),并以此类推,可得:
w(n+L)=w(n)+2μ∑m=0L−1x(n+m)e(n+m)(7)\bm w(n+L) = \bm w(n) + 2 \mu \sum_{m=0}^{L-1} \bm x(n+m)e(n+m) \tag{7} w(n+L)=w(n)+2μm=0∑L−1​x(n+m)e(n+m)(7)

该式表达了基于累积的 LLL 个采样点,是如何对权重从时刻 nnn 到 时刻 n+Ln+Ln+L 进行单次更新的,因此,它被称为块递归 (block recursion)。需要注意的是,求和中的误差项全都依赖于同一个权重向量 w(n)\bm w(n)w(n),也就是说,e(n+m)=d(n+m)−y(n+m),m=0,⋯,L−1,e(n+m) = d(n+m) - y(n+m), m = 0, \cdots, L-1,e(n+m)=d(n+m)−y(n+m),m=0,⋯,L−1, 其中:
y(n+m)=xT(n+m)w(n)(8)y(n+m) = \bm x^{T}(n+m) \bm w(n) \tag{8} y(n+m)=xT(n+m)w(n)(8)

因此,(7)(7)(7) 不同于标准的非块 LMS 算法。在标准的非块 LMS 算法中,每个新的误差项都依赖于最新更新的权重。本文主要研究 L=NL = NL=N 的情况,因为这对于 FFT 算法来说是最有效的值。然而,对于后续将要提到的 sliding DFT 和频率采样结构来说,它们的 L=1L = 1L=1,所使用的自适应算法按照输入数据的速率运行,这相应于 (1)(1)(1) 中的非块更新。这些自适应滤波器不具有多速率自适应滤波器的计算优势,但它们利用了 DFT 的正交性,并对如何推导出更有效的子带实现给出了一些建议。

因为 (7)(7)(7) 是块更新,它以低于输入数据的采样率运行。可以定义一个新的时间索引 kkk,对其每增加一次就相应于对原始的时间索引 nnn 增加 LLL 次。不失一般性,可以将 n=kLn = kLn=kL 代入公式中 ,其中 nnn 是 kkk 的整数倍。将 (7)(7)(7) 式中的 kL+LkL+LkL+L 改写为 (k+1)L(k+1)L(k+1)L,并去掉权重向量对 LLL 的依赖,可以得到以下块更新公式:
w(k+1)=w(k)+2μ∑m=0L−1x(kL+m)e(kL+m)(9)\bm w(k+1) = \bm w(k) + 2 \mu \sum_{m=0}^{L-1} \bm x(kL+m) e(kL+m) \tag{9} w(k+1)=w(k)+2μm=0∑L−1​x(kL+m)e(kL+m)(9)

因此,kkk 表示块时间索引,nnn 表示输入数据的原始时间索引。块梯度估计值通过以下的求和给出:
∇(k)=∑m=0L−1x(kL+m)e(kL+m)(10)\nabla(k) = \sum_{m=0}^{L-1} \bm x(kL+m) e(kL+m) \tag{10} ∇(k)=m=0∑L−1​x(kL+m)e(kL+m)(10)

它是通过对块 MSE 进行求导得到的,其定义为 ξL=E[eT(k)e(k)],e(k)=[e(kL),⋯,e(kL+L−1)]T\xi_{L} = E[\bm e^{T}(k) \bm e(k)],\bm e(k) = [e(kL), \cdots, e(kL+L-1)]^{T}ξL​=E[eT(k)e(k)],e(k)=[e(kL),⋯,e(kL+L−1)]T. 对于广义平稳信号,可以得到 ξL=Lξ\xi_{L} = L \xiξL​=Lξ.

(9)(9)(9) 中的块 LMS(BLMS) 算法本质上最小化了与 (1)(1)(1) 中的非块 LMS(BLMS) 算法相同的 MSE 代价函数。可以将 (10)(10)(10) 中的块梯度视为对真实(ensemble)梯度更准确的估计,因为每次更新都会对 LLL 项进行平均(见图2)。对于广义平稳信号来说,稳态权重向量(维纳解)、失配以及 BLMS 算法的时间常量与标准 LMS 算法的是相同的。最大的不同是,使算法稳定的步长最大值现在按比例变为了原来的 1/L1/L1/L。 如果输入信号相关矩阵的特征值分散度较大,则 BLMS 算法可能比 LMS 算法收敛得更慢,这是由于 μ\muμ 上界的限制。这在需要用较大的步长值来达到快速收敛的应用中可能会是一个问题。

观察到 (10)(10)(10) 中的块梯度是误差信号和输入信号向量的线性相关, 而且 (8)(8)(8) 是权重向量和输入信号向量的线性卷积。因此,可以使用离散傅立叶变换来高效地实现。因此,可以看到块算法存在 tradeoff. 它具有更平滑的收敛特性,并且可以使用 FFTs 来高效地实现,但由于步长的最大值更小了,所以能达到的最大收敛速率也降低了。块更新同样降低了算法的跟踪能力,特别是当块很长而且数据是高度非平稳的时候。

4. FDAF 算法的一般形式

本文所描述的频域自适应算法都有着类似于 (9)(9)(9) 中的块更新的递归形式。因为 DFT 运算本身是在执行循环卷积,自适应滤波器通常需要数据约束才能实现所期望的线性卷积。 这些约束将信号向量的某些元素强制置为 000,只保留部分元素以供算法后续使用。一般来说,通过移除这些约束中的一个或多个,FDAF 的计算复杂度将会降低,但其性能也可能会下降,因为循环卷积引入了 the wrap-round effects. 算法可能不会收敛到期望的维纳解。

类似于 (2)(2)(2) 和 (3)(3)(3),定义频域的权重向量为:
W(k)=[W0(k),⋯,WM−1(k)]T(11)\bm W(k) = [W_{0}(k), \cdots, W_{M-1}(k)]^{T} \tag{11} W(k)=[W0​(k),⋯,WM−1​(k)]T(11)

输入信号矩阵为:
X(k)=diag{X0(k),⋯,XM−1(k)}(12)\bm X(k) = \text{diag} \{X_{0}(k), \cdots, X_{M-1}(k)\} \tag{12} X(k)=diag{X0​(k),⋯,XM−1​(k)}(12)

其中 diag{⋅}\text{diag}\{\cdot\}diag{⋅} 是生成对角矩阵的操作。元素的数量为 MMM,依赖于 FDAF 的配置(通常 M=NM=NM=N 或 M=2NM=2NM=2N);后续将分别讨论这两种情况。虽然可以将 X(k)\bm X(k)X(k) 表示成向量形式,但使用矩阵形式表示会更加方便,这样的话,频域的输出向量可以写成以下矩阵/向量乘积的形式:
Y(k)=X(k)W(k)(13)\bm Y(k) = \bm X(k) \bm W(k) \tag{13} Y(k)=X(k)W(k)(13)

Y(k)\bm Y(k)Y(k) 的元素以类似于 (11)(11)(11) 中 W(k)\bm W(k)W(k) 的方式定义。

有了这些定义,FDAF 算法的一般形式可以表示为:
W(k+1)=W(k)+2Gμ(k)XH(k)E(k)(14)\bm W(k+1) = \bm W(k) + 2 \bm G \bm \mu(k) \bm X^{H}(k) \bm E(k) \tag{14} W(k+1)=W(k)+2Gμ(k)XH(k)E(k)(14)

其中,上标 HHH 表示复数共轭转置。频域的权重向量通常是复值,因此 (14)(14)(14) 是复数 LMS 算法的一个版本。时变矩阵 μ(k)\bm \mu(k)μ(k) 是个对角阵,它的元素是步长 μm(k),m=0,⋯,M−1\mu_{m}(k), m=0, \cdots, M-1μm​(k),m=0,⋯,M−1. 通常来说,每个步长都会根据对应频点的信号能量而变化。例如,可以令 μm(k)=μ/Pm(k)\mu_{m}(k) = \mu / P_{m}(k)μm​(k)=μ/Pm​(k),其中 μ\muμ 是一个常量,Pm(k)P_{m}(k)Pm​(k) 是估计的第 mmm 个频点的信号功率,可以使用以下方式计算:
Pm(k)=λPm(k−1)+α∣Xm(k)∣2(15)P_{m}(k) = \lambda P_{m}(k-1) + \alpha \left| X_{m}(k) \right|^{2} \tag{15} Pm​(k)=λPm​(k−1)+α∣Xm​(k)∣2(15)

其中 λ=1−α\lambda = 1 - \alphaλ=1−α 是遗忘因子(The forgetting factor (0<λ<10 < \lambda < 10<λ<1) controls the effective memory, τ=1/(1−λ)\tau = 1 / (1-\lambda)τ=1/(1−λ) , of the power estimate.)如果数据在统计意义上是平稳的,步长矩阵可以是定值 μm(k)=μm\mu_{m}(k) = \mu_{m}μm​(k)=μm​,又或每个步长可以是同样的值 μ(k)=μI\bm \mu(k) = \mu \bm Iμ(k)=μI,其中 I\bm II 是单位矩阵。初始值 Pm(0)P_{m}(0)Pm​(0) 被设置为正数 δm\delta_{m}δm​,它取决于 Xm(k)X_{m}(k)Xm​(k) 的初始功率估计。在另一种实现方式中,步长也可以简单地通过计算 μm(k)=μ/(α+∣Xm(k)∣2)\mu_{m}(k) = \mu / (\alpha + \left| X_{m}(k)\right|^{2})μm​(k)=μ/(α+∣Xm​(k)∣2) 来得到,其中 α\alphaα 是一个很小的正常量,它在 Xm(k)X_{m}(k)Xm​(k) 较小时,可以限制 μm(k)\mu_{m}(k)μm​(k)的上界。此时得到的算法类似于归一化 LMS(NLMS) 算法。

误差向量 E(k)\bm E(k)E(k) 的定义与 W(k)\bm W(k)W(k) 类似,而且它的元素依赖于特定的 FDAF 算法。在一些实现中,误差是在时域计算的,而 E(k)\bm E(k)E(k) 只是其频域变换。在其它的一些实现中,首先将期望响应转换到频域 D(k)=[D0(k),⋯,DM−1(k)]T\bm D(k) = [D_{0}(k), \cdots, D_{M-1}(k)]^{T}D(k)=[D0​(k),⋯,DM−1​(k)]T,然后直接在频域计算误差,该误差是 Y(k)\bm Y(k)Y(k) 和 D(k)\bm D(k)D(k) 的函数。矩阵 G\bm GG 表示对梯度 XH(k)E(k)\bm X^{H}(k) \bm E(k)XH(k)E(k) 的约束,为了实现线性卷积该约束是必须施加的。该约束通常定义为对时域信号的限制,G\bm GG 是其频域变换。可以看到在 (14)(14)(14) 中,G\bm GG 在 μ(k)\bm \mu(k)μ(k)的左边,这表示该约束也应用在了步长矩阵上。如果 μ(k)=μI\bm \mu(k) = \mu \bm Iμ(k)=μI, 那么可以将 μ\muμ 置于 G\bm GG 的左边;为了方便起见,这种简化形式将被用于后续所有的 FDAF 算法中,but it is clear that we can always incorporate a time-varying step-size matrix.

为了简化符号,定义 F\bm FF 为 M×MM \times MM×M 的 DFT 矩阵,其元素为 Fml=e−j2πml/MF_{ml} = e^{-j 2\pi ml/M}Fml​=e−j2πml/M。其逆矩阵为 F−1=FH/M\bm F^{-1} = \bm F^{H} / MF−1=FH/M,那么 FHF=MIM\bm F^{H} \bm F = M \bm I_{M}FHF=MIM​,其中下标 MMM 表示单位矩阵的维度。因此,给向量左乘 F\bm FF 将计算该向量的 DFT,左乘逆 DFT(IDFT) 矩阵 F−1\bm F^{-1}F−1 将计算出时域的采样点。F\bm FF 将不包含下标,因为在特定的 FDAF 算法中,它的维度是很明确的。

5. 卷积实现

5.1. 线性和循环卷积

如前所述,两个 DFT 序列的乘积将产生循环卷积(或者循环相关,这主要取决于序列元素的排序方式)。A circular convolution can differ markedly from a linear convolution such that the resulting sequence appears to be the output of a periodically time-varying filter. 很明显,如果期望的结果是线性卷积(见 (8)(8)(8) ),那么这是不可接受的。幸运的是,可以证明循环卷积的某些元素对应于线性卷积的一个子集,其大小取决于两个序列的相对长度,见图3。

存在两种著名的技术,这两种技术均可以使用 FFT 算法来计算线性卷积,它们被称为 overlap-save and overlap-add sectioning methods。通过重叠数据序列的元素,并只保留最终 DFT 乘积结果的一个子集,就可以快速得到一个有限长序列和一个无限长序列的线性卷积。在自适应滤波中,频域的权重向量相应于有限长序列,输入信号相应于无限长序列。为了生成 NNN 个正确的输出样本,有必要使用长度 ≥2N−1\geq 2N - 1≥2N−1 的 DFTs。结果表明,2N2N2N 点的 DFTs(M = 2N) 是合适的,而且最佳块长度为 L=NL = NL=N。

5.2. Overlap-Save Method

首先考虑 (8)(8)(8) 中计算滤波器输出的过程。W(k)\bm W(k)W(k) 和 X(k)\bm X(k)X(k) 是从相应的时域变量导出的频域版本:
W(k)=F[wT(k),0,⋯,0]T(16)\bm W(k) = \bm F [\bm w^{T}(k), 0, \cdots, 0]^{T} \tag{16} W(k)=F[wT(k),0,⋯,0]T(16)

X(k)=diag{F[x(kN−N),⋯,x(kN−1),x(kN),⋯,x(kN+N−1)]T}(17)\bm X(k) = \text{diag} \{\bm F [x(kN-N), \cdots, x(kN-1), x(kN), \cdots, x(kN+N-1)]^{T}\} \tag{17} X(k)=diag{F[x(kN−N),⋯,x(kN−1),x(kN),⋯,x(kN+N−1)]T}(17)

其中,w(k)\bm w(k)w(k) 是 (2)(2)(2) 中定义的向量,只不过用 kkk 代替了 nnn。根据 overlap-save method,来自于线性卷积的 NNN 个输出样本 y(k)=[y(kN),⋯,y(kN+N−1)]T\bm y(k) = [y(kN), \cdots, y(kN+N-1)]^{T}y(k)=[y(kN),⋯,y(kN+N−1)]T 可以通过下式计算:
y(k)=lastNcomponents ofF−1Y(k)(18)\bm y(k) = \text{last} \; N \; \text{components of} \; \bm F^{-1} \bm Y(k) \tag{18} y(k)=lastNcomponents ofF−1Y(k)(18)

其中 Y(k)\bm Y(k)Y(k) 是 (13)(13)(13) 中定义的频域输出向量。(17)(17)(17) 中的输入序列包含了当前数据块的 NNN 个样本,以及前一个数据块的 NNN 个样本;实际上,由于数据存在 NNN 个点的 overlap,因此,在每次块更新计算 DFT 之前只引入了 NNN 个新的样本(由于是 2N2N2N 点的 DFT,因此,将其称为 50% overlap)。只有 Y(k)=X(k)W(k)\bm Y(k) = \bm X(k) \bm W(k)Y(k)=X(k)W(k) 的 IDFT 变换的最后 NNN 个样本被保留了下来,因为最前面的 NNN 个样本是循环卷积的结果。图4 说明了数据是如何被划分的,并给出了表示 (13)(13)(13) 以及 (16)(18)(16)~(18)(16) (18) 的框图。这些公式完全等同于计算了 NNN 次 (8)(8)(8) 中的内积,但由于 FFT 的高效性,其计算复杂度更低。这是一个标准的技术,经常被用于权重向量是时不变的非自适应滤波中。

可以采用类似的技术来实现块自适应算法,因为(10)(10)(10) 中的梯度是线性相关,而且对于块中的 NNN 个样本来说,权重是固定不变的。根据 e(kN+m)=d(kN+m)−y(kN+m),m=0,⋯,N−1e(kN+m) = d(kN+m) - y(kN+m), \, m=0, \cdots, N-1e(kN+m)=d(kN+m)−y(kN+m),m=0,⋯,N−1 计算时域的误差项,然后将其组织为数据块的形式 e(k)=[e(kN),⋯,e(kN+N−1)]T=d(k)−y(k)\bm e(k) = [e(kN), \cdots, e(kN+N-1)]^{T} = \bm d(k) - \bm y(k)e(k)=[e(kN),⋯,e(kN+N−1)]T=d(k)−y(k),其中 d(k)=[d(kN),⋯,d(kN+N−1)]T\bm d(k) = [d(kN), \cdots, d(kN+N-1)]^{T}d(k)=[d(kN),⋯,d(kN+N−1)]T,最后按照以下方式,将其转换到频域:
E(k)=F[0,⋯,0,eT(k)]T(19)\bm E(k) = \bm F[0, \cdots, 0, \bm e^{T}(k)]^{T} \tag{19} E(k)=F[0,⋯,0,eT(k)]T(19)

在误差向量前面补了 NNN 个零,这是因为在 (18)(18)(18) 中为了实现线性卷积,丢弃了输出中的 NNN 个元素。或者,也可以认为 e(k)\bm e(k)e(k) 在相关中的角色与 w(k)\bm w(k)w(k) 在卷积中的角色一样,除了零被补在了 e(k)\bm e(k)e(k) 的前面,这是因为相关基本上是个反向卷积(见图3)。 应用与推导块输出时相同的推理,可以直接证明块梯度估计是:
∇(k)=firstNcomponents ofF−1XH(k)E(k)(20)\nabla(k) = \text{first} \; N \; \text{components of} \; \bm F^{-1} \bm X^{H}(k) \bm E(k) \tag{20} ∇(k)=firstNcomponents ofF−1XH(k)E(k)(20)

上式保留了前 NNN 个元素(与 (18)(18)(18) 中保留后 NNN 个元素相反,这同样也是因为梯度是相关)。上式包含了 NNN 项,与 (10)(10)(10) 中定义的时域块梯度完全对应。

算法的最后一步是将该时域梯度转换为频域梯度,然后将该频域梯度与 W(k)\bm W(k)W(k) 相加以生成更新后的权重 W(k+1)\bm W(k+1)W(k+1)。因为在 (16)(16)(16) 中,w(k)\bm w(k)w(k) 的后面补了 NNN 个零,因此,必须对 (20)(20)(20) 中的梯度做类似的操作。权重的更新公式由下式给出:
W(k+1)=W(k)+2μF[∇T(k),0,⋯,0]T(21)\bm W(k+1) = \bm W(k) + 2 \mu \bm F[\nabla^{T}(k), 0, \cdots, 0]^{T} \tag{21} W(k+1)=W(k)+2μF[∇T(k),0,⋯,0]T(21)

这与 (9)(9)(9) 中的更新是相等,除了使用 DFT 来计算输出卷积和梯度相关。图5 给出了完整的 FDAF 结构,可以看到实现整个自适应滤波器总共需要 5 个 DFTs。需要特别注意的是,(21)(21)(21) 并不是 (1)(1)(1) 中逐点时域 LMS 算法的精确实现,这是因为在数据累积期间,权重对于每个包含 NNN 点的数据块都是保持固定不变的。该实现是由 Clark 等人和 Ferrara 独立推导得出。

最后两个 DFTs 和相关的数据分段在图5 中被标记为梯度约束。因为时域的权重只有 NNN 个元素,因此,频域应该有相同数量的元素;也就是说,如果将 2N2N2N 点的频域权重通过 IDFT 转换到时域,那么应该只有前 NNN 个变换后的权重是非零值。(16)(16)(16) 中的频域权重向量是通过给真实的权重后面补 NNN 个零来生成的,但是 F−1XH(k)E(k)\bm F^{-1} \bm X^{H}(k) \bm E(k)F−1XH(k)E(k) 的最后 NNN 个元素通常不是零。梯度约束可以确保执行正确的权重更新。还需要注意的是,初始权重向量 W(0)\bm W(0)W(0) 的选择,必须使得其 IDFT 的最后 NNN 个元素为零。

因为 overlap-save FDAF 只是 BLMS 算法的高效实现,因此,两者在失配、收敛速度以及步长 μ\muμ 的稳态范围方面具有相同的收敛特性。此外,频域自适应权重也收敛到相同的维纳权重向量,产生相同的稳态 (minimum)MSE。如果对每个自适应权重使用不同的步长,则可以在不增加 (minimum)MSE 的同时,提高算法的收敛速度。 因此,overlap-save FDAF 不仅可以降低计算复杂度,而且还可以通过补偿频点之间的信号功率变化来提升收敛速度。

5.3. 算法约束和矩阵形式

将 overlap-save FDAF 重写为矩阵形式会便于后续的讨论,这样的话,该算法可以用 (14)(14)(14) 中的一般形式来表示。对于 (20)(20)(20) 中所描述的只保留 IDFT 最前面的 NNN 个元素的操作,可以定义如下的时域约束矩阵 g\bm gg(该矩阵也被称为窗函数):
g=[IN0N0N0N](22)\bm g = \left[ \begin{array}{cccc} \bm I_{N} & \bm 0_{N} \\ \bm 0_{N} & \bm 0_{N} \\ \end{array} \right] \tag{22} g=[IN​0N​​0N​0N​​](22)

其中 0N\bm 0_{N}0N​ 是 N×NN \times NN×N 的零矩阵。使用该 2N×2N2N \times 2N2N×2N 的约束矩阵,(20)(20)(20) 中的梯度可以被紧凑地写成:
[∇T(k),0,⋯,0]T=gF−1XH(k)E(k)(23)[\nabla^{T}(k), 0, \cdots, 0]^{T} = \bm g \bm F^{-1} \bm X^{H}(k) \bm E(k) \tag{23} [∇T(k),0,⋯,0]T=gF−1XH(k)E(k)(23)

(21)(21)(21) 中的权重更新变为:
W(k+1)=W(k)+2μFgF−1XH(k)E(k)(24)\bm W(k+1) = \bm W(k) + 2 \mu \bm F \bm g \bm F^{-1} \bm X^{H}(k) \bm E(k) \tag{24} W(k+1)=W(k)+2μFgF−1XH(k)E(k)(24)

将上式和 (14)(14)(14) 中的一般形式进行比较,可以看到梯度约束比较简单 G=FgF−1\bm G = \bm F \bm g \bm F^{-1}G=FgF−1,这是一个全矩阵(但秩 ≤2N\leq 2N≤2N)。也可以将 (18)(18)(18) 中的输出向量使用类似的矩阵来表示:
y(k)=kF−1Y(k)(25)\bm y(k) = \bm k \bm F^{-1} \bm Y(k) \tag{25} y(k)=kF−1Y(k)(25)

其中 k\bm kk 是 N×2NN \times 2NN×2N 的约束矩阵:
k=[0NIN](26)\bm k = [\bm 0_{N} \; \bm I_{N}] \tag{26} k=[0N​IN​](26)

尽管 g\bm gg 和 k\bm kk 简化了算法的描述,并为其分析提供了更方便的表示,但在实际实现中,不应该直接去计算 G=FgF−1\bm G = \bm F \bm g \bm F^{-1}G=FgF−1;而应该使用 FFT 算法。为了方便起见,表I 总结出了整个算法的矩阵形式。可以看到误差向量也可以使用 k\bm kk 重写为:
E(k)=FkTe(k)(27)\bm E(k) = \bm F \bm k^{T} \bm e(k) \tag{27} E(k)=FkTe(k)(27)

考虑下面的时域约束矩阵,它和 (22)(22)(22) 中的 g\bm gg 类似 :
g~=[0N0N0NIN](28)\widetilde{\bm g} = \left[ \begin{array}{cccc} \bm 0_{N} & \bm 0_{N} \\ \bm 0_{N} & \bm I_{N} \\ \end{array} \right] \tag{28} g​=[0N​0N​​0N​IN​​](28)

不使用约束矩阵 k\bm kk 来生成 y(k)\bm y(k)y(k)的话,可以将 (18)(18)(18) 写为:
[0,⋯,0,yT(k)]T=g~F−1Y(k)(29)[0, \cdots, 0, \bm y^{T}(k)]^{T} = \widetilde{\bm g} \bm F^{-1} \bm Y(k) \tag{29} [0,⋯,0,yT(k)]T=g​F−1Y(k)(29)

它与 (23)(23)(23) 中梯度估计的形式类似。定义有约束的频域输出为 Y′(k)=F[0,⋯,0,yT(k)]T\bm Y^{'}(k) = \bm F[0, \cdots, 0, \bm y^{T}(k)]^{T}Y′(k)=F[0,⋯,0,yT(k)]T. 从 (29)(29)(29) 中可以看出 Y′(k)=Fg~F−1Y(k)\bm Y^{'}(k) = \bm F \widetilde{\bm g} \bm F^{-1} \bm Y(k)Y′(k)=Fg​F−1Y(k) 是有约束和无约束的频域输出信号向量之间的关系。等效频域约束为 G~=Fg~F−1\widetilde{\bm G} = \bm F \widetilde{\bm g} \bm F^{-1}G=Fg​F−1(类似于 G=FgF−1\bm G = \bm F \bm g \bm F^{-1}G=FgF−1)。接着,定义频域期望响应向量为 D(k)=F[0,⋯,0,dT(k)]T\bm D(k) = \bm F [0, \cdots, 0, \bm d^{T}(k)]^{T}D(k)=F[0,⋯,0,dT(k)]T,与 (19)(19)(19) 中的误差向量类似。很明显,频域的误差可以根据 E(k)=D(k)−Y′(k)\bm E(k) = \bm D(k) - \bm Y^{'}(k)E(k)=D(k)−Y′(k) 来计算。当然,这种表示不会被用于实际的算法实现中,因为这会多计算一次 DFT,但它强调了一个事实,那就是:E(k)\bm E(k)E(k) 是由受约束的输出 Y′(k)\bm Y^{'}(k)Y′(k) 确定(也就是说,E(k)\bm E(k)E(k) 不能简单地通过 D(k)−Y(k)\bm D(k) - \bm Y(k)D(k)−Y(k) 来计算得到)。

从算法的一般形式可以很明显地看出,还可能存在其他类型的梯度约束,而且这些约束可能会提高某些应用程序的性能。对于这些约束,算法可能并不是 (9)(9)(9) 中块自适应滤波器的精确实现。比如,有文献指出如果使用全秩对角阵(第 mmm 个对角元素为 (1/2)[1+cos⁡(πm/N)],m=0,⋯,2N−1(1/2)[1+\cos(\pi m/N)], \; m=0, \cdots, 2N-1(1/2)[1+cos(πm/N)],m=0,⋯,2N−1)来代替 g\bm gg,那么收敛速度可能会提高。在这种情况下,可以修改 FDAF,以使其只使用三个 DFTs,从而降低降低计算复杂度。它的收敛特性与 overlap-save 算法类似,特别是如果 FDAF 试图辨识一个阶数 ≤N\leq N≤N、 未知的且全局衰减的(globally-decaying)FIR 系统。另一类梯度约束类型,称为 Rosen’s gradient-projection method,已被用于通道均衡中。它基于一个通过搜索技术可以解决的约束优化问题。尽管该方法的性能与图 5 中的算法相似,但它的计算复杂度更大。该 FDAF 可能是第一个基于高效卷积实现所开发出的算法。

也可以完全移除梯度约束,使得 G=I\bm G = \bm IG=I。这种实现被称为无约束(unconstrained)频域自适应滤波器,除了没有约束限制外,它有着与图5 同样的配置,因此算法总共只需要三个 DFTs。相应的算法为:
W(k+1)=W(k)+2μXH(k)E(k)(30)\bm W(k+1) = \bm W(k) + 2 \mu \bm X^{H}(k) \bm E(k) \tag{30} W(k+1)=W(k)+2μXH(k)E(k)(30)

该梯度不再是线性相关;它表示循环相关,类似于 Y(k)=X(k)W(k)\bm Y(k) = \bm X(k) \bm W(k)Y(k)=X(k)W(k) 所表示的循环卷积。然而,需要注意的是,(30)(30)(30) 仍然通过 (25)(25)(25) 对输出进行了约束。

一般来说,无约束 FDAF 不会像 (24)(24)(24) 中的有约束算法那样收敛到同样的维纳权重向量,而且相应的稳态 MSE 会变大。然而,对于前述提到的 FIR 系统辨识应用,如果未知系统的长度 ≤N\leq N≤N,那么无约束 FDAF 将收敛到维纳解。其实,梯度约束被转换为了对数据的约束,这是由未知系统的长度决定的。 尽管无约束 FDAF 的收敛速度会随着时变步长而增加,但其失配也会变得更大,从而抵消了这种改进。事实上,与有约束算法相比,为了达到相同级别的失配,无约束算法需要大约两倍的迭代次数。

5.4. Overlap-Add Method

The overlap-add sectioning method 是另一种划分数据并重新组合结果以产生线性卷积的方法。用这种方法所得到的 FDAF 算法本质上与 (24)(24)(24) 中的 overlap-save FDAF 一样,除了输入信号矩阵是根据下式计算的:
X(k)=X′(k)+JX′(k−1)(31)\bm X(k) = \bm X^{'}(k) + \bm J \bm X^{'}(k-1) \tag{31} X(k)=X′(k)+JX′(k−1)(31)

其中
X′(k)=diag{F[x(kN),⋯,x(kN+N−1),0,⋯,0]T}(32)\bm X^{'}(k) = \text{diag} \{\bm F[x(kN), \cdots, x(kN+N-1), 0, \cdots, 0]^{T}\} \tag{32} X′(k)=diag{F[x(kN),⋯,x(kN+N−1),0,⋯,0]T}(32)

(17)(17)(17) 中的 X(k)\bm X(k)X(k) 包含了前一个历史数据块,而 X′(k)\bm X^{'}(k)X′(k) 包含的是补了零的当前数据块。然而,注意到 (31)(31)(31) 中的求和是包含了前一个历史数据块的,尽管该历史数据块乘了个对角矩阵 J\bm JJ(该对角阵是与时间无关的,其元素为 Jmm=(−1)m,m=0,⋯,2N−1J_{mm} = (-1)^{m}, \; m = 0, \cdots, 2N-1Jmm​=(−1)m,m=0,⋯,2N−1)。根据 (23)(23)(23) 对梯度施加同样的约束矩阵 g\bm gg,但滤波器的整体输出为:
y(k)=k~F−1Y(k)(33)\bm y(k) = \bm {\widetilde{k}} \bm F^{-1} \bm Y(k) \tag{33} y(k)=kF−1Y(k)(33)

上式与 (25)(25)(25) 类似,除了使用
k~=[IN0N](34)\bm {\widetilde{k}} = [\bm I_{N} \; \bm 0_{N}] \tag{34} k=[IN​0N​](34)

来替代 k\bm kk。输出向量 Y(k)\bm Y(k)Y(k) 和 权重向量 W(k)\bm W(k)W(k) 的计算方式与 overlap-save FDAF 中的一样。最后,通过给时域误差补零而得到的频域误差可根据下式来计算:
E(k)=Fk~Te(k)(35)\bm E(k) = \bm F \bm {\widetilde{k}}^{T} \bm e(k) \tag{35} E(k)=FkTe(k)(35)

这也与 (27)(27)(27) 类似,除了零是补在时域误差的后面。图6 给出了整个算法的架构图,表II 给出了算法具体公式。比较该算法和 overlap-save FDAF,可以看到两者的不同之处仅在于 X(k),y(k),E(k)\bm X(k), \bm y(k), \bm E(k)X(k),y(k),E(k) 的形成方式。它们本质上具有相同的计算复杂度,且收敛特性几乎也相同。尽管看起来为了存储 X′(k−1)\bm X^{'}(k-1)X′(k−1),该算法需要额外的存储空间,但 overlap-save FDAF 也是需要存储时域上的前一个历史数据块的。因此,为了计算线性卷积,输入信号的长度必须为 2N2N2N,而前一个历史数据块即可以存储在时域中(overlap-save)也可以存储在频域中(overlap-add)。


基于 overlap-add method 的原始 FDAF 总共需要七个 DFTs。(31)(31)(31) 所描述的加法先前是在时域完成的,具体做法是在 X′(k)\bm X^{'}(k)X′(k) 和 X′(k−1)\bm X^{'}(k-1)X′(k−1) 相加之前先用 IDFT 对其进行变换。这是必须的,因为 X′(k−1)\bm X^{'}(k-1)X′(k−1) 所对应的时域序列在与 X′(k)\bm X^{'}(k)X′(k) 所对应的时域序列相加之前必须是循环移位的(circularly shifted)。然而,可以证明矩阵 J\bm JJ 是循环移位操作的频域等价操作,因此不再需要额外的两个 IDFTs。

5.5. 循环卷积


通过移除图5 中对梯度的约束,2N2N2N 点的频域权重向量不再对应 NNN 点的时域权重,因此,引入的 wrap-round effects 会降低自适应算法的稳态性能。在本小节中,作者描述了 FDAF 算法的另一种修改,它进一步降低了计算复杂度,但带来的代价就是性能的退化。在 overlap-save 和 overlap-add 的 FDAFs 中,使用的是 2N 点的 DFTs,这样的话,2N2N2N 点的输出向量中有 NNN 个样本对应的是线性卷积。考虑对每个 NNN 点的数据块只计算一次 NNN 点的 DFTs(也就是 0%overlap0\% \; \text{overlap}0%overlap),如图7 中的 FDAF 所示。对于该自适应算法,权重向量和输入信号矩阵由下式给出:
W(k)=Fw(k)(36)\bm W(k) = \bm F \bm w(k) \tag{36} W(k)=Fw(k)(36)

X(k)=diag{F[x(kN),⋯,x(kN+N−1)]T}(37)\bm X(k) = \text{diag}\{\bm F[x(kN), \cdots, x(kN+N-1)]^{T}\} \tag{37} X(k)=diag{F[x(kN),⋯,x(kN+N−1)]T}(37)

整体输出为:
y(k)=F−1Y(k)(38)\bm y(k) = \bm F^{-1} \bm Y(k) \tag{38} y(k)=F−1Y(k)(38)

其中 Y(k)=X(k)W(k)\bm Y(k) = \bm X(k) \bm W(k)Y(k)=X(k)W(k)。将 (38)(38)(38) 与 (25)(25)(25) 和 (33)(33)(33) 中的线性卷积 FDAFs 进行比较,可以看到前者移除了约束矩阵 k\bm kk 和 k~\bm {\widetilde {k}}k,而且 F\bm FF 的秩现在变为 M=NM = NM=N。由于上述改变,很明显 y(k)\bm y(k)y(k) 的某些元素必然是循环卷积的结果(见图3)。

由于数据样本不重叠,且误差是输出信号和期望相应的线性函数,所以可以很容易地直接在频域计算误差,而无需额外的 DFTs(不像前面的 FDAFs)。循环卷积 FDAF 是图1 中第二个误差配置的一个示例。对 NNN 点的期望相应数据块做 DFT 变换,D(k)=Fd(k)\bm D(k) = \bm F \bm d(k)D(k)=Fd(k),那么频域的误差为:
E(k)=D(k)−Y(k)(39)\bm E(k) = \bm D(k) - \bm Y(k) \tag{39} E(k)=D(k)−Y(k)(39)

因为不存在对梯度的约束(也就是 G=I\bm G = \bm IG=I),所以算法的权重更新与 (30)(30)(30) 中无约束算法的方式一样。表III 给出了完整的算法公式,它是由 Dentino 等人首次推导得出的。

尽管循环卷积 FDAF 不需要任何约束,但它仍然是一个块算法,有着与 (9)(9)(9) 类似的更新方式。将 (13)(13)(13) 代入 (38)(38)(38),并使用 (36)(36)(36) 所计算出的权重向量,输出可以被写为:
y(k)=F−1X(k)Fw(k)=χ(k)w(k)(40)\bm y(k) = \bm F^{-1} \bm X(k) \bm F \bm w(k) = \bm \chi(k) \bm w(k) \tag{40} y(k)=F−1X(k)Fw(k)=χ(k)w(k)(40)

因为 X(k)\bm X(k)X(k) 是一个对角阵,所以 χ(k)=F−1X(k)F\bm \chi(k) = \bm F^{-1} \bm X(k) \bm Fχ(k)=F−1X(k)F 是一个循环矩阵(A circulant matrix is a square matrix with rows determined by successive right circular (‘wrap-around’) shifts of the first row), such that each row and column uniquely define the entire matrix. χ(k)\bm \chi(k)χ(k) 的第一列包含了输入数据块的 NNN 样本 {x(kN),⋯,x(kN+N−1)}\{x(kN), \cdots, x(kN+N-1)\}{x(kN),⋯,x(kN+N−1)}。对该 FDAF 算法(也就是 (30)(30)(30))进行 IDFT 变换,而且使用 χ(k)\bm \chi(k)χ(k) 的定义,可得:
w(k+1)=w(k)+2μχT(k)e(k)(41)\bm w(k+1) = \bm w(k) + 2 \mu \bm \chi^{T}(k) \bm e(k) \tag{41} w(k+1)=w(k)+2μχT(k)e(k)(41)

与 (41)(41)(41) 相关的块梯度为:
∇(k)=∑m=0N−1χm(k)e(kN+m)(42)\nabla(k) = \sum_{m=0}^{N-1} \bm \chi_{m}(k) e(kN+m) \tag{42} ∇(k)=m=0∑N−1​χm​(k)e(kN+m)(42)

其中 χmT(k)\bm \chi_{m}^{T}(k)χmT​(k) 是 χ(k)\bm \chi(k)χ(k) 的第 mmm 行(In this paper, the rows (and columns) of a matrix are numbered beginning with zero (e.g., row mmm with m=0,⋯,N−1m = 0, \cdots, N-1m=0,⋯,N−1 ))。因此,(42)(42)(42) 的块更新方式与 (9)(9)(9) 中的线性相关类似,只不过此处的误差项是与输入向量的循环移位(circularly-shifted)版本计算相关。类似地,(40)(40)(40) 中的输出向量是时域权重和输入信号循环卷积的结果。

使用 NNN 点 DFTs 的显著优势就是计算复杂度较低。包括移除梯度约束所节省的计算量,FDAF 的计算量将大大降低。主要劣势就是 FDAF 算法的性能将会下降,因为它只是 (9)(9)(9) 中块自适应算法的近似实现。由于循环卷积的 distorting effects,它的收敛特性通常与前述 FDAF 有很大的不同。

The adaptive weights in (41)(41)(41) converge to the Wiener weight vector for this filter,这与最小化块 MSE 所得到的权重完全不同。实际上,(30)(30)(30) 中的每个权重被不断调整以最小化与其频点相对应 MSE,而不是与滤波器整体输出相对应的全局 MSE。如果频点之间的相关性较低,那么最小化这两者性能函数将会产生相似的结果。然而,频点间存在不可忽视的谱重叠。所以不能期望 (41)(41)(41) 有着与线性卷积 FDAFs 相似的稳态性能。 也许也会存在些许例外,比如,在 adaptive line enhancer(ALE) 应用中,if the sinusoids are widely separated such that they lie essentially in different frequency bins.

5.6. 计算复杂度

该小节总结了块卷积 FDAFs 的计算复杂度,以便和非块时域 LMS 算法进行对比。尽管只计算了每种实现的乘法总数,但这些结果也能相当准确地比较估计算法的整体复杂度。在实际实现中,还得考虑其它一些问题,比如加法的次数,存储空间的需要,系统传输延迟以及硬件设计等等。

具有 NNN 个实数权重的非块时域 LMS 算法需要 NNN 次乘法来计算输出值,并需要 NNN 次乘法来更新权重向量,所以输出一个样本值,该算法总共需要 2N2N2N 次实数乘法,输出 NNN 个样本值,该算法总共需要 2N22N^{2}2N2 次实数乘法。表IV 给出了当 NNN 取不同的值时,每种 FDAF 的复杂度相对前述数值的比率。

每个 MMM 点的 FFT(and IFFT) 大约需要 Mlog2(M)M \; \text{log}_{2}(M)Mlog2​(M) 次实数乘法(假设输入数据是实数,并且使用基 2 FFT 算法),其中 MMM 的取值主要依赖于使用的卷积是循环卷积(M=NM=NM=N)还是线性卷积(M=2NM=2NM=2N)。 计算频域输出向量以及梯度相关都需要 4M4M4M 次实数乘法,因此,总的实数乘法次数为 PMlog2(M)+8MPM \; \text{log}_{2}(M) + 8MPMlog2​(M)+8M,其中 PPP 是 DFTs 的数量。复杂度比率为:
Complexity ratio=(PMlog2(M)+8M)/2N2(43)\text{Complexity ratio} = (PM \; \text{log}_{2}(M) + 8M) / 2N^{2} \tag{43} Complexity ratio=(PMlog2​(M)+8M)/2N2(43)

对于线性卷积 overlap-save FDAF(P=5andM=2NP=5 \; \text{and} \; M=2NP=5andM=2N)来说,总的实数乘法次数为 10Nlog2(2N)+16N10N \; \text{log}_{2}(2N) + 16N10Nlog2​(2N)+16N。因为无约束 FDAF 仅需要三个 FFTs,所以它总共需要 6Nlog2(2N)+16N6N \; \text{log}_{2}(2N) + 16N6Nlog2​(2N)+16N 次实数乘法。最后,对于循环卷积 FDAF 来说,M=NM=NM=N 且 P=3P=3P=3,它总共需要 3Nlog2(N)+8N3N \; \text{log}_{2}(N) + 8N3Nlog2​(N)+8N 次实数乘法。

从表 IV 中可以看到,不管使用哪种块频域实现,计算复杂度都会大幅降低。正如预期,循环卷积 FDAF 的计算复杂度最低,而带梯度约束的线性卷积 FDAF 的计算复杂度最高。当滤波器长度相对较小时(≈64\approx 64≈64),每个块 FDAFs 都能降低复杂度,而当 NNN 超过 100010001000 时,它们的计算复杂度优势更加突出。乘法次数能显著减少,主要是由于使用了 FFT 算法以及块更新。

5.7. Sliding DFT and Frequency-Sampling Methods



除了块频域技术之外,非块 FDAFs 技术也已被提出,它利用 DFT 的正交性来提升 LMS 算法的收敛速度。图8 展示了该技术的滤波器配置,它使用单个 DFT 将输入信号向量转换为等价的频域表示。其权重向量和输入信号矩阵的定义与循环卷积 FDAF 中 (36)(36)(36) 和 (37)(37)(37) 的定义一样。然而,不同于前述算法,此处所述的算法每接收到一个新的输入样本就计算一次 DFT,该算法是逐点更新的(也就是说 k=nk=nk=n)。当以这种方式运行的时候,DFT 通常被称为 sliding DFT。输出向量 Y(n)\bm Y(n)Y(n) 仍然按照 (13)(13)(13) 来计算,然后,对其每项求和来得到时域输出。最终,输出误差为:
e(n)=d(n)−1TY(n)(44)e(n) = d(n) - \bm 1^{T} \bm Y(n) \tag{44} e(n)=d(n)−1TY(n)(44)

其中 1\bm 11 是值全为 111 的列向量。或者,如果计算 Y(n)\bm Y(n)Y(n) 的 sliding IDFT,那么,只需要结果输出向量中的第一个元素,因为 IDFT 的第一个元素是输入向量元素的和(Actually, the first component of the IDFT would be 1TY(n)\bm 1^{T} \bm Y(n)1TY(n) divided by NNN because of the way we have defined F−1\bm F^{-1}F−1 )。

因此,该自适应算法可由下式给出:
W(n+1)=W(n)+2μ(k)XH(n)1e(n)(45)\bm W(n+1) = \bm W(n) + 2 \bm \mu(k) \bm X^{H}(n) \bm 1 e(n) \tag{45} W(n+1)=W(n)+2μ(k)XH(n)1e(n)(45)

算法中并没有梯度约束 (G=I)(\bm G= \bm I)(G=I),而且误差向量为 E(n)=1e(n)\bm E(n) = \bm 1 e(n)E(n)=1e(n)。如图8 所示,每个权重使用相同的误差项 e(n)=d(n)−y(n)e(n) = d(n) - y(n)e(n)=d(n)−y(n) 来更新。重要的一点是,该算法使用一组时变步长,体现在 (45)(45)(45) 中的 μ(k)\bm \mu(k)μ(k)。因此,由于 DFT 的正交性,对于某些输入信号,该算法可能会获得更加均匀的收敛速度。这本质上是 sliding DFT FDAF 的唯一优势;它不具备前述块 FDAF的计算效率。也可以使用其它变换,比如离散余弦变换(DCT),这些变换可能更适合于某些特定类型的信号(比如语音)。该 FDAF 经常被称为 transform-domain LMS 算法,是由 Narayan 等人首先提出的。表V 总结了完整的算法公式。

The Karhunen-Loeve transform(KLT) 将会是理想的变换,因为它考虑了输入信号相关矩阵的特征值。然而,由于假设该矩阵是未知的,甚至可能是时变的(对于非平稳的信号),所以必须通过时不变变换(比如 DCT)来近似 KLT。图8 中的 FDAF 试图通过使用固定变换并对每个权重应用单独的自适应步长来补偿特征值的差异,同时适度增加了计算复杂度。实际上,RLS 算法也使用输入信号相关矩阵的估计部分地补偿特征值的离散程度。相比标准的 LMS 算法,RLS 算法的计算复杂度更高,但它更接近理想的基于 KLT 算法的优点。

使用频率采样结构(frequency-sampling (FS) structure, This implementation of the DFT is also called a recursive DFT)可以更高效地实现图8 中的 DFT。当为每个输入样本计算 DFT 时,从输入 x(n)x(n)x(n) 到 DFT 输出的第 mmm 个元素 Xm(n)X_{m}(n)Xm​(n) 之间的传输函数为:
Hm(z)=Xm(z)X(z)=1−z−N1−e−j2πm/Nz−1(46)H_{m}(z) = \frac{X_{m}(z)}{X(z)} = \frac{1-z^{-N}}{1-e^{-j 2\pi m/N}z^{-1}} \tag{46} Hm​(z)=X(z)Xm​(z)​=1−e−j2πm/Nz−11−z−N​(46)

因此,DFT 所隐含的 FIR 滤波器组可以被替换为这种更有效的 IIR 配置。(46)(46)(46) 的分子表示一组在单位圆上等间距分布的零点(The zeros of (46)(46)(46) are referred to as the NNN roots of unity and they are given by zm=ej2πm/N,m=0,⋯,N−1z_{m} = e^{j 2\pi m/N}, \; m=0, \cdots, N-1zm​=ej2πm/N,m=0,⋯,N−1),而分母则正好包含了一个可以抵消其中一个零点的极点。图8 也给出了基于这种频率采样结构的 FDAF,可以看到在该结构中,DFT 被视为一组窄带带通滤波器。图9a 给出了 the frequency responses for the filters associated with two adjacent DFT bins, demonstrating that they have a large degree of spectral overlap. 也有文献给出了 FS 自适应滤波器的替代形式。

因为每个 FS 滤波器的极点正好位于单位圆上,所以该实现实际上是略微稳定的,任何舍入误差都可能导致滤波器变得不稳定。不过,通过使用 z−1β(0<β<1)z^{-1} \beta (0 < \beta < 1)z−1β(0<β<1) 来代替 (46)(46)(46) 中的 z−1z^{-1}z−1,可以将极点和零点往单位圆内稍微移动一些。例如,当 β=0.99\beta = 0.99β=0.99 时,所有的极点和零点都位于半径为 0.990.990.99 的圆上,因此,即使没有精确的零极点抵消,FS 滤波器也将是稳定的。

同样,也可以使用其它具有较少谱重叠的滤波器设计方法(见图9b),这样的话,就可以抽取滤波器组的输出信号。由于 FS 这种实现方法存在较大程度的谱重叠,任何抽取都会导致严重的混叠失真。而通过最小化这种重叠,可以减少混叠的影响,抽取操作也将大大降低计算复杂度,同时仍利用了滤波器组的正交特性来提升收敛速度。当然,一旦信号被抽取,就需要一个合成滤波器组来重构自适应滤波器的输出信号。这种方法被称为子带自适应滤波(subband adaptive filtering)。

6. 子带实现

6.1. 滤波器组

作为基于卷积的频域自适应滤波器的替代方案,子带技术也可以通过在自适应处理之前对信号进行抽取来达到降低计算复杂度的目的。这种方法的动机之一来自于循环卷积 FDAF,后者所用到的 DFT 可以被视为一个滤波器组,而该滤波器组的输出被因子 NNN 以最大程度进行抽取。在如前所述的频域采样结构中,DFT 滤波器组存在很大程度的谱重叠,这将导致严重的混叠失真。因此,最好使用一种谱重叠更少且计算复杂度不会明显增加的滤波器组设计方法。

用于非自适应滤波器的多速率信号处理理论已经建立了起来,而且已有许多滤波器组设计技术。子带滤波的思想主要是从语音和图像处理的工作中发展而来,在这些工作中,研究者发现将信号划分为较小的频带,可以大大降低编码复杂度。同样的思想也被扩展到了其它信号处理应用中,包括自适应滤波。子带自适应滤波器的长度比全带自适应滤波器短,尽管系数的总数通常是一样的。其计算复杂度的降低是在下采样的过程中实现的。

子带滤波器包含一个分析滤波器组,该分析滤波器组将输入信号划分为窄带频段,以便以最小的混叠失真对子带信号进行抽取。比如,在将信号转换为子带信号之后,可以对这些子带信号进行上采样(插值),然后使用一个合成滤波器组对其进行处理以生成原始信号的估计。合成滤波器组的形式与分析滤波器组类似,可以专门设计这两种滤波器组,使得它们能够对原始信号进行“完美”重建。完美重建是滤波器组的一种特性,它是指可以完全恢复原始信号的幅度和相位,除了可能存在的端到端延迟。

正交镜像滤波器(QMF)组可能是最著名的子带实现。它由一些简单的滤波器组件构成,可以通过设计这些组件使其满足一定的结构关系来实现完美重建的特性。这些滤波器组件通常是一个原型低通滤波器的频移(frequency-shifted)版本,该低通滤波器具有期望的 frequency cutoff(transition-band)specifications. QMF 实现的复杂度随着子带数量以及过渡带的 sharpness 而增加。有多种实现方式,包含树结构和多相实现。

6.2. 子带自适应滤波

在设计分析滤波器组时,最好能得到几乎不重叠的频带,以便子带自适应滤波器能独立运行。然而,实际的滤波器具有有限的过渡带,因此不重叠频带的滤波器设计会导致频谱“漏洞”,这可能会影响自适应算法的稳态性能。比如,如果将自适应滤波器配置为 ALE,未知的正弦信号可能正好处于这些 spectral gaps 中,那么,它们在自适应的过程中就有被忽视的可能。另一方面,较大程度的谱重叠导致混叠失真的同时也会降低收敛速度。很明显,在设计滤波器组时需要权衡利弊,滤波器的具体配置将取决于应用的需要。第一个子带自适应滤波器之一是基于包含一些谱重叠的 transmultiplexer 设计的。为了减少混叠,通常对滤波器组的输出信号使用小于子带数量的因子进行抽取(例如,L=N/2L=N/2L=N/2)。

图10 展示了子带自适应滤波器的基本配置,它类似于循环卷积 FDAF。前者使用了更通用的滤波器组来代替 DFTs,而且下采样是作为其实现的一部分执行的(Recall that the circular-convolution FDAF doesn’t explicitly downsample the DFT output signals; instead the DFTs are computed only once for each block of data)。子带自适应算法与 (30)(30)(30) 中的无约束递归具有相同的形式,X(k)\bm X(k)X(k) 和 E(k)\bm E(k)E(k) 的推导如图10 所示。也有文献提出了无重叠频带的子带自适应滤波器设计,但由于前述原因,该算法的收敛特性通常是不可接受的。有文献提出了一种有重叠频带的改进设计,但由于其滤波器组的输出被最大程度地抽取(“临界采样”),因此有必要包含自适应交叉项(cross-terms)以减少混叠失真。

考虑图11 展示的两个子带的情况(没有交叉项),分析滤波器为 A0(z)A_{0}(z)A0​(z) 和 A1(z)A_{1}(z)A1​(z)。通常,分析滤波器满足 A1(z)=A0(−z)=A(z)A_{1}(z) = A_{0}(-z) = A(z)A1​(z)=A0​(−z)=A(z),其中 A(z)A(z)A(z) 表示原型滤波器。合成滤波器满足 B0(z)=A0(z),B1(z)=A1(z)B_{0}(z) = A_{0}(z), \; B_{1}(z) = A_{1}(z)B0​(z)=A0​(z),B1​(z)=A1​(z)。因此,“频域”输出信号可以写为:
[Y0(z)Y1(z)]=12[W0(k,z)00W1(k,z)][A(z1/2)A(−z1/2)A(−z1/2)A(z1/2)][X(z1/2)X(−z1/2)](47)\left[ \begin{array}{cccc} Y_{0}(z) \\ Y_{1}(z) \\ \end{array} \right] = \frac{1}{2} \left[ \begin{array}{cccc} W_{0}(k,z) & 0\\ 0 & W_{1}(k,z) \\ \end{array} \right] \left[ \begin{array}{cccc} A(z^{1/2}) & A(-z^{1/2})\\ A(-z^{1/2}) & A(z^{1/2}) \\ \end{array} \right] \left[ \begin{array}{cccc} X(z^{1/2}) \\ X(-z^{1/2}) \\ \end{array} \right] \tag{47} [Y0​(z)Y1​(z)​]=21​[W0​(k,z)0​0W1​(k,z)​][A(z1/2)A(−z1/2)​A(−z1/2)A(z1/2)​][X(z1/2)X(−z1/2)​](47)

其中 X(z)X(z)X(z) 是输入,{Wm(k,z)}\{W_{m}(k,z)\}{Wm​(k,z)} 表示子带自适应滤波器(块时间参数 kkk 表明了它们的时变特性) 。zzz 的上标是用于描述多速率系统的标准符号。式 (47)(47)(47) 可以被写成以下更紧凑的形式:
Y(z)=12W(k,z)A(z1/2)X(z1/2)(48)\bm Y(z) = \frac{1}{2} \bm W(k,z) \bm A(z^{1/2}) \bm X(z^{1/2}) \tag{48} Y(z)=21​W(k,z)A(z1/2)X(z1/2)(48)

注意 W(k,z)\bm W(k,z)W(k,z) 是对角的。然而,如果考虑一个将自适应滤波器用于辨识未知传输函数 C(z)C(z)C(z) 的应用,(比如在回声消除应用中),那么,可以证明这时子带滤波器是时不变的,
W(z)≈czp⋅[A2(z1/2)C(z1/2)−A2(−z1/2)C(−z1/2)A(z1/2)A(−z1/2)[C(−z1/2)−C(z1/2)]A(z1/2)A(−z1/2)[C(z1/2)−C(−z1/2)]A2(z1/2)C(−z1/2)−A2(−z1/2)C(z1/2)](49)\bm W(z) \approx c z^{p} \cdot \left[ \begin{array}{cccc} A^{2}(z^{1/2})C(z^{1/2}) - A^{2}(-z^{1/2})C(-z^{1/2}) \; A(z^{1/2})A(-z^{1/2})[C(-z^{1/2}) - C(z^{1/2})] \\ A(z^{1/2})A(-z^{1/2})[C(z^{1/2}) - C(-z^{1/2})] \; A^{2}(z^{1/2})C(-z^{1/2}) - A^{2}(-z^{1/2})C(z^{1/2}) \\ \end{array} \right] \tag{49} W(z)≈czp⋅[A2(z1/2)C(z1/2)−A2(−z1/2)C(−z1/2)A(z1/2)A(−z1/2)[C(−z1/2)−C(z1/2)]A(z1/2)A(−z1/2)[C(z1/2)−C(−z1/2)]A2(z1/2)C(−z1/2)−A2(−z1/2)C(z1/2)​](49)

其中 ccc 是常量,ppp 是正整数。上式是维纳解的近似,因此代表了自适应滤波器的“最优”结构。很明显,这不是一个对角阵,因此应使用下面这个更一般的形式来代替 (48)(48)(48) 中的自适应矩阵:
W(k,z)=[W00(k,z)W01(k,z)W10(k,z)W11(k,z)]\bm W(k,z) = \left[ \begin{array}{cccc} W_{00}(k,z) && W_{01}(k,z) \\ W_{10}(k,z) && W_{11}(k,z) \\ \end{array} \right] W(k,z)=[W00​(k,z)W10​(k,z)​​W01​(k,z)W11​(k,z)​]

虽然修改后的子带自适应滤波器减少了混叠失真,但由于子带间不再是解耦的,因此,其收敛速度有些许降低。计算复杂度也略有增加。对于更一般的 MMM 个子带的情况,并非所有的子带自适应滤波器都必须交叉耦合,因为只有相邻的频带之间才存在较大程度的重叠,因此,交叉项导致的计算复杂度是随着子带数量线性增加的。

自适应滤波还有其它一些子带实现方式。其中一种使用无重叠的子带 QMF banks 来避免混叠失真,它用一个辅助自适应滤波器(可能具有多频带频率响应)来补偿频谱漏洞。该辅助滤波器的长度通常很短(相比于主滤波器),因此,额外增加的计算复杂度小于前述提到的交叉项。也可以对该辅助滤波器进行下采样,来进一步降低计算复杂度。虽然也存在一些其他的设计方法,但子带自适应滤波在很大程度上仍然是一个开放的研究领域。它们的收敛特性还未被分析研究,而且很难用一般方法来预测它们的行为。

7. IIR 算法和非线性误差函数

7.1. IIR 实现

与 FIR 滤波器实现相比,在频域实现自适应 IIR 滤波方面的工作相对较少。IIR 结构的一个优势是,由于存在反馈,它能用较少的系数提供更好的稳态性能,从而可以进一步降低整体复杂度。最近,一些频域 IIR 实现被用于通用信号处理应用,这些实现包括 equation-error and output-error formulations.

The equation-error formulations 类似于自适应 FIR 滤波,因为 the mean-square-equation error 是权重的二次函数;除了用于对输入信号进行加权的前馈系数外,还有类似地对延迟期望响应进行加权的 “feedback” 系数。图12 展示了该方法的一种频域实现,其类似于图5 中基于 overlap-save 的线性卷积 FDAF。首先对期望响应进行 DFT 变换,然后使用一组系数对其加权,最后将其与滤波器的前馈成分的输出进行相加。由于存在 “feedback” 系数,算法总共需要八个 DFTs,其中三个用于处理期望响应。该自适应滤波器的收敛特性与 overlap-save FIR FDAF 类似,但是,依赖于 the statistics of the input signal and the desired response,收敛的系数可能会存在偏差。

用于自适应 IIR 滤波的 output-error FDAF 能够从图8 中的非块 sliding DFT 自适应滤波器中推导出来,具体做法是用一系列单极点、单零点的自适应滤波器替换其权重。这样的配置实际上是一个并行形式的实现,在自适应之前对输入信号进行 sliding DFT 变换。Other types of filter banks can be used and, depending on their spectral overlap, they are capable of improving the convergence properties of the adaptive filter. 还可以使用 DFT 的频域采样实现。基于 output-error formulation 的自适应 IIR 滤波器可能会收敛到局部最小值,这与前述 equation-error formulation 的偏差问题类似,都是一个潜在的缺陷。

7.2. 非线性误差函数

本文主要研究具有线性误差函数的 LMS 算法,即 e(n)=d(n)−y(n)e(n) = d(n) - y(n)e(n)=d(n)−y(n)。因此,图1 中描述的两个误差公式通常是等效的,通常很容易开发出 FDAF 算法,而无论其误差是在时域还是频域计算的。另一方面,当误差是数据的非线性函数时,如何推导出频域的误差并不总是很清晰。即使这是可能的,复杂度也可能会增加,或者频域误差可能只是个近似值。

比如,考虑 constant modulus algorithm(CMA),其时域权重更新方式如下:
w(n+1)=w(n)−4μx∗(n)y(n)[∣y(n)∣2−r2](51)\bm w(n+1) = \bm w(n) - 4 \mu \bm x^{*}(n) y(n) [\left| y(n) \right|^{2} - r^{2}] \tag{51} w(n+1)=w(n)−4μx∗(n)y(n)[∣y(n)∣2−r2](51)

其中 rrr 是一个预定义的常量,上标 ∗*∗ 表示复数共轭。CMA 是一个“盲”自适应算法,因为它不需要明确的期望信号,且其目标是强制输出 y(n)y(n)y(n) 为一个常量。当 constant-modulus 信号(比如 FM)在一个具有线性和非线性失真的噪声信道上传输时,这一属性是很有用的,因为它可以通过恢复接收信号的模,充分降低 bit error rate,以便将均衡器切换到 decision-directed mode. 存在四个版本的 CMA(The performance function of CMA p−qp-qp−q is ξpq=E[∣∣y(n)∣p−rp∣q]\xi_{pq} = E[\left| \left|y(n)\right|^{p} - r^{p}\right|^{q}]ξpq​=E[∣∣y(n)∣p−rp∣q], where ppp and qqq are integers chosen to be either 111 or 222);(51)(51)(51) 的算法通常被称为 CMA 2-2。

很明显,算法的“误差”项为:−2y(n)[∣y(n)∣2−r2]-2y(n)[\left| y(n) \right|^{2} - r^{2}]−2y(n)[∣y(n)∣2−r2],是滤波器输出的非线性函数。在这种情况下,时域误差更适合在时域计算。相应的频域误差是什么并不明显,且任何近似都不太可能产生令人满意的性能。非线性误差计算的另一个例子是 decision-directed equalization scheme,它将 demodulator decisions 作为“期望响应”信号。

图13 展示了使用了多相滤波器组的 CMA 子带实现。因为滤波器组固有的群延迟(传输延迟),误差信号 E(k)\bm E(k)E(k) 并不是当前输入 X(k)\bm X(k)X(k) 的函数。因此,在计算梯度相关之前,有必要将变换后的输入延迟为 X(k−△)\bm X(k-\triangle)X(k−△),否则算法性能将严重恶化。延迟量取决于所用的滤波器组的类型,而且通常在时域计算误差时才需要。一般来说,△=⌊(QN−1)/L\triangle = \lfloor (QN-1) / L△=⌊(QN−1)/L,其中 QNQNQN 是原型滤波器的长度,NNN 是自适应权重的数量,LLL 是块长度(抽取因子)。⌊u\lfloor u⌊u 表示向下取整。对于图 9a 中的 DFT 滤波器组(最大抽取),不管 NNN 取何值,延迟总是 △=0\triangle = 0△=0。而对于基于图9b 中原型滤波器的多项滤波器组来说,QN=32,L=N=8QN = 32,L= N = 8QN=32,L=N=8,延迟 △=3\triangle = 3△=3。因此,线性卷积 FDAFs(overlap-save and overlap-add)的输入信号矩阵 X(k)\bm X(k)X(k) 不需要块延迟,即使其误差是在时域计算的。只有当滤波器组原型滤波器的长度相对于块长度超过上述阈值时,才需要延迟。

8. 结论与总结

本文介绍了几种频域自适应滤波器(FDAFs)。一般来说,根据频域变换的类型,这些算法能被分为两类。一类基于 DFT,它能实现循环卷积和线性卷积。另一类基于子带滤波技术,需要一组滤波器组对信号进行处理。这两种方法都被认为是多速率自适应滤波器,因为自适应处理的采样率低于输入数据的采样率, 从而可以降低计算复杂度。这些并行配置通常比相应的时域配置收敛得更快,并且更易于硬件实现。另一方面,它们也引入了端到端延迟,这在通信等应用中可能是个问题。此外,在累积数据块期间,权重是固定不变的,这对跟踪任务是不友好的,尤其是当数据是高度非平稳的时候。尽管如此,但频域自适应滤波器的计算优势和收敛速度优势都是相当大的,预计它们能在各种信号处理应用中得到更广泛的使用。

9. 后记

论文是发表于 30 年前的一篇综述性文章,主要介绍了几种比较经典的频域自适应滤波器,让笔者对基于 DFT 以及滤波器组的自适应滤波有了更进一步的认识。不过感觉本文对子带自适应滤波部分的描述与笔者之前所接触到的有所出入,并且论文也没有详细介绍子带分解与合成方面的知识,当然这部分也不是论文的重点所在。

后续,笔者将对子带分解与合成以及子带自适应滤波方面的知识作进一步介绍,并且也会总结一下论文所提到的信号处理的基础知识,包括循环卷积、线性卷积、overlap-add method 和 overlap-save method 以及它们各自在时域和频域的实现方法,还有 sliding DFT 的具体实现方法等。

最后,国庆节快乐!

【论文笔记之 FDAF and MAF】Frequency-Domain and Multirate Adaptive filtering相关推荐

  1. 【论文理解】Learning in the Frequency Domain

    标题:Learning in the Frequency Domain 本篇论文是CVPR2020的,觉得想法比较新颖,所以找出来看一看,学一学,希望我能看懂. 上面一行是传统的CNN流程图,它的输入 ...

  2. 论文笔记-SSF-DAN: Separated Semantic Feature based Domain Adaptation Network for Semantic Segmentation

    论文信息 论文标题:SSF-DAN: Separated Semantic Feature based Domain Adaptation Network for Semantic Segmentat ...

  3. 论文笔记:Multi-level Alignment Network for Domain Adaptive Cross-modal Retrieval

    域自适应跨模态检索的多级对齐网络 摘要 介绍 材料与方法 域自适应跨模态检索 网络体系结构 多级对齐 语义对齐 跨域对齐 跨模态对齐 联合训练与推理 结论 摘要 跨模态检索是多媒体领域中一项重要而富有 ...

  4. 【CVPR2022】Detecting Camouflaged Object in Frequency Domain

    [CVPR2022]Detecting Camouflaged Object in Frequency Domain 论文有一个非官方的实现:https://github.com/VisibleShad ...

  5. 【论文笔记之 MDF】Multidelay Block Frequency Domain Adaptive Filter

    本文对 JIA-SIEN SOO 和 KHEE K. PANG 于 1990 年在 IEEE Transactions on Acoustics, Speech, and Signal Process ...

  6. 【研究型论文】Realtime Robust Malicious Traffic Detection via Frequency Domain Analysis

    文章目录 Realtime Robust Malicious Traffic Detection via Frequency Domain Analysis 摘要 存在的问题 论文贡献 1. 威胁模型 ...

  7. Deep Learning论文笔记之(八)Deep Learning最新综述

    Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...

  8. 论文笔记:3D-CVF(ECCV 2020)

    论文笔记:3D-CVF: Generating Joint Camera and LiDAR Features Using Cross-View Spatial Feature Fusion for ...

  9. 论文笔记目录(ver2.0)

    1 时间序列 1.1 时间序列预测 论文名称 来源 主要内容 论文笔记:DCRNN (Diffusion Convolutional Recurrent Neural Network: Data-Dr ...

最新文章

  1. pytorch nn.LSTM()参数详解
  2. MyBatis3 用log4j在控制台输出 SQL
  3. Git 之fatal: remote origin already exists 错误解决办法(通俗易懂)
  4. 怎么说呢。留个纪念,关于字符串的重载
  5. 角色权限模块设计-数据pdm
  6. 2021年本溪高考成绩查询,2021年本溪高考状元名单公布 今年本溪高考状元是谁资料和分数...
  7. WD 蓝盘、绿盘、黑盘、红盘的区别
  8. java 在一个类中定义类_Java 中程序代码必须在一个类中定义,类使用( )关键字来定义。_学小易找答案...
  9. 【redis】Redis简介
  10. (八)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训
  11. python逐行读取txt文件-在python 3.4上逐行读取文本文件
  12. [面试] C++ 语法(一) —— 初始化列表的初始化顺序
  13. python可以做什么-学会Python后都能做什么?网友们的回答简直不要太厉害
  14. SQL Server数据库培训实战视频教程(2天速成版)
  15. 陈后金信号与系统matlab习题答案,陈后金信号与系统第2版课后习题答案解析
  16. python将excel生成pdf_高效办公!Python 批量生成PDF文档
  17. windows安装office2016
  18. linux登录界面配置、\etc\motd有趣的图案
  19. 【机器学习实战】决策树算法:预测隐形眼镜类型
  20. 4.5.2 Stress Testing

热门文章

  1. 我们是创业团队,实习前两月没钱,全栈每月800块!
  2. 图说三极管的三个工作状态
  3. RK3588快速上手 | 01-RK3588开发板快速上手
  4. php时间函数不准确,PHP中DATE函数与实际时间相差8小时的解决办法
  5. 现代漫威联名钢铁侠车型开售 售价21.55万元起
  6. <caption>表格标题标签
  7. 海量数据预处理实战----CSS网页样式
  8. OJ 1308 让人头疼的“双十一”
  9. 使用梯度下降求函数的极小值
  10. android 时间颜色,android修改状态栏时间和日期颜色.docx