该scipy.fftpack.rfft
函数将 DFT 作为浮点向量返回,在实数部分和复数部分之间交替。这意味着一起乘以 DFT(用于卷积)我将不得不“手动”进行复数乘法,这似乎很棘手。这一定是人们经常做的事情——我想/希望有一个简单的技巧可以有效地做到这一点,但我没有发现?
基本上我想修复这段代码,以便两种方法给出相同的答案:
import numpy as np
import scipy.fftpack as sfft
X = np.random.normal(size = 2000)
Y = np.random.normal(size = 2000)
NZ = np.fft.irfft(np.fft.rfft(Y) * np.fft.rfft(X))
SZ = sfft.irfft(sfft.rfft(Y) * sfft.rfft(X)) # This multiplication is wrong
NZ
array([-43.23961083, 53.62608086, 17.92013729, ..., -16.57605207,
8.19605764, 5.23929023])
SZ
array([-19.90115323, 16.98680347, -8.16608202, ..., -47.01643274,
-3.50572376, 58.1961597 ])
注意我知道 fftpack 包含一个convolve
函数,但我只需要 fft 转换的一半 - 我的过滤器可以提前 fft 一次,然后一遍又一遍地使用。