如何从 20 个样本中找到正弦波的幅度和频率?

How to find amplitude and frequency of sine wave from 20 samples?

我有这些参数的信号:1kHz 频率,1Vpp。 我试图找到最佳算法来计算 20 个样本的信号幅度和频率。我将尝试用 C 语言(在我的微控制器上)实现这个算法。 我估计采样频率为 2.5kHz 采样正弦波的图片:

有人有想法吗? 感谢您的帮助!

  1. 粗略估计

    只需找到 2 个 x(时间)位置,其中 y(振幅)相同且斜率也处于相同方向(rise/decline)。他们的距离T就是周期

    您可以通过将数据处理为折线(线性或更高插值)来提高精度。

    现在振幅刚好A = (max(value)-min(value))/2.

    您还可以估计初始阶段 t0 这是数据交叉偏移值和偏移量的 x 位置 y0 = 0.5*(max(value)+min(value)) 当心 y0 可能不只是零...

    所以你的 sinwave 是这样完成的:

    y(t) = y0 + 0.5*A*sin((t-t0)*2.0*M_PI/T)
    
  2. 精度

    如果您需要更高的精度,那么只需通过您的点拟合正弦波即可。由于您已经有了初步估计,因此这并不像盲目安装那么慢。举个例子:

    • Trying to fit a sine function to phased light curve