我需要将一段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
干杯。
答案 0 :(得分:0)
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`