给定两个有限序列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的值不同。我的代码中有错误吗?
答案 0 :(得分:1)
如果希望快速卷积结果产生线性卷积结果,则必须对FFT进行零填充。否则,如果你没有填零,你将得到一个循环卷积(结束卷积结果环绕并与前面求和)来自2个FFT的逐元素乘法。
答案 1 :(得分:0)
你必须将它改回来:
recovered_vector = np.fft.ifft(CDftxy)
但是,周期性的边界条件..你不会看到任何合理的三元矢量