无法使用傅立叶变换找到信号的频率

问题描述

我使用 mix.webpackConfig({ stats: { hash: true,version: true,timings: true,children: true,errors: true,errorDetails: true,warnings: true,chunks: true,modules: false,reasons: true,source: true,publicPath: true,} }); 一个包含 400 个微分方程的系统进行积分(前 200 个方程是 200 个神经元的 x 分量方程,以及其他 200 个 y 分量的方程)。所以我进行集成的代码主体是这样的

odeint

我使用哪个模型并不重要(我不想让事情变得更复杂),但集成部分是正确的。在 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] 中有我系统第 10 个振荡器的 x 分量信号,看起来像这样

enter image description here

很明显,这是一个具有特定周期和频率的周期信号。所以我想做一个傅立叶变换来找到这个频率。我使用此代码进行转换

x10

我得到的结果是这样的(这不是很漂亮,因为它表明频率大约为零)。

enter image description here

我该怎么做才能修复代码中的错误

ps 也许在这个例子中,系统的频率是相对明显的,但是如果我改变我的问题的参数,我最终可能会得到更复杂的解决方案。这就是我想做傅立叶变换的原因。

解决方法

如果第一个图中的时间单位是第二个,则该图对我来说很有意义,因为那样您应该有一个接近 0.1Hz 的重要频率分量。

我在第一部分看到您使用了 dt = 0.01,我知道这是采样间隔。其次,您使用的 f_s = len(t) // 2 应该是 1.0/dt 这实际上会使您发现的频率更小,因为现在 f_s 将是 100 而不是 5000,但是您的频率搜索仍然是采样频率的 0.2%,因此您必须放大感兴趣的区域。另一个需要注意的是,如果信号具有非零均值,则会有一个对应于频率为零的峰值。