解释互相关结果

信息处理 matlab 离散信号 采样 互相关 延迟
2022-01-30 08:38:12

我是这个论坛的新手。我只是想了解如何使用互相关函数计算两个信号之间的延迟(以样本为单位)。为了理解这一点,我编写了一个小的 Matlab 代码。但我发现很难理解结果。

 clc;

 fm = 1000; //message signal
 fs = 10 * fm; //sampling frequency
 ts = 1 /fs;
 t = 0:ts:1-ts;

 x=sin(2*pi*fm*t);
 y=cos(2*pi*fm*t);

 [r,s] = xcorr(x,y);

 subplot(2,1,1);
 plot(r);
 subplot(2,1,2);
 plot(s);

使用此代码获得的结果如下。

在此处输入图像描述

从图中,我们可以观察到峰值出现在大约 10,000 个样本处。那么,可以将 10,000 个样本视为两个信号之间的延迟(以样本为单位)吗?在这种情况下,相应的时间延迟是否为 10000 * 1/10000 = 1 秒?

1个回答

是和不是。原则上,您可以使用相关函数的峰值。但是,它不在 10000 处。相关函数在 0 附近对称,因此您的峰值实际上比您想象的更接近于零。这就是 xcorr 返回两个参数的原因之一,一个用于计算函数的滞后。因此,绘制相关函数的正确方法是 a plot(s,r)

其次,您应该尝试放大一点。由于您的时间信号有 10000 个样本,因此您的 acf 有 ~20000,因此很难看到确切的最大值。如果您放大,您会注意到它不完全为零,而是右侧的两个样本。

为什么要两个样本?因为每个周期有 10 个样本,正弦和余弦之间的偏移是四分之一周期,所以实际上是 2.5 个样本。您注意到了问题,使用您选择的采样,精确测量延迟有点困难。

尝试将 fm 减小到一个较小的值,例如 10,这会使相关函数更易于解释。这是一个例子:

示例 fm=10

在此示例中,最大值出现在样本 247 处,相当于 247*ts = 24.7 毫秒。

如果您想知道三角形的形状,这与以下事实有关:在滞后 0(中间)时,我们可以“比较”两个信号的整体,而对于较大的滞后,我们需要将两个信号截断为更短版本。滞后越大,我们必须关联的样本就越少。出于这个原因,我们通常检查 ACF 接近零滞后。