新人博主,多多支持
本文由 EasyAI 原创,首发于 CSDN
⌚️ 欢迎点赞 收藏 ⭐留言 如有错误敬请指正!
未来很长,值得我们全力奔赴更美好的生活✋
什么是循环卷积、卷积矩阵和环形矩阵?如何使用FFT?
首先,我们来回顾一下什么是循环卷积。在离散序列(如向量)上,循环卷积是两个离散数据序列的卷积,它在最大限度地提高某种普通过滤操作的效率方面起着重要作用[1]。根据定义,循环卷积可以被正式描述如下。
这里,向量x的长度为T,而向量y的长度为τ。如果我们遵循循环卷积的定义,那么得到的向量z的长度也是T,与向量x相同。
根据循环卷积的定义,我们可以用一些简单的例子来帮助理解这个概念。
可以看出,两个向量的环形卷积基本上采取线性系统。它基本上提供了对建立卷积矩阵和环形矩阵的见解。
按照上述符号,如果我们有向量x(长度为T)和y(长度为τ),那么循环卷积可以写成一个线性方程组。
为了检查如何通过使用卷积算子建立卷积矩阵,我们利用以下例子。
在这种情况下,卷积矩阵有5行(与x的长度相同)和3列(与τ相同),其列由以下公式给出
( x 1 x1 x1, x 2 x2 x2, x 3 x3 x3, x 4 x4 x4, x 5 x5 x5),从$x 1 到 1到 1到x5$开始。
( x 5 x5 x5, $x$1, x 2 x2 x2, x 3 x3 x3, x 4 x4 x4),第一项为 x 5 x5 x5。
( x 4 x4 x4, x 5 x5 x5, x 1 x1 x1, x 2 x2 x2, x 3 x3 x3),前两项为 x 4 x4 x4和 x 5 x5 x5。
那么,上面提到的例子现在变成了
回想一下,卷积矩阵对长度为 T T T的向量 x x x起作用,是否有可能保留向量 x x x并在 y y y上建立某种矩阵?
答案是肯定的! 让我们来看看循环卷积的一个重要属性。
根据循环卷积的定义,我们可以在长度为 τ τ τ的向量y上建立一个大小为 T T T乘 T T T的循环矩阵 Y Y Y,由于 τ τ τ不大于 T T T,循环矩阵 Y Y Y有时是稀疏的。例如,我们有
环形矩阵中共有5列。请注意,第一列是( y 1 y1 y1, y 2 y2 y2, y 3 y3 y3, 0 0 0, 0 0 0),其中第一列的最后两个条目是由零填充的。
那么,上面提到的例子现在变成了
可以看出,结果与循环卷积相同。
离散傅里叶变换(DFT)是数学中的一个重要概念,在数字信号处理和图像处理领域有广泛的应用。DFT是最重要的离散变换,在许多实际应用中用来进行傅里叶分析[2]。由于DFT的实现通常采用高效的快速傅里叶变换(FFT)算法,所以FFT和DFT这两个术语经常被交替使用[2]。
请注意,FFT是一种计算DFT的高效算法(DFT和FFT的区别见[3])。它是任何高效算法的名称,可以在大约 O O O( n n n log n n n)时间内计算DFT,而不是 O ( n 2 ) O(n^2) O(n2)时间[3]。
在这个帖子中,我们可以利用这样一个事实:时域的卷积是频域的乘积。DFT卷积定理可以总结如下,
那么,上面的例子现在变成了:
在这里,向量 y y y的最后两个条目被填充了零,它确实是环形矩阵 Y Y Y的第一列。
可以使用NumPy包来计算FFT和反FFT。
值得注意的是,要执行 Hadamard 产品, f x fx fx和 f y fy fy应该具有相同的长度。
在信号处理中,可以证明时域的卷积是频域的乘积。如果将向量变换到频域,我们可以使用DFT(或现实计算中的FFT)来实现快速计算,它本质上是变换向量的 Hadamard 积的逆 FFT。为了达到循环卷积和DFT之间的最终属性,我们引入了一些基本概念:循环卷积、卷积矩阵和循环矩阵。
[1] 维基百科上的循环卷积:https://en.wikipedia.org/wiki/Circular_convolution
[2] 维基百科上的离散傅里叶变换:https://en.wikipedia.org/wiki/Discrete_Fourier_transform
[3] DFT和FFT有什么区别?https://math.stackexchange.com/q/30464/738418