将 Matlab 代码转换为 Python - FFT



我需要将一段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 代码中的错误在于您将h定义为大小Modes_number+1,这比 MATLAB 代码中的大小大 1。hfft中的第一个值是所有输入值的总和。在MATLAB中,这是-1j*S*200 = -2500.4j,在你的Python代码中,这是-1j*S*201 = -2512.9j。这些是您看到的值。

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

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)

蟒:

>>> hfft[0]
-2500.4442884800001j

马特实验室:

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

最新更新