快速卷积

快速卷积(FastConvolution)原文地址:Fast Convolution。吐血的翻译水平。


2015.08.03

快速卷积

1.5版:2004年07月21日下午12点格林尼治时间

Douglas L. Jones

这项工作是由连结项目(The Connexions Project)提供,并由知识共享署名许可(Creative Commons Attribution)授权。

摘要

用快速傅立叶变换(FFT)实现卷积的快速计算。


快速卷积

1 快速循环卷积

相当于

可以表示为 。


复杂度

卷积法的复杂度

  • N2次复数相乘。
  • N(N – 1)次复数相加。

快速傅立叶变换的复杂度

  • 3 FFTs + N次乘法(3个傅立叶变换加上N次乘法)。
  • 次复数相乘。
  • 次复数相加。

如果能被提前计算,通过FFT实现卷积计算的复杂度将只会有2 FFts + N次乘法。


2 快速线性卷积

DFT1能实现循环卷积。要实现线性卷积,必须用填补0序列的方式使得卷积后循环迂回部分为0。


要想通过快速循环卷积得到线性卷积,必须用0补齐DFTs的长度到

快速卷积_第1张图片

Figure 1

快速卷积_第2张图片

Figure 2

快速卷积_第3张图片

Figure 3

选择一个N(通常是2的指数且刚好大于L+ M – 1)通过离散傅立叶变换来实现快速卷积


注意:与循环卷积相比,在DFTs2中添加了更多的0。尽管如此,与直接计算法相比,复杂度仍旧会节约 。



2015.08.04

3 运行卷积

对于一个时域的滤波器程序,如果或者 ,就有高效的方法来快速计算卷积。

3.1 重叠保留(OLS)方法

一个长度为M的滤波器 和一个信号 的长度为N的部分作循环卷积时,计算结果的前M – 1部分数据为参与计算部分后M – 1部分数据,因此计算结果是不正确的。然而,对于结果的 部分,所发生的卷积为线性卷积,这部分计算是正确的。因此,对于长度为N的循环卷积中,只有N – M + 1部分的计算结果是正确的。

重叠保留法(The Over-Save Method):将一个长信号序列分成N块连续的信号序列,每块信号序列的前M – 1部分跟前一块信号序列的后M – 1重叠(第一块信号序列前可补M – 1个0)。然后再用滤波器 来做循环卷积,将每次循环卷积的结果的前M – 1部分去掉,并依次将每次卷积结果连接在一块就能得到正确的 。

计算长度为N的信号序列所耗复杂度相当于计算2nFFT(假设提前计算了H(k))+2FFTs以及N次乘法

次复数乘法
次复数加法
对于M元,直接卷积时的每次输出都有M – 1次加法。对于一个给定的M,通过寻找操作次数最小时的N值来使得计算过程最优。一般来说,最优的N值处于 。

3.2 重叠相加(OLA)方法

为长度为L的信号序列块添加M – 1个0。


以重叠M – 1的部分的方式连续相加每一个序列,以去掉循环卷积时所重叠的M – 1部分而得到线性卷积。这个操作的复杂度为:2个长度N = L + M – 1的FFTs,每输出L点的M元的M – 1次加法;基本跟OLS方法的复杂度相同。


快速卷积_第4张图片

Figure 4

快速卷积_第5张图片

Figure 5

快速卷积_第6张图片

Figure 6

[math translate note]
[2015.08.04-13:18]

你可能感兴趣的:(快速卷积)