You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为非简谐时序速度数据拟合合适的波函数?

拟合非单一正弦/余弦的速度数据问题

我有一组随时间采样的速度数据,该数据并非简单的正弦或余弦波,尝试用单一余弦函数拟合时完全失效,希望找到能描述它的方程/函数,且我的信号处理知识有限。

降采样后的示例数据

import numpy as np

xdata = np.array([11.79, 11.87, 11.95, 12.03, 12.11, 12.19, 12.27, 12.35, 12.43,
       12.51, 12.59, 12.67, 12.75, 12.83, 12.91, 12.99, 13.07, 13.15,
       13.23, 13.31, 13.39, 13.47, 13.55, 13.63, 13.71, 13.79, 13.87,
       13.95, 14.03, 14.11, 14.19, 14.27, 14.35, 14.43, 14.51, 14.59,
       14.67, 14.75, 14.83, 14.91, 14.99, 15.07, 15.15, 15.23, 15.31,
       15.39, 15.47, 15.55, 15.63, 15.71, 15.79, 15.87, 15.95, 16.03,
       16.11, 16.19, 16.27, 16.35, 16.43, 16.51, 16.59, 16.67, 16.75,
       16.83, 16.91, 16.99, 17.07, 17.15, 17.23, 17.31, 17.39, 17.47,
       17.55, 17.63, 17.71, 17.79, 17.87, 17.95, 18.03, 18.11, 18.19,
       18.27, 18.35, 18.43, 18.51, 18.59, 18.67, 18.75, 18.83, 18.91,
       18.99, 19.07, 19.15, 19.23, 19.31, 19.39, 19.47, 19.55, 19.63,
       19.71, 19.79, 19.87, 19.95])

ydata = np.array([ 1.86470801e-05, -3.05185889e-03, -4.53502752e-03, -5.01501449e-03,
       -7.61753339e-03, -7.89916120e-03, -8.45710261e-03, -7.64640792e-03,
       -7.28613761e-03, -6.07402134e-03, -4.21708665e-03, -2.53126644e-03,
       -1.38970318e-03,  1.59394526e-05,  1.91879565e-03,  3.10854836e-03,
        3.37327421e-03,  4.56715556e-03,  5.59283055e-03,  7.38842610e-03,
        7.62706763e-03,  9.14228858e-03,  1.24410442e-02,  1.47384372e-02,
        1.50136837e-02,  1.14957746e-02,  9.03580024e-03,  7.04710182e-03,
        6.94429062e-03,  6.57961389e-03,  5.25393124e-03,  4.75389627e-03,
        2.49195903e-03,  2.41027520e-03,  1.67260849e-03,  5.02479585e-04,
        2.35275116e-04, -1.91204237e-03, -1.38367516e-03, -1.02639516e-03,
        2.78570931e-04, -4.42114657e-04,  2.86560704e-04,  5.69435589e-04,
       -2.94260316e-04,  6.68917718e-05, -1.61045579e-03, -2.32730345e-03,
       -2.55154534e-03, -4.01547893e-03, -4.72977248e-03, -5.12847064e-03,
       -7.10974182e-03, -6.99822300e-03, -8.07665704e-03, -8.84851229e-03,
       -9.09903075e-03, -1.03180810e-02, -1.14544281e-02, -1.21251714e-02,
       -1.30148026e-02, -1.29700705e-02, -1.25293732e-02, -1.12340153e-02,
       -1.05980279e-02, -8.51107110e-03, -6.05923880e-03, -4.50314785e-03,
       -3.11505449e-03, -1.61344075e-03, -1.90893378e-04,  8.53961182e-04,
        2.53364048e-03,  3.00061370e-03,  4.13971717e-03,  5.83572401e-03,
        7.97330030e-03,  9.11719022e-03,  1.07586221e-02,  1.20721136e-02,
        1.24900520e-02,  1.07001078e-02,  9.77437191e-03,  8.30650537e-03,
        6.17321981e-03,  4.27379777e-03,  3.53587465e-03,  2.37557043e-03,
        1.66114222e-03,  6.83006538e-04, -6.38602576e-04, -1.54135169e-03,
       -9.86915409e-04, -1.58287464e-03, -2.02820728e-03, -1.53065658e-03,
       -8.52157455e-04,  1.62949595e-03,  8.56897304e-04,  1.20745000e-03,
       -1.06239388e-03, -2.39230381e-03, -2.39669751e-03])

失效的单一余弦拟合方法

我的其他规律数据通常用scipy.optimize.curve_fit拟合正弦/余弦函数,但该方法在当前数据上完全失效,示例代码如下:

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

def cos_func(x, D, E):
    y = D*np.cos(E*x)
    return y

guess = [0.01, 4]
parameters, covariance = curve_fit(cos_func, xdata, ydata, p0=guess)
print(parameters)

fit_D = parameters[0]
fit_E = parameters[1]

fit_cosine = cos_func(xdata, fit_D, fit_E)

plt.plot(xdata, ydata, 'o', label='data')
plt.plot(xdata, fit_cosine, '-', label='fit')
plt.legend()
plt.show()

疑问

我应该使用哪种函数或波形来拟合这些数据?我推测需要某种具有不同振幅的正弦/余弦复合波,但不知道如何在使用scipy优化参数前自动确定正确的方程。


内容的提问来源于stack exchange,提问作者jpmorr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:44:55