【发布时间】:2021-05-12 21:45:31
【问题描述】:
我使用odeint 整合了一个由 400 个微分方程组成的系统(前 200 个方程是 200 个神经元的 x 分量的方程,另外 200 个 y 分量的方程)。所以我做集成的代码主体是这样的
t_final = 100.0
dt = 0.01
t = np.arange(0, t_final, dt)
sol = odeint(full_derivative, z0, t)
x10 = sol[:,9]
y10 = sol[:,209]
我使用哪个模型并不重要(我不想让事情变得更复杂),但集成部分是正确的。在x10 中有我系统的第 10 个振荡器的 x 分量信号,看起来像这样
很明显,这是一个具有特定周期和频率的周期信号。所以我想做一个傅里叶变换来找到这个频率。我使用此代码进行转换
from scipy import fftpack
f_s = len(t)//2
X = fftpack.fft(x10)
freqs = fftpack.fftfreq(len(x10)) * f_s
fig, ax = plt.subplots()
ax.stem(freqs, np.abs(X))
ax.set_xlabel('Frequency in Hertz [Hz]')
ax.set_ylabel('Frequency Domain (Spectrum) Magnitude')
ax.set_xlim(-f_s / 2, f_s / 2)
#ax.set_ylim(-5, 110)
我得到的结果是这个(这不是很漂亮,因为它表明频率大约为零)。
我可以做些什么来修复我的代码中的错误?
p.s. 也许在这个例子中系统的频率是比较明显的,但是如果我改变我的问题的参数,我最终会得到更复杂的解决方案。这就是我想做傅立叶变换的原因。
【问题讨论】:
-
直到你得到可靠的结果我建议你使用正弦曲线作为你的输入信号......它给你一个已知的输入频率和一个可预测的输出......用正弦曲线收紧你的代码直到您的输出显示与您的输入匹配的频率,然后担心复杂的输入信号
标签: python python-3.x scipy signal-processing fft