两个离散傅立叶变换的共卷积

时间:2016-05-13 13:56:12

标签: python numpy fft convolution

给定两个有限序列x(i)和y(i),i = 1 ... n。我知道点积x.y的离散傅立叶变换(DFT)等于x和y的两个DFT之间的卷积:

DFT(x.y) = (DFT(x) * DFT(y))/n

现在我在python中测试这个简单的代码:

import numpy as np
x = np.array([1,2,3])
y = np.array([0.1, 1, 0.5])

Dftxy = np.fft.fft(x*y) # DFT(x.y)

Dftx = np.fft.fft(x)
Dfty = np.fft.fft(y)
CDftxy = np.convolve(Dftx,Dfty,'same') / 3 # (DFT(x)*DFT(y))/n 

结果是:

Dftxy = [3.60+0.j, -1.65-0.4330127j, -1.65+0.4330127j]
CDftxy = [-2.10-0.40414519j, -1.65+0.4330127j, 0.40+0.j]

Dftxy和CDftxy的值不同。我的代码中有错误吗?

2 个答案:

答案 0 :(得分:1)

如果希望快速卷积结果产生线性卷积结果,则必须对FFT进行零填充。否则,如果你没有填零,你将得到一个循环卷积(结束卷积结果环绕并与前面求和)来自2个FFT的逐元素乘法。

答案 1 :(得分:0)

你必须将它改回来:

recovered_vector = np.fft.ifft(CDftxy)

但是,周期性的边界条件..你不会看到任何合理的三元矢量