使用numpy实现互相关FT验证卷积定理结果顺序不匹配问题求助
互相关傅里叶变换验证卷积定理顺序错位问题修复
问题根因
- FFT工具的默认坐标约定为:数组左上角对应零频率点,你填充后的滤波器核中心位于5x5数组的中心位置(2,2),没有与FFT的坐标原点对齐,导致频域相乘后逆变换的结果出现循环移位,所以元素完全一致但排列顺序不同。
- 你当前使用的是单位脉冲卷积核,因此逆变换结果直接呈现为输入矩阵的循环移位,与你提供的运行结果特征完全匹配。
修复方法
在对填充后的滤波器做FFT变换前,调用np.fft.ifftshift将滤波器核的中心移动到FFT约定的左上角原点位置即可,仅需要修改一行代码。
修复后关键代码片段
w_numpy = weights1.numpy() weights_numpy = w_numpy.copy() pad_weights = np.pad(weights_numpy, ((1, 1), (1, 1)), mode='constant', constant_values=(0, 0)) # 新增ifftshift操作对齐FFT坐标约定 pad_weights = np.fft.ifftshift(pad_weights) fft_weights = fft2(pad_weights)
运行验证
修改后重新运行代码,逆变换输出的实部结果将和F.conv2d的直接计算结果完全一致。
内容的提问来源于stack exchange,提问作者Andrei Tulbure
相关产品推荐
相关产品推荐

