【发布时间】:2022-01-07 15:59:33
【问题描述】:
我使用下面的参数和公式来生成信号。
python 代码:
import numpy as np
fs=15e6
dt=1/fs
f0=1e6
pri=400e-6
t=np.arange(0,pri,dt)
i=64
fd=5/(i*pri)
xt=0.1*np.exp(2j*np.pi*f0*t)
xf=np.fft.fft(xt)
matlab代码与python代码非常相似:
fs=15e6
dt=1/fs
f0=1e6
pri=400e-6
t=0:dt:pri-dt
i=64
fd=5/(i*pri)
xt=0.1*exp(2j*pi*f0*t)
xf=fft(xt)
这些代码将生成一个长度为 6000 的数组来执行 fft。然后我用同样的方法在matlab中计算结果。当fft长度小于6000时,结果是完全一样的。但是当fft长度为6000时,结果就有点不同了。 python中xf的结果是:
xf[:5] = [4.68819428e-12-2.53650626e-12j,
6.55886345e-12+4.51937973e-13j,
5.91758655e-12+4.48215898e-12j,
2.07297400e-12+6.37992397e-12j,
-1.44454940e-12+5.60550355e-12j]
xf在matlab中的结果是:
xf(1:5) = 5.165829569664382e-12+1.503743771929872e-12j
4.389776854811194e-12+5.127317569216533e-12j
1.067288620484369e-12+7.191186166371298e-12j
-3.058138112418996e-12+6.189531470616248e-12j
-5.288313073640339e-12+2.908982377132765e-12j
如果在 python 中使用长度 5999 来做 fft: xf=np.fft.fft(xt, 5999) 或在matlab中: xf=fft(xt, 5999) 结果是完全一样的。 在python中:
xf[:5] = [-0.09135455+0.04067366j,
-0.09160153+0.04072616j,
-0.09184974+0.04077892j,
-0.09209917+0.04083194j,
-0.09234986+0.04088522j]
在matlab中:
xf(1:5) = -9.135455e-02+4.067366e-2j
-9.160153e-02+4.072616e-2j
-9.184974e-02+4.077892e-2j
-9.209917e-02+4.083194e-2j
-9.234986e-02+4.088522e-2j
我很困惑。任何人都可以说明这种现象吗?谢谢你的帮助。 PS:python 3.8.5,numpy 1.19.2,matlab 2014
【问题讨论】:
-
欢迎来到本站!请也发布 Matlab 代码,其中包含重现问题的确切参数
-
我刚刚发布了matlab代码。期待发现问题。
-
请说明你看到了什么不同。