我编写了一个代码来使用 scipy.fft代码如下:
import numpy as np
from scipy.fft import fft, fftfreq, fftshift
import matplotlib.pyplot as plt
T = 10
dt = 0.001
f = 50.0
x = np.arange(0.0, T, dt)
y = np.exp(1.j * 2 * np.pi * f * x)
xf = fftfreq(len(x), dt)
xf = fftshift(xf)
yf = fft(y)
yf = fftshift(yf)
plt.plot(xf, 1.0/len(x) * yf, label='yf')
plt.plot(xf, 1.0/len(x) * np.abs(yf), label='abs(yf)')
plt.xlabel('f')
plt.legend()
plt.show()
计算的输出是具有单峰的频谱,对于 yf 及其绝对值(完全重叠)都以频率为中心:

现在我不使用频率,而是假设使用角频率:
import numpy as np
from scipy.fft import fft, fftfreq, fftshift
import matplotlib.pyplot as plt
T = 10
dt = 0.001
omega = 50.0
x = np.arange(0.0, T, dt)
y = np.exp(1.j * omega * x)
xf = fftfreq(len(x), dt)
xf = fftshift(xf)
yf = fft(y)
yf = fftshift(yf)
plt.plot(2 * np.pi * xf, 1.0/len(x) * yf)
plt.plot(2 * np.pi * xf, 1.0/len(x) * np.abs(yf))
plt.show()
在图中,我将 xf 乘以以将频率转换为角频率。当然,这对应于与第一个示例不同的频率,但我预计会有类似的行为。在这种情况下 yt 具有一种分散的形状,虽然它的绝对值非常宽泛,但它没有被归一化并且在处不是完美的峰值,但它略微移动到。
有人可以给我一些关于这种意外行为的解释吗?如果我必须使用来自复杂计算的原始数据,以角频率表示,我如何从第二个程序中获得可靠的结果?
