Python与MATLAB计算FFT结果不匹配问题求助
问题原因与解决办法
你的问题出在数组维度上:
- MATLAB里
rect是100×1的列向量,fft(rect)会对整个向量做一维FFT。 - Python中你创建的
rect是(100,1)的二维数组,scipy.fft.fft默认对最后一维(也就是每个长度为1的子数组)做FFT,单个元素的FFT结果就是它本身,所以得到实部全1、虚部全0的结果。
修正后的Python代码
把二维数组改成一维数组,或者指定FFT的轴:
方法1:使用一维数组
import numpy as np from scipy.fft import fft rect = np.zeros(100) for j in range(44, 55): rect[j] = 1 frect = fft(rect)
方法2:指定FFT的轴
如果需要保留二维结构,在fft中指定axis=0:
import numpy as np from scipy.fft import fft rect = np.zeros((100, 1)) for j in range(44, 55): rect[j] = 1 frect = fft(rect, axis=0)
修正后,Python计算的frect就会和MATLAB的结果一致(MATLAB与scipy的FFT输出顺序一致,无需额外移位,除非需要中心对称的频谱)。
内容的提问来源于stack exchange,提问作者skm
相关产品推荐
相关产品推荐

