从提供的数据中提取 2 个正弦曲线之间相移的最佳方法

信息处理 fft 阶段
2021-12-23 11:50:12

我一直在问我提取相移(滞后)的方式是否正确,我遇到了一些麻烦。

所以一般来说,给定2个长度相同的数据数组,表示:

  1. 输入正弦波和
  2. 响应,也是一个正弦曲线。

所以不知道产生输入的函数(但知道频率、输入的起始相位、fs 等),找到相位滞后的最佳方法是什么?

  • 我应该通过查看图表并找到每个组件的相位滞后来“手动”执行此操作吗?
  • 我应该像我一直在尝试的那样使用 FFT 吗?

欢迎任何建议,链接,书籍。

4个回答

您可以使用互相关函数来确定两个信号之间的滞后。

关于使用互相关的答案是正确的。但是,如果您的输入和输出信号是正弦信号,您可以使用更简单、更快速的方法。
输入 - 输出 -y1=asin(ωt)
y2=bsin(ωt+ϕ)

  1. 输入和输出相乘:
    y1y2=absin(ωt)sin(ωt+ϕ)=ab1/2(cos(ϕ)cos(2ωt+ϕ))
  2. 消除高频部分。您可以使用一些低通滤波器或具有等于信号周期的时间窗口的平均值(如您所知的频率)。
    <y1y2>=ab1/2cos(ϕ)

  3. 计算信号的幅度并计算cos(ϕ)=<y1y2>2/(ab)

亲 - 你可以连续和“实时”计算相移(时间滞后可能是 ~ 缺点 - 如果你的信号不是正弦曲线,你必须使用常用方法 - 互相关 PS Real算法可以包括很多重要的细节(振幅的稳健计算,当 ~ 0 和...时的稳健计算)2π/ω


ϕ

您的信号的互相关可用于确定相位滞后。互相关基本上包括沿时间轴滑动一个函数,同时保持另一个固定,计算它们在每个时移位置的乘积的积分。当信号“排列”和对应于该位置的时移可以与信号频率一起用于计算相位滞后时,积分将最大()。2πftimeDelay=phaseLag

对我来说最有效的是连续记录两个或多个时期的信号。因此,您将 A 和 B 记录为信号的向量。然后通过以下方式计算相位:

phi = acos( dot(A,B) / (norm(A)*norm(B)) )

这种方法适用于相同频率的正弦信号。当各种频率成分混合在信号中时会出现问题。