【问题标题】:Fitting a Sine Wave in Python with Data in a List [closed]用列表中的数据在 Python 中拟合正弦波 [关闭]
【发布时间】:2015-02-09 14:14:36
【问题描述】:

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

例如: 输入列表 = [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...

【问题讨论】:

  • 你能接受我为你写一些代码吗?
  • 非常感谢。
  • @jsh123 请记住,评论可能是个玩笑,如果您想回答问题,则需要提供一些示例数据和代码。
  • 哦...对不起,我是新来的。这个问题很简单,但我遇到了很大的困难。
  • jsh123:这感觉很像家庭作业,没有人会为你做这些。您为什么不实际尝试自己解决问题,然后在您对实施有具体问题时询问我们。

标签: python numpy curve-fitting


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-11-07
    • 2014-01-23
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多