xcorr()详解
用過Matlab的人都知道,Matlab的命令總是能一石三鳥,通過改變輸入參數的注釋項即可實現不同功能,如今xcorr命令的難點就在于其有四個注釋項,這些注釋項使得計算的結果各有不同,本文將詳細介紹對應每個注釋項Matlab是如何計算的,當然本文考慮輸入的是一個簡單一維序列x=[1,2,3],序列中數據對應的序號依次為1,2,3(請讀者在閱讀下文時,不要把序號和數據值弄混,這里只是個特例),其他情況讀者可以輕松擴展得到。首先確定一下,該序列的均值為2,方差值為0.6667.這個應該不用說怎么算的吧。然后讀者需要了解的是該命令意在計算序列中間隔不同距離的數據之間的關系。
第一:缺省注釋項,[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)即可得到該時域信號的自相關函數曲線。
分享:總結
- 上一篇: 如何在CSDN博客中编辑公式?
- 下一篇: 功率谱密度相关方法MATLAB实现