如何计算频域中两个信号之间的延迟?

信息处理 傅里叶变换 互相关 频域 延迟
2022-02-23 18:16:56

计算两个信号之间的延迟通常是通过在两个信号的互相关中找到最大值(在时域中): 通过一个信号的傅里叶变换与另一个信号的傅里叶变换的复共轭的逐点乘法,可以在频域中轻松计算互相关: f(t) \star g(t ) = f^*(-t)*g(t)=\mathcal{F}\{F\}^*\cdot \mathcal{F}\{G\}

τdelay=argmaxt(f(t)g(t))
f(t)g(t)=f(t)g(t)=F{F}F{G}

现在我想知道如何计算频域中的互相关峰值,因此不需要逆变换。我可以想象两个简单的案例:

  • 两个正弦信号的情况似乎微不足道,因为(最小)延迟随后与相应频率的傅立叶分量(此逐点乘法)的相位(除以角频率)一致。

  • 这可以推广到具有固定延迟的两个相同信号,因为对于所有傅立叶分量,(展开的)相位响应等于角频率乘以延迟。为避免歧义,我们假设延迟小于所考虑的最高频率周期的一半。

但是,当两个信号不完全相同时,我认为应该对相位响应采取某种“加权和/积分”,其中加权因子与相应频率的相对贡献成比例,即与相应的傅立叶分量。但是,我无法严格找到确切的公式。

一些可能导致解决方案的“内部头脑风暴”:如果我们将两个函数 ( f ) 中的一个视为“基础”函数,并将另一个信号 ( g ) 投影到该函数上,则该投影的结果(内积) 应该包含我们正在寻找的延迟。我想这只有在“基础”首先被构造为f的分析表示时才有可能,这样就可以考虑相位差。我也认为这个内积应该在傅里叶变换后保持不变。

1个回答

计算两个信号之间的延迟并不像您描述的那么简单,也不能轻易概括。

  • 两个正弦信号的情况似乎微不足道,因为延迟随后与相应频率的傅立叶分量(此逐点乘法)的相位(除以角频率)一致。

这在一般情况下是不正确的。由于信号的周期性,从单个正弦分量计算延迟本质上是不明确的。对于单相,有无限多个有效延迟ϕτ

τ=2πn+ϕ2πf,nZ

  • 这可以推广到具有固定延迟的两个相同信号,因为对于所有傅立叶分量,相位响应等于角频率乘以延迟。

这也不是真的。如上所述,对于所有傅立叶分量,相位响应加上 2π 的倍数等于角频率乘以延迟。更糟糕的是,在一般情况下,这是每个傅立叶分量的不同倍数。

如果信号不完全相同,您希望找到满足所有傅立叶分量或至少大多数傅立叶分量的延迟τ

逆傅立叶变换以蛮力的方式解决了这个问题。对于每个候选延迟,它计算测量的相位响应与它的一致性有多强。只需选择最大值,您就完成了。对于一般情况,没有更好的算法,因为这个问题本质上是模棱两可的,许多(甚至所有)解决方案可能同样强。显然,没有一种方法可以直接计算出这样一个问题解。

如果您想以比一个样本更高的精度计算延迟,情况会发生变化。您可以在计算傅立叶逆变换之前对相位响应进行零填充,但这在计算上效率低下。更好的方法是首先使用未填充的傅立叶逆变换计算粗解,然后使用牛顿算法对其进行细化。牛顿算法在这里非常好,因为

  • 它从不需要计算相位响应的延迟(这将是模棱两可的)。您可以计算给定相位响应和候选延迟的一致性分数。

  • 如果您只想优化全局最大值,那么收敛到局部最大值是非常好的。

没有非暴力算法可以找到任意函数的全局最大值。您正在尝试找到互相关函数的全局最大值,因此除非您可以保证信号的某些属性(例如凸性等)或者您对局部最大值感到满意,否则将无法绕过逆傅里叶变换。