循环卷积(转)

来源:互联网 发布:大数据预测分析例子 编辑:程序博客网 时间:2024/05/08 21:02


循环卷积(转)

循环卷积我理解是使用DFT(FFT)计算线性卷积时的衍生品。

首先连续时间没有循环卷积概念。

离散时间时,不妨假设x(n)为L点信号, 仅在0~L-1有非零值;h(n)为M点信号,仅在0~M-1有非零值。以x(n)为输入信号通过以h(n)为单位冲激响应的线性时不变系统得到输出 y(n) = x(n) * h(n),线性卷积,直接计算的复杂度为 O(LM)。


卷积计算通常比较复杂,一种可能的简化思路是考虑放到频域计算, DTFT上场。

时域卷积,频域相乘

DTFT[ y(n) ] = DTFT[ x(n) ] DTFT[ h(n) ]


但是DTFT由于频域连续不便处理,

DTFT[x(n)] := \sum^{\infty}_{n=-\infty} x(n)e^{-jwn} \\ = \sum^{L-1}_{n=0} x(n)e^{-jwn} = X(e^{jw})


因此找到DFT, 它将频域离散化了,因此很方便计算机处理, 特别是DFT还有快速算法FFT。


那么IDFT[ DFT[ x(n) ] DFT[ h(n) ] ] 是否等于IDFT[ DFT[ y(n) ] ] 呢? 如果是,那简直是极好的;如果不是,那二者又存在何种关系呢?


IDFT[DFT[x(n)] DFT[h(n)]] \stackrel{?}{=} IDFT[DFT[x(n)*h(n)]]


其中

DFT[x(n)] := \sum^{N-1}_{n=0} x(n)e^{-j n k\frac{2\pi}{N}} =X(k), k=0,...,N-1 \\ IDFT[X(k)] := \frac{1}{N}\sum^{N-1}_{k=0} X(k)e^{j n k\frac{2\pi}{N}} =\hat{x}(n), n=0,...,N-1


很遗憾,上式成立是有条件的,这个条件我会在后面分析。注意所有的DFT/IDFT都隐含了一个相同的参数 N, 为DFT的点数, 而上式成立条件正是跟N有关。


那么IDFT[DFT[x(n)] \bullet DFT[h(n)]]究竟和x(n), h(n)满足什么样的关系呢? 根据频域相乘时域卷积的特点,结果应该类似卷积,但又不是卷积,而按照定义求解后发现表达式中有周期延拓(循环)的过程,那就将其定义为循环卷积吧。


IDFT[DFT[x(n)] \bullet DFT[h(n)]] = x(n) \otimes h(n)

循环卷积的点数和DFT/IDFT点数相同。


x(n) \otimes h(n) := \left [\sum^{N-1}_{m=0} x(m)h((n-m))_N \right ] R_N(n) \\ = \left [\sum^{N-1}_{m=0} h(m)x((n-m))_N \right ] R_N(n)
其中

x((n))_N = \sum^{+\infty}_{r=-\infty} x(n+rN)


R_N(n)=\begin{cases}1, & 0 \le n \le N-1 \\ 0, &else \end{cases}


当然,按照循环卷积的定义,任意两个信号,我完全可以在时域上按照定义去计算,而丝毫不关DFT/IDFT什么事,但是正常两个信号,没毛病我搞个又是循环又是卷积的这么奇怪的运算算个什么事! 因此,我理解循环卷积是使用DFT计算线性卷积的衍生品。


下面分析IDFT[ DFT[ x(n) ] DFT[ h(n) ] ] = IDFT[ DFT[ y(n) ] ] 成立的条件,前面已经提到这个条件跟DFT点数N有关。


由定义

DFT[x(n)] := \sum^{N-1}_{n=0} x(n)e^{-jnk\frac{2\pi}{N}} =X(k), k=0,...,N-1
注意这里N和L未必相同,显然若N\ge L, 则


X(k) = X(e^{jw})|_{w=k\frac{2\pi}{N}}, k=0,...,N-1


N <L时,x(N), ... , x(L-1) 被丢弃了,因此上式的采样关系不复存在,我们自然不希望如此。

注意到对X(e^{jw})采样其对应时域x(n)将周期延拓,而x(n)为有限长L点序列,因此只要延拓周期N \ge L,则可根据采样信号X(k)无失真重建原频域信号X(e^{jw}),此时频域采样间隔为2\pi/N.

有了上面讨论的基础,下面就简单明了了。
我们知道,


Y(e^{jw}) = X(e^{jw})H(e^{jw})

因此

Y(e^{jw}) |_{w=\frac{2\pi}{N}}= X(e^{jw}) |_{w=\frac{2\pi}{N}}H(e^{jw}) |_{w=\frac{2\pi}{N}}


这种采样点间的关系是恒成立的,关键是能否转换成DFT形式,这要求做DFT的点数N不能比原信号短。


我们首先假设N \ge LN \ge M, 这样右边的DTFT采样形式可以转换成DFT形式,即


Y(e^{jw})|_{w=k\frac{2\pi}{N}} = X(k) H(k),k=0,...,N-1

我们知道y(n)的长度为L+M-1 (由卷积定义可确定),因此当N \ge L+M-1时,左边也正是Y(k) ,两边做IDFT,得


y(n) = x(n)*h(n) = x(n) \otimes h(n)


而当N < L+M-1时,左边时域将按N点进行周期延拓产生混叠,最终取主值区。


\hat{y}(n)=IDFT\left[Y(e^{jw})|_{w=k\frac{2\pi}{N}} \right] = \sum^{+\infty}_{r=-\infty} y(n+rN) , n=0,...,N-1

显然,N \ge L+M-1时,y(n) = \hat{y}(n)


综上,当N \ge LN \ge M时,循环卷积和线性卷积的关系如下:


(x \otimes h)(n) = \sum^{+\infty}_{r=-\infty} (x*h)(n+rN), n=0,...,N-1



下面解决一下遗留问题:当 N < L 或/与 N < M 时,将会怎样?

不妨假设 N < L, 此时定义x(n)信号的截断信号为:


x'(n) =x(n)R_N(n)


R_N(n)=\begin{cases}1, & 0 \le n \le N-1 \\ 0, &else \end{cases}

那么,信号x都变了,期望得到的循环卷积和线性卷积的关系就无从说起了。


(x' \otimes h)(n) = \sum^{+\infty}_{r=-\infty} (x'*h)(n+rN), n=0,...,N-1


复杂度分析

上面讨论了当N \ge L+M-1时,


 x(n)*h(n) = x(n) \otimes h(n) = IDFT \left[ DFT[x(n)]\bullet DFT[h(n)] \right]

从而可以考虑通过FFT(也就是DFT的快速算法)间接求解两个信号的卷积。 由上式可知,需要做3次N点FFT(两次正变换,一次反变换),一次N点复数乘法。 N点FFT的时间复杂度为 O(N logN),对比直接卷积的时间复杂度O(LM)。 忽略系数,仅考虑数量级差距, 在 L, M相当时,L \approx M \approx N/2


因此直接卷积的时间复杂度为 O(N^2)大于通过FFT实现的间接卷积时间复杂度O(NlogN).


注意,许多情况下,信号长度远远大于滤波器长度,滤波器长度M为常数,

N \approx L \gg M

此时直接卷积的效率反而优于基于FFT实现的卷积。 (O(M N) V.S. O(N logN) )

这种情况下,通常会把信号分成许多小段,每个小段长度和滤波器长度相当, 通过重叠相加法(Overlap-Add method)或重叠保留法(Overlap-Save method)来进行加速。而每个小段与滤波器的卷积通过FFT间接得到。 对于很大的图像与相对特别小的卷积核卷积时同样可以类似通过对图像分块来获得加速。


DFT定义分析

最后,我们补充分析一下DFT/IDFT的定义。我们来看DFT/IDFT的定义,最常见的定义方式如下

DFT[x(n)] := \sum^{N-1}_{n=0} x(n)e^{-j n k\frac{2\pi}{N}} =X(k), k=0,...,N-1 \\ IDFT[X(k)] := \frac{1}{N}\sum^{N-1}_{k=0} X(k)e^{j n k\frac{2\pi}{N}} =\hat{x}(n), n=0,...,N-1

这是一个纯数学意义上的定义,你不需要理解时频对称问题,不需要理解采样定理,也无需处理可能的混叠问题,你仅需把DFT当成一个正交变换,对信号做一个旋转。


X = Wx \\ \hat{x} = \frac{1}{N}W^HX


其中x, X为N维向量, W为 N\times N矩阵; 系数1/N放到正、反变换中均可,也可以分两个1/\sqrt{N}分别放到正反变换中,那样变换矩阵就是真正的正交阵了,传统上系数常放在反变换中。 按照这种定义,可以证明,


\frac{1}{N}W^HW = I


因此, \hat{x} = \frac{1}{N}W^HX = \frac{1}{N}W^HWx = x, 也即可以完美重建原信号, 当然对于DFT点数不够,小于原信号长度时,那么就是对截断信号进行变换了,自然也能够通过反变换恢复截断信号。因为只是正交变换转过去又转回来嘛。


但是很多时候你做FFT时是考虑着信号频域特征的,也即心里是考虑着物理意义的。此时应该把DFT理解成DTFT频域等间隔采样, 而根据采样定理如果采样间隔足够小,是能够由采样值序列恢复出连续的DTFT频谱的,此时可以认为二者等价。 当你做FFT后,你实际上得到了原时域信号的频谱,那么后续对X(k)的处理也就是对频谱X(e^{jw})的处理。而根据时频对称性,你心里应该很清楚对应时域究竟在做着什么事情,反之亦然。



作者:水木八刀
链接:https://www.zhihu.com/question/25525824/answer/93515223
来源:知乎