看了MATLAB關於xcorr的help文檔沒搞清楚什么意思,只夠看到一篇不錯的文章,通過簡單事例即可了解其應用。
輸入的是一個簡單一維序列x=[1,2,3]
第一:缺省注釋項,[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、當b(1)=-2時,計算a(1)時只用到一組數據——(3,1)注意順序,只有這兩個數據的序號相減(后面數據的序號減去前面的)滿足b=-2,因此a(1)的計算公式為:3*1=3
2、當b(2)=-1時,計算a(2)時用到兩組數據——(2,1)和(3,2),這兩組數據的序號相減(后面數據的序號減去前面的)滿足b=-1,因此a(2)的計算公式為:2*1+3*2=8
3、當b(3)=0時,計算a(3)時用到三組數據——(1,1)、(2,2)、(3,3),這三組數據的序號相減(后面數據的序號減去前面的)滿足b=0,因此a(3)的計算公式為:1*1+2*2+3*3=14
4、當b(4)=1時,計算a(4)時用到兩組數據——(1,2)和(2,3),(讀者請對比和情況2的區別),這兩組數據的序號相減(后面數據的序號減去前面的)滿足b=1,因此a(4)的計算公式為:1*2+2*3=8
5、當b(5)=2時,計算a(4)時用到一組數據——(1,3),(讀者請對比和情況1的區別),這兩組數據的序號相減(后面數據的序號減去前面的)滿足b=2,因此a(4)的計算公式為:1*3=3
第二:注釋項為‘unbiased’,[a,b]=xcorr(x,‘unbiased’),通過該命令計算的結果為:a=3 4 4.6667 4 3;b=-2 -1 0 1 2.下面介紹計算機如何計算該過程,b的計算在四種注釋項的情況下是相同的,就不再講述了。a的計算仍是和b的每一項相對應的。
1、當b(1)=-2時,計算a(1)時只用到一組數據(記N=1)——(3,1)注意順序,只有這兩個數據的序號相減(后面數據的序號減去前面的)滿足b=-2,因此a(1)的計算公式為:(3*1)/1=3
2、當b(2)=-1時,計算a(2)時用到兩組數據(記N=2)——(2,1)和(3,2),這兩組數據的序號相減(后面數據的序號減去前面的)滿足b=-1,因此a(2)的計算公式為:(2*1+3*2)/2=4
3、當b(3)=0時,計算a(3)時用到三組數據(記N=3)——(1,1)、(2,2)、(3,3),這三組數據的序號相減(后面數據的序號減去前面的)滿足b=0,因此a(3)的計算公式為:(1*1+2*2+3*3)/3=4.6667
4、當b(4)=1時,計算a(4)時用到兩組數據(記N=2)——(1,2)和(2,3),(讀者請對比和情況2的區別),這兩組數據的序號相減(后面數據的序號減去前面的)滿足b=1,因此a(4)的計算公式為:(1*2+2*3)/2=4
5、當b(5)=2時,計算a(4)時用到一組數據(記N=1)——(1,3),(讀者請對比和情況1的區別),這兩組數據的序號相減(后面數據的序號減去前面的)滿足b=2,因此a(4)的計算公式為:(1*3)/1=3
第三:注釋項為‘biased’,[a,b]=xcorr(x,‘biased’),通過該命令計算的結果為:a= 1.0000 2.6667 4.6667 2.6667 1.0000,b=-2 -1 0 1 2。下面介紹計算機如何計算該過程,注意到本次計算用到的序列x的長度為3,記為M=3。
1、當b(1)=-2時,計算a(1)時只用到一組數據——(3,1)注意順序,只有這兩個數據的序號相減(后面數據的序號減去前面的)滿足b=-2,因此a(1)的計算公式為:(3*1)/M=1
2、當b(2)=-1時,計算a(2)時用到兩組數據——(2,1)和(3,2),這兩組數據的序號相減(后面數據的序號減去前面的)滿足b=-1,因此a(2)的計算公式為:(2*1+3*2)/M=2.6667
3、當b(3)=0時,計算a(3)時用到三組數據——(1,1)、(2,2)、(3,3),這三組數據的序號相減(后面數據的序號減去前面的)滿足b=0,因此a(3)的計算公式為:(1*1+2*2+3*3)/M=4.6667
4、當b(4)=1時,計算a(4)時用到兩組數據——(1,2)和(2,3),(讀者請對比和情況2的區別),這兩組數據的序號相減(后面數據的序號減去前面的)滿足b=1,因此a(4)的計算公式為:(1*2+2*3)/M=2.6667
5、當b(5)=2時,計算a(4)時用到一組數據——(1,3),(讀者請對比和情況1的區別),這兩組數據的序號相減(后面數據的序號減去前面的)滿足b=2,因此a(4)的計算公式為:(1*3)/M=1
第四:注釋項為‘coeff’,[a,b]=xcorr(x,‘coeff’),通過該命令計算的結果為:a= 0.2143 0.5714 1.0000 0.5714 0.2143,b=-2 -1 0 1 2,下面介紹計算機如何計算該過程,這種情況實際是將第三種情況下得到的結果進行歸一化,使得b=0時對應的值為1,a(1)=1/4.6667=0.2143;a(2)=2.6667/4.6667=0.5714,a(3)=4.6667/4.6667=1,a(4)=2.6667/4.6667=0.5714,a(5)=1/4.6667=0.2143
另:xcorr命令在工程上的應用通常是對時間上的采樣數據序列x進行處理,當數據點采完之后交給Matlab處理時,Matlab是不知道你的采樣時間間隔的,它僅僅根據上文所述的計算過程對輸入的數據序列x進行計算,但我們可以自己定義時間間隔,例如dt=0.01,此時t=dt*b即代表相關性計算中的時間延遲,前半部分是超前,后半部分是滯后,若R=xcorr(x,‘unbiased’),則通過命令:plot(t,R)即可得到該時域信號的自相關函數曲線。