我需要将一段MATLAB代码转换为Python,但我两者都不好。MATLAB 中的代码使用fft
和fftshift
。我尝试在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)
以下是S
和Modes_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`