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

时间:2018-10-21 10:47:15

标签: c algorithm signals microcontroller sine

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

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

1 个答案:

答案 0 :(得分:0)

  1. 粗略估计

    只需找到2个x(时间)位置,其中y(振幅)相同,斜率也沿相同方向(上升/下降)。他们的距离T是句点。

    period

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

    现在振幅仅为A = (max(value)-min(value))/2

    您还可以估计初始相位t0,即数据穿过偏移值和偏移量y0 = 0.5*(max(value)+min(value))的x位置,请注意y0可能不只是零...

    所以您的sinwave像这样完成:

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

    如果您需要更高的精度,则只需在您的点上插入一个sinwave。既然您已经获得了最初的估算,那么这并不比盲目的慢。这里是一个例子: