我想找到两个信号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都是这样的
他们的互相关看起来像这样
我理解相关性测量两个信号之间的相似程度,给出对应于最大相似度的点的最高值(两个信号相对于彼此移位以测量不同点处的相似性对吗?)。因此,在这种情况下,互相关应该在所有点都给出高值,但事实并非如此。最大值位于第5位。这是为什么?有人可以向我解释一下吗?
答案 0 :(得分:8)
您似乎对互相关的工作原理有轻微的误解。互相关需要一个信号,并将其与另一个信号的移位版本进行比较。如果你还记得,两个信号的(非标准化)互相关定义为:
http://www-rohan.sdsu.edu/~jiracek/DAGSAW/images/eq4_6_7.gif
s
和h
是两个信号。因此,我们移动第二个信号h
的版本并逐个元素产品并将它们加在一起。互相关图的横轴表示 shift ,而纵轴表示每次移位时的互相关的输出。让我们手动计算信号的互相关性,这样我们就可以更好地理解MATLAB给出的输出。
要计算输出,两个信号都需要进行零填充,以便在两个信号开始重叠时适应第一个点。具体来说,我们需要进行零填充,以便我们在N2-1
左侧s
个零,N2-1
右侧有s
个零,以便于我们计算互相关。在这种情况下,N2
是h
的长度。对于每次计算信号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
。我们在s
和h
之间进行逐点乘法,我们总结了这些元素。在这种情况下,我们得到:
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我们采取。你到达最后一点,只有一点s
和h
重叠,在这里:
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
,这是互相关的属性。 N1
和N2
分别是s
和h
的长度。因此,鉴于N1 = N2 = 5
,我们发现轮班总数为N1 + N2 - 1 = 9
,这也与我们上面计算的最后一班相对应。
希望这有帮助!