使用列表中的数据拟合Python中的正弦波

时间:2014-12-11 06:56:27

标签: python numpy curve-fitting

我有一个大约100个数字的列表。我知道数据合理地适合某些正弦函数。我想创造某种曲线。理想情况下,我想提取幅度,相位和频率。有什么建议或想法吗?

例如: inputList = [x1,...,x100]

我试图找出一些能够做到这一点的功能

def fitCurve(inputList): A = amplitude(inputList) #calculate frequency #calculate phase

def amplitude(data):
    return (max(data) - min(data))/2

def frequency(data):
    #my first intuition is to find the first peak, but I'm not sure how to find the second one

def phase(data):
   #not sure what to do here at all...

1 个答案:

答案 0 :(得分:1)

我不会给你代码,但这可能是我想要的。成功在很大程度上取决于您的数据有多好。 最后一步,要获得幅度,频率和相位的最终值,您可以使用一些优化框架。只是这通常需要一个非常好的初始解决方案。 但是,如果我们假设数据生成为x(t) = A*sin(2*pi*f*t + phi) + w(t),其中w(t)是加法,零均值,噪声,则以下内容可以起作用:

  1. 使用DFT通过在信号的振幅谱中找到峰值来估算频率。
  2. 通过查看最大/最小信号值来估算振幅。可能需要一些预过滤(简单的低通?)来获得一个好的估计。
  3. 使用优化来查找相位并微调幅度和频率。