正弦波数据曲线拟合中y轴偏移的问题

问题描述 投票:0回答:1

我正在研究使用正弦波数据的曲线拟合优化问题。我有大约 16 个几乎相同的正弦波数据周期,但我遇到了 y 轴偏移问题。偏移量总是略有偏差,我不确定是什么导致了这种差异。

以下是我的数据和方法的简要描述:

  • 数据:16周期正弦波数据
  • 问题:y 轴偏移始终不正确
  • 目标:准确拟合正弦波数据并修正 y 轴偏移

如果您能就可能导致此问题的原因以及如何解决该问题提供任何见解或建议,我将不胜感激。谢谢!

from scipy.optimize import curve_fit 
def sine_wave(t, A, phi_beta, phi_alpha, C):
   return A * np.sin(2 * np.pi * primary_frequency * t + phi_beta*t +phi_alpha) + C

initial_guess = [np.ptp(CH2) / 2, 800, 200, np.mean(CH2)]
params, _ = curve_fit(sine_wave, time, CH2, p0=initial_guess, maxfev=10000)

A, phi_beta,phi_alpha, C = params
fitted_CH2_with_primary_freq = sine_wave(time, average_amplitude, phi_beta, phi_alpha, C)

输出如下: enter image description here

python scipy curve-fitting scipy-optimize
1个回答
0
投票

如果没有手头的数据,我将不得不进行一些推测,但根据经验,我猜测您遇到以下问题之一

1.不合适的模型

我认为这是最有可能的。这意味着您的数据不是正弦波,这实际上是最合适的。您是否有任何理论表明您的数据应该遵循正弦波? (并不是所有的周期函数都是正弦波。我见过很多本科生都犯过这样的错误。)

2.局部最小值

Scipy

curve_fit
使用
scipy.optimize.minimize
函数,这是一个局部最小化器。如果您的 X² 在参数空间中是非凸的,您可能会陷入局部最小值。您可以尝试单独衡量您的系统偏差并将其设置为约束。 (或者只需将 C 替换为您测量的数字)计算两者的减少卡方并选择更好的选择。或者,您可以定义自己的损失函数并运行全局搜索算法,例如
scipy.optimize.dual_annealing()
。 (我已在我的 fitting_toolkit 存储库中实现了此分布拟合)

3.不稳定的损失函数

我不认为这是问题所在。我从来没有遇到过正弦波的这个问题,但是为了完整性我会添加它。

scipy.optimize.curvefit

 使用最小二乘拟合,这对于非多项式模型来说非常不稳定。在这种情况下,您可能需要使用另一种优化,例如
最大似然估计

© www.soinside.com 2019 - 2024. All rights reserved.