使用 Python 和 MATLAB 计算的 FFT 值不匹配?

问题描述 投票:0回答:1

我有一个超级简单的测试代码来在 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。

python matlab fft
1个回答
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))
© www.soinside.com 2019 - 2024. All rights reserved.