Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 两个信号的互相关_Matlab_Signals_Correlation - Fatal编程技术网

Matlab 两个信号的互相关

Matlab 两个信号的互相关,matlab,signals,correlation,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和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位。为什么呢?有人能给我解释一下吗?

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


(来源:)

s
h
是两个信号。因此,我们对第二个信号的版本进行移位
h
,并将每个元素的乘积相加。互相关图的横轴表示移位,而纵轴表示每个移位处的互相关输出。让我们手工计算信号的互相关,以便更好地理解MATLAB提供的输出

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

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

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

第二个信号从左向右滑动,我们从
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
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]
本例中的
**
是(我的版本)互相关运算符。让我们看看
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 ** h = (0)(1) + (0)(1) + (0)(1) + (0)(1) + (1)(1) + (0)(1) + (0)(1) + (0)(1) + (0)(1) 
       = 1
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
,这也对应于我们上面计算的最后一次移位



希望这有帮助

你提到零填充。所以N1+N2-1=9。这意味着s=[1 1 1 0 0 0 0 0 0]和h=[1 1 1 1 0 0 0 0 0 0 0 0]。在一个位置进行换档。所以shift=1应该是s=[01110000]和h=[11110000]?@Clive-自从你上次检查以来,我已经修改了我的帖子。我的零填充语句不太正确。我更改了它,所以请查看我的编辑。如有必要,请刷新页面。为什么s=[0 0 0 0 1 1 0 0 0 0]表示shift=1?@Clive-您需要将pad向左和向右归零,以允许第二个信号从一端扫描到另一端。它从两个信号之间存在单点重叠的点开始。你继续从左向右扫,直到没有更多的重叠。这实际上是在离散卷积中如何实现的,但互相关是一种特殊情况,所以我应该在一个信号的左右两侧调零pad,而另一个信号的左右两侧调零pad