gpt4 book ai didi

python - Matlab 和 numpy/scipy 中的 FFT 给出不同的结果

转载 作者:太空狗 更新时间:2023-10-29 17:30:53 24 4
gpt4 key购买 nike

我正在尝试重新实现其中一个 matlab 工具箱。他们在那里使用 fft。当我对相同的数据执行相同的操作时,我得到的结果与来自 matlab 的结果不同。随便看看:

MATLAB:

Msig =

0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 1 0 0
0 0 0 0

fft(Msig.')

Columns 1 through 4

0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

Columns 5 through 6

1.0000 0
0 - 1.0000i 0
-1.0000 0
0 + 1.0000i 0

Python:

Msig=
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 0., 0.]])

np.fft.fft(Msig.transpose())
array([[ 0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j,
0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j,
0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j],
[ 1.0 +0.00000000e+00j, -0.5 +8.66025404e-01j,
-0.5 -8.66025404e-01j, 1.0 -3.88578059e-16j,
-0.5 +8.66025404e-01j, -0.5 -8.66025404e-01j],
[ 0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j,
0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j,
0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j],
[ 0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j,
0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j,
0.0 +0.00000000e+00j, 0.0 +0.00000000e+00j]])

如果我弄乱了 np.fft.fft()/np.fft.fft2()/np.fft.fftn() 的参数(轴等),我能得到的最好结果是相同的值但发生了偏移。不幸的是,手动移位不是一种选择,因为 Msig 矩阵的大小和形状会根据输入参数而变化。

你知道如何解决这个问题,可能是什么原因?

最佳答案

Matlab 将 fft 应用于矩阵的列,numpy 默认将 fft 应用于最后一个轴(行)。你想要:

>>> np.fft.fft(Msig.T, axis=0)
array([[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j],
[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.-1.j, 0.+0.j],
[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, -1.+0.j, 0.+0.j],
[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+1.j, 0.+0.j]])

>>> np.fft.fft(Msig).T
array([[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j],
[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.-1.j, 0.+0.j],
[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, -1.+0.j, 0.+0.j],
[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+1.j, 0.+0.j]])

关于python - Matlab 和 numpy/scipy 中的 FFT 给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8680909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com