Matlab与Python逆傅里叶变换计算结果不一致问题
Matlab IFFT结果对齐Python的解决方案
问题根因
你遇到的虚部符号翻转、元素顺序颠倒问题来自两处已知的Matlab/Python语法&实现差异,以及你贴出的Matlab代码的显性错误:
- Matlab代码存在两处错误:
- 数组
a定义时将复数-26.39236508 -2.20896985i拆分为两个独立元素,额外多了一个冗余0元素,实际运行时有效输入长度为16,和Python侧输入长度一致 - 调用
ifft(x)时变量名和定义的a不匹配,大概率x是a通过Matlab的'运算符得到的,Matlab的'是共轭转置运算符,会自动翻转复数虚部符号,这是虚部符号差异的核心来源
- 数组
- 元素顺序差异来自你当前Matlab的输出逻辑,对应Python输出共轭后,除首元素外的剩余序列倒序排列
对齐代码
如果你需要Python直接输出和你提供的Matlab结果完全一致的内容,直接使用如下调整后的代码:
import numpy as np a = [ 81.42663125 -5.6074337j, -26.39236508 -2.20896985j, 0.+0.j, 0.+0.j, 0.+0.j, 81.42663125-5.6074337j, -26.39236508-2.20896985j, 0.+0.j, 0.+0.j, 0.+0.j, -41.21717133+13.27058111j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j,0.+0.j] b = np.asarray(a) py_inverse = np.fft.ifft(b) # 对齐Matlab输出的调整逻辑 matlab_inverse = np.concatenate([py_inverse[:1].conj(), np.flip(py_inverse[1:].conj())])
如果要从根源对齐两边逻辑,先修正Matlab侧代码:
- 修正数组定义,保证和Python侧每个元素的实部、虚部完全一致,长度统一为16
- 避免使用共轭转置运算符
'传递数组,普通转置使用.'运算符,保证输入数组完全一致,此时np.fft.ifft和Matlab的ifft输出天然对齐,不需要额外调整。
内容的提问来源于stack exchange,提问作者Amanda Willis
相关产品推荐
相关产品推荐

