Cli*_*ive 3 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
Run Code Online (Sandbox Code Playgroud)
x1和x2都是这样的
他们的互相关看起来像这样
我知道相关性测量两个信号之间的相似程度,给出对应于最大相似性的点的最高值(两个信号相对于彼此移位以测量不同点处的相似性对吗?).因此,在这种情况下,互相关应该在所有点都给出高值,但事实并非如此.最大值位于第5位.这是为什么?谁可以给我解释一下这个?
您似乎对互相关的工作原理有轻微的误解.互相关需要一个信号,并将其与另一个信号的移位版本进行比较.如果你还记得,两个信号的(非标准化)互相关定义为:
http://www-rohan.sdsu.edu/~jiracek/DAGSAW/images/eq4_6_7.gif
s
并且h
是两个信号.因此,我们移动第二个信号的版本h
并逐个元素产品并将它们加在一起.互相关图的横轴表示移位,而纵轴表示每个移位的互相关的输出.让我们手动计算信号的互相关性,这样我们就可以更好地理解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]
Run Code Online (Sandbox Code Playgroud)
第二个信号从左向右滑动,我们从右端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
Run Code Online (Sandbox Code Playgroud)
在**
这种情况下是(我的版本)的互相关操作.我们来看看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]
Run Code Online (Sandbox Code Playgroud)
请记住,我们正在向右移动1并s
保持不变.进行与上述相同的计算,我们应该得到:
s ** h = (0)(1) + (0)(1) + (0)(1) + (0)(1) + (1)(1) + (1)(1) + (0)(1) + (0)(1) + (0)(1)
= 2
Run Code Online (Sandbox Code Playgroud)
如果对其他轮班重复此操作,您将看到值继续增加1,直到我们有完全重叠,这是第五个shift(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]
Run Code Online (Sandbox Code Playgroud)
当你计算互相关时,我们得到5.现在,当我们计算第六个shift(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]
Run Code Online (Sandbox Code Playgroud)
如果你继续计算互相关,你会看到结果是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]
Run Code Online (Sandbox Code Playgroud)
通过计算互相关,我们只得到值1.你也会看到这是在shift = 9
.因此,这解释了互相关开始增加的图表,因为存在越来越多的重叠.然后达到最大值,shift = 5
因为两个信号完全重叠.然后互相关开始减少,因为重叠量也开始减少.
您还会注意到我们需要计算的班次总数N1 + N2 - 1
,这是互相关的属性. N1
和N2
是的长度s
和h
分别.因此,鉴于此N1 = N2 = 5
,我们看到换班总数是N1 + N2 - 1 = 9
,这也对应于我们上面计算的最后一班.
希望这可以帮助!