高斯函数离散逆傅里叶变换奇数采样时出现异常水平线问题
问题原因与解决方案
核心问题
你在处理频率数组的移位操作时,搞反了np.fft.fftshift和np.fft.ifftshift的用法,导致奇数采样数时直流分量被错误映射,产生意外水平线。
具体分析
- 你生成的
omega_range是对称分布(从-omega_max到omega_max),但numpy的ifft要求输入的频率数组必须是标准FFT顺序:从0频率开始,接着正频率,最后负频率。 np.fft.ifftshift的作用是将对称的频率数组转换为标准FFT顺序;而np.fft.fftshift则是将ifft输出的结果转换为对称的中心对齐形式。- 当n为偶数时,
fftshift和ifftshift的移位量恰好相同(均为n//2),错误被偶然抵消,输出正常;但n为奇数时,两者移位量不同(fftshift移位n//2,ifftshift移位(n+1)//2),错误无法抵消,导致直流分量被过度放大,出现水平线。
修复代码
只需修改逆傅里叶变换的移位顺序,调换fftshift和ifftshift的位置:
原代码行:
inverse_f = np.fft.ifftshift(np.fft.ifft(np.fft.fftshift(f_values)))
修改为:
inverse_f = np.fft.fftshift(np.fft.ifft(np.fft.ifftshift(f_values)))
验证
修改后,无论是n=1000还是n=1001,都会输出正确的高斯曲线,奇数采样数时的水平线问题完全解决。
内容的提问来源于stack exchange,提问作者Peyman
相关产品推荐
相关产品推荐

