【问题标题】:Converting Matlab code into Python - FFT将 Matlab 代码转换为 Python - FFT
【发布时间】:2018-05-07 22:12:27
【问题描述】:

我需要将一段 MATLAB 代码转换为 Python,而我在这两个方面都不擅长。 MATLAB 中的代码使用fftfftshift。我尝试在 Python 中使用 NumPy。代码运行,但是当我比较结果时它们不匹配。感谢您的帮助。

这是 MATLAB 代码:

h(1,1:Modes_number) = -1i*S;
hfft = fft(h);
hft0 = fftshift(hfft);

这是我写的 Python 代码:

h = np.zeros((1,self.cfg.Modes_number+1),dtype=complex) 
for i in range(0, self.cfg.Modes_number+1):
   h[0,i] = -1j*S;

hfft = np.fft.fft(h)
hft0 = np.fft.fftshift(hfft)

这是SModes_number 的值:

S = 12.5022214424;
Modes_number = 200;

这也是我在 MATLAB 和 Python 中得到的结果示例:

MATLAB:
hfft(1,1)
ans =
   1.1857e-13 - 2.5129e+03i

Python:
hfft[0]
0. -2.52544873e+03j

干杯。

【问题讨论】:

  • 我也不擅长 Python,但我会保留纯粹的一维数据,而不是 MATLAB 中标准的单维二维:h=np.zeros(self.cfg.Modes_number,dtype=complex)
  • 以上评论有帮助吗?如果没有,请告诉我们Modes_numberS 的值,没有这些我们无法重现您所看到的。
  • 嗨 Cris,感谢您的回复和跟进。不幸的是,我无法使用您的提示修复它。这是 S 和 Modes_number 的值:code S=12.5022214424 code Modes_number = 200 这也是我在 MATLAB 和 Python 中得到的结果示例:MATLAB hfft(1,1) ans = 1.1857e-13 - 2.5129e+03i Python hfft[0] = 0.-2.52544873e+03j

标签: python matlab numpy fft


【解决方案1】:

您的 Python 代码中的错误是您将 h 定义为大小为 Modes_number+1,这比 MATLAB 代码中的大小大一。 hfft 中的第一个值是所有输入值的总和。在 MATLAB 中这是 -1j*S*200 = -2500.4j,在您的 Python 代码中是 -1j*S*201 = -2512.9j。这些是您看到的值。

这段 Python 代码产生的结果与您的 MATLAB 代码相同,达到数值精度(我在 Python 中看到一些值,例如 -1.68388521e-15 +6.55829989e-15j,它被 MATLAB 的算法强制为 0)。我将 h 创建为一维向量,而不是一维大小为 1 的二维数组。

import numpy as np

S = 12.5022214424
Modes_number = 200
h = np.zeros(Modes_number,dtype=complex)
for i in range(0,Modes_number):
   h[i] = -1j*S;
hfft = np.fft.fft(h)
hft0 = np.fft.fftshift(hfft)

Python:

>>> hfft[0]
-2500.4442884800001j

MATLAB:

>> hfft(1)
ans = 
   0.000000000000000e+00 - 2.500444288480000e+03i`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-30
    • 2018-05-13
    • 2018-09-10
    相关资源
    最近更新 更多