我有一个超级简单的测试代码来在 MATLAB 中计算 FFT,我试图将其转换为 Python,但计算值不匹配。
MATLAB 代码:
rect=zeros(100,1);
ffrect=zeros(100,1);
for j=45:55
rect(j,1)=1;
end
frect=fft(rect);
Python代码
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft, ifft, fftshift, ifftshift
rect = np.zeros((100, 1))
for j in range(44, 55):
rect[j] = 1
frect = fft(rect)
问题:
使用 MATLAB 和 Python 计算出的
frect
的计算值不匹配(甚至看起来相似)。 Python 计算的值对于复数分量只有零值,对于实数只有 1。
scipy.fft.fft
计算最后一个轴上的 FFT,除非您使用 axis
参数另行指定。
在 Python 版本中,您的输入数组的形状为
(100, 1)
,因此您正在计算 100 个不同的 1 点 FFT。要计算单个 100 点 FFT,请将 rect
重塑为具有单行的 1D 向量或 2D 数组:
fft(rect.reshape(-1))
# or
fft(rect.reshape(1, -1))