Matlab之xcorr函数的解释

原文链接: https://www.cnblogs.com/yana-running/p/5458794.html

转自:https://www.cnblogs.com/yana-running/p/5458794.html

看了MATLAB关于xcorrhelp文档没搞清楚什么意思,只够看到一篇不错的文章,通过简单事例即可了解其应用。

输入的是一个简单一维序列x=[123]

第一:缺省注释项[a,b]=xcorr(x),通过该命令计算的结果为:a=3 8 14 8 3;b=-2 -1 0 1 2.

下面介绍一下,该过程计算机是如何计算的,首先讲b的计算,设一维序列的长度为N,则序列中任意两个数据序号相减,最小值为1-N,最大值为N-1,且能取遍两者之间的所有整数,将这些数从小到大排列得到的就是b;然后讲a的计算,在缺省注释项的情况下,a的计算是这样的,a的每一项是对应b的每一项的

1、当b1=-2时,计算a1)时只用到一组数据——31)注意顺序,只有这两个数据的序号相减(后面数据的序号减去前面的)满足b=-2,因此a1)的计算公式为:3*1=3

2、当b2=-1时,计算a2)时用到两组数据——21)和(32),这两组数据的序号相减(后面数据的序号减去前面的)满足b=-1,因此a2)的计算公式为:2*1+3*2=8

3、当b3=0时,计算a3)时用到三组数据——11)、(22)、(33),这三组数据的序号相减(后面数据的序号减去前面的)满足b=0,因此a3)的计算公式为:1*1+2*2+3*3=14

4、当b4=1时,计算a4)时用到两组数据——12)和(23),(读者请对比和情况2的区别),这两组数据的序号相减(后面数据的序号减去前面的)满足b=1,因此a4)的计算公式为:1*2+2*3=8

5、当b5=2时,计算a4)时用到一组数据——13),(读者请对比和情况1的区别),这两组数据的序号相减(后面数据的序号减去前面的)满足b=2,因此a4)的计算公式为:1*3=3

第二:注释项为‘unbiased’[ab]=xcorrx‘unbiased’),通过该命令计算的结果为:a=3 4 4.6667 4 3b=-2 -1 0 1 2.下面介绍计算机如何计算该过程,b的计算在四种注释项的情况下是相同的,就不再讲述了。a的计算仍是和b的每一项相对应的。

1、当b1=-2时,计算a1)时只用到一组数据(记N=1——31)注意顺序,只有这两个数据的序号相减(后面数据的序号减去前面的)满足b=-2,因此a1)的计算公式为:(3*1/1=3

2、当b2=-1时,计算a2)时用到两组数据(记N=2——21)和(32),这两组数据的序号相减(后面数据的序号减去前面的)满足b=-1,因此a2)的计算公式为:(2*1+3*2/2=4

3、当b3=0时,计算a3)时用到三组数据(记N=3——11)、(22)、(33),这三组数据的序号相减(后面数据的序号减去前面的)满足b=0,因此a3)的计算公式为:(1*1+2*2+3*3/3=4.6667

4、当b4=1时,计算a4)时用到两组数据(记N=2——12)和(23),(读者请对比和情况2的区别),这两组数据的序号相减(后面数据的序号减去前面的)满足b=1,因此a4)的计算公式为:(1*2+2*3/2=4

5、当b5=2时,计算a4)时用到一组数据(记N=1——13),(读者请对比和情况1的区别),这两组数据的序号相减(后面数据的序号减去前面的)满足b=2,因此a4)的计算公式为:(1*3/1=3

第三:注释项为‘biased’[ab]=xcorrx‘biased’),通过该命令计算的结果为:a= 1.0000   2.6667    4.6667    2.6667    1.0000b=-2 -1 0 1 2。下面介绍计算机如何计算该过程,注意到本次计算用到的序列x的长度为3,记为M=3

1、当b1=-2时,计算a1)时只用到一组数据——31)注意顺序,只有这两个数据的序号相减(后面数据的序号减去前面的)满足b=-2,因此a1)的计算公式为:(3*1/M=1

2、当b2=-1时,计算a2)时用到两组数据——21)和(32),这两组数据的序号相减(后面数据的序号减去前面的)满足b=-1,因此a2)的计算公式为:(2*1+3*2/M=2.6667

3、当b3=0时,计算a3)时用到三组数据——11)、(22)、(33),这三组数据的序号相减(后面数据的序号减去前面的)满足b=0,因此a3)的计算公式为:(1*1+2*2+3*3/M=4.6667

4、当b4=1时,计算a4)时用到两组数据——12)和(23),(读者请对比和情况2的区别),这两组数据的序号相减(后面数据的序号减去前面的)满足b=1,因此a4)的计算公式为:(1*2+2*3/M=2.6667

5、当b5=2时,计算a4)时用到一组数据——13),(读者请对比和情况1的区别),这两组数据的序号相减(后面数据的序号减去前面的)满足b=2,因此a4)的计算公式为:(1*3/M=1

第四:注释项为‘coeff’[ab]=xcorrx‘coeff’),通过该命令计算的结果为:a= 0.2143   0.5714    1.0000    0.5714    0.2143b=-2 -1 0 1 2,下面介绍计算机如何计算该过程,这种情况实际是将第三种情况下得到的结果进行归一化,使得b=0时对应的值为1a1=1/4.6667=0.2143a2=2.6667/4.6667=0.5714a3=4.6667/4.6667=1a4=2.6667/4.6667=0.5714a5=1/4.6667=0.2143

 

另:xcorr命令在工程上的应用通常是对时间上的采样数据序列x进行处理,当数据点采完之后交给Matlab处理时,Matlab是不知道你的采样时间间隔的,它仅仅根据上文所述的计算过程对输入的数据序列x进行计算,但我们可以自己定义时间间隔,例如dt=0.01,此时t=dt*b即代表相关性计算中的时间延迟,前半部分是超前,后半部分是滞后,若R=xcorrx‘unbiased’),则通过命令:plottR)即可得到该时域信号的自相关函数曲线。

 

你可能感兴趣的:(matlab)