两个信号的互相关

时间:2014-11-20 04:05:06

标签: matlab signals correlation

我想找到两个信号x1和x2之间的相关性。

x1 = [1 1 1 1 1]
x2 = [1 1 1 1 1]
r1 = xcorr(x1,x2) //function in matlab to find cross correlation of x1 and x2

x1和x2都是这样的     x1 or x2

他们的互相关看起来像这样     r1

我理解相关性测量两个信号之间的相似程度,给出对应于最大相似度的点的最高值(两个信号相对于彼此移位以测量不同点处的相似性对吗?)。因此,在这种情况下,互相关应该在所有点都给出高值,但事实并非如此。最大值位于第5位。这是为什么?有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:8)

您似乎对互相关的工作原理有轻微的误解。互相关需要一个信号,并将其与另一个信号的移位版本进行比较。如果你还记得,两个信号的(非标准化)互相关定义为:

http://www-rohan.sdsu.edu/~jiracek/DAGSAW/images/eq4_6_7.gif

sh是两个信号。因此,我们移动第二个信号h的版本并逐个元素产品并将它们加在一起。互相关图的横轴表示 shift ,而纵轴表示每次移位时的互相关的输出。让我们手动计算信号的互相关性,这样我们就可以更好地理解MATLAB给出的输出。

要计算输出,两个信号都需要进行零填充,以便在两个信号开始重叠时适应第一个点。具体来说,我们需要进行零填充,以便我们在N2-1左侧s个零,N2-1右侧有s个零,以便于我们计算互相关。在这种情况下,N2h的长度。对于每次计算信号h移位时的互相关,您将创建一个全零的信号,其大小与零填充版s相同,然后放置原始信号在这个较大的信号中发出信号h。您可以使用此新信号与零填充版本s进行比较。

实际上,互相关的属性是它的可交换性。如果你有一个更长的信号和一个更短的信号,你可以更容易地保持长信号静止,而你移动较短的信号。请记住,无论你选择哪一个班次,你都会得到相同的结果,但你应该总是选择更容易的路径!

回到原来的位置,这就是互相关的第一个值(shift = 1)。

s = [0 0 0 0 1 1 1 1 1 0 0 0 0]
h = [1 1 1 1 1 0 0 0 0 0 0 0 0]

第二个信号从左向右滑动,我们从h的右端开始与第一个信号重叠开始,即s。我们在sh之间进行逐点乘法,我们总结了这些元素。在这种情况下,我们得到:

s ** h = (0)(1) + (0)(1) + (0)(1) + (0)(1) + (1)(1) + (0)(1) + (0)(1) + (0)(1) + (0)(1) 
       = 1

在这种情况下,**是(我的版本)互相关运算符。我们来看看shift = 2

s = [0 0 0 0 1 1 1 1 1 0 0 0 0]
h = [0 1 1 1 1 1 0 0 0 0 0 0 0]

请记住,我们向右移动1,s保持不变。进行与上述相同的计算,我们应该得到:

s ** h = (0)(1) + (0)(1) + (0)(1) + (0)(1) + (1)(1) + (1)(1) + (0)(1) + (0)(1) + (0)(1) 
       = 2

如果你对其他班次重复这一点,你会发现值一直增加1,直到我们有完全重叠,这是第五班(shift = 5)。在这种情况下,我们得到:

s = [0 0 0 0 1 1 1 1 1 0 0 0 0]
h = [0 0 0 0 1 1 1 1 1 0 0 0 0]

当你计算互相关时,我们得到5.现在,当我们计算第六个移位(shift = 6)时,我们向右移动1,当交叉相关时,我们向右移动开始下降。具体做法是:

s = [0 0 0 0 1 1 1 1 1 0 0 0 0]
h = [0 0 0 0 0 1 1 1 1 1 0 0 0]

如果你继续计算互相关,你会发现结果是4.你继续向右移动,你会发现价值每次减少1我们采取。你到达最后一点,只有一点sh重叠,在这里:

s = [0 0 0 0 1 1 1 1 1 0 0 0 0]
h = [0 0 0 0 0 0 0 0 1 1 1 1 1]

通过计算互相关,我们只得到值1.您还会看到它在shift = 9。因此,这解释了互相关开始增加的图表,因为存在越来越多的重叠。然后它达到shift = 5处的最大值,因为两个信号完全重叠。然后互相关开始减少,因为重叠量也开始减少。

您还会注意到我们需要计算的班次总数为N1 + N2 - 1,这是互相关的属性。 N1N2分别是sh的长度。因此,鉴于N1 = N2 = 5,我们发现轮班总数为N1 + N2 - 1 = 9,这也与我们上面计算的最后一班相对应。


希望这有帮助!