【问题标题】:retrieve a phase from a noisy 1d periodic signal从嘈杂的一维周期信号中检索相位
【发布时间】:2014-12-28 21:57:25
【问题描述】:

我在给定的网格上有一个周期性信号,比如说:

t = 1:30;
omega = 2*pi/18.431;
phi = -pi+2*pi*rand(1);   % a random phase [-pi,pi]
x = sin(omega*t+phi);     % the signal
x = x+0.5*rand(1,length(x)); % add some noise

现在我想检索相位phi。有几种方法可以解决这个问题,例如,将其与sin 匹配,但如果我需要执行 1e6 次(除非有办法并行化它?),这将花费太长时间。另一种是使用fft。问题是我的网格不足以准确选择该频率,因此与之相关的相位(我无法改变)。我怎样才能通过其他方式获得那个阶段? (以及如何估计该相位检索中的误差?我希望轨迹噪声太大而无法很好地估计,我想知道这种情况下的相位误差)

【问题讨论】:

  • 这是假设您事先知道频率吗?
  • 是的,我提前知道频率,但是和网格不相称,某种意义上的欠采样……

标签: matlab signal-processing phase


【解决方案1】:

FT 只是您的信号与余弦波和正弦波的相关性,结果为您提供相位和幅度。无需对整个信号进行 FT,只需计算您感兴趣频率处的系数即可。

至于准确度 - 您的信号越长,您的检测频率与相邻频率的“区别”就越多,因此我不确定如果没有更长的样本长度,您可以使用这种方法获得更高的准确度。

编辑:

手头没有Matlab,所以打算用Python来做(我试着让它看起来像Matlab):

from numpy import arange, pi, cos, dot, exp, angle
from numpy.random import rand

N = 1  # Number of cycles
t = arange(30 * N) + 1  # [1, 2 ... 30 * N]
omega = 2 * pi / 18.431
phi = -pi + 2 * pi * rand(1)[0]
x = cos(omega * t + phi)
x = x + 0.5 * rand(len(x))

coeff = dot(x, exp(-1j * omega * t))
phase = angle(coeff)

print "Actual phase:", phi
print "Calculated phase:", phase

即使对于单个周期,这也会产生相当好的结果。有时计算的相位是2*pi out,这并不意味着它给出了错误的答案,但在后续计算中需要牢记。

增加循环次数N 会产生始终如一的良好结果,但这显然会增加计算时间,因此您可能想尝试一下并找到速度与准确性之间的折衷方案(取决于您的应用程序)。

希望这会有所帮助!

【讨论】:

  • 你能给我举个例子吗?
  • 感谢编辑,我想我可以学习如何计算傅立叶系数,但不确定这是一种可行的技术(对于 1e6 迹线)。你能告诉我如何有效地计算matlab中的积分吗? (matlab 中的 angle 和你写的 phase 一样)
  • 我会使用atan2 而不是atan,这样您就可以得到完整的零到2*pi 的相位角。所以,你会这样做:phi = atan2(imag(coeff),real(coeff));
  • 我有一段时间没有使用 Matlab,所以最好将示例视为伪代码 :-)
  • 感谢编辑,我已经尝试过了,但没有达成协议,fs=1/(dt*N) 不应该与 dt=t(2)-t(1) 和 N 网格中的点数相同吗?还有 @987654331 @ 应该是[1:length(t)]? (因为x 的长度为t 并且在matlab 中你以1 作为第一个索引开始?(也许它的 [0:length(t)-1] ?)你能添加一个例子来说明这个确实是答案?
【解决方案2】:

您可以尝试搜索局部最小值/最大值以获得相位和频率。

编辑

如果您知道频率,则可以对信号进行归一化,乘以 cos 并进行积分一次,然后再与 sin 进行积分。如果信号显示为

,这会直接让您获得 A 和 B
A*sin(x) +B*cos(x) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 2011-12-12
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多