轉載自 http://blog.163.com/to_be_myself/blog/static/176060227201101762159227/
Matlab中用於計算自相關函數的指令是xcorr.比如矩陣A=[1 2 3];
xcorr(A)=3.0000 8.0000 14.0000 8.0000 3.0000
自相關函數是信號間隔的函數,間隔有正負間隔,所以n個長度的信號,有2n-1個自相關函數值,分別描述的是不同信號間隔的相似程度。
比如,上面的矩陣,最后得到5個結果,其中第三個是自己和自己相乘,最后相加的結果,值最大1*1+2*2+3*3=14。而第二個和第四個分別是間隔正負1的結果也就是1*2+2*3=8,2*1+3*2=8。第1個和第五個分別是間隔正負2,也就是1*3=3,3*1=3。
xcorr求出的結果僅僅是x(n)*x(n+m)並對其求和,並沒有除以前面的N或者是N-|K|。不用這個函數也可以求
for k=0:1:p
t5=0;
for n=0:1:N-k-1
t5=t5+conj(x(n+1))*x(n+1+k);
end
Rxx(k+1)=t5/N;
end
也可以實現,其中N為序列長度此處並未求出全部的自相關序列,只求了間隔從0到p的。
我們令Rx=xcorr(x);
則Rxx(k+1)=Rx(N+k)/N得到。
下面是摘自一篇博文:
1. 首先說說自相關和互相關的概念。
這個是信號分析里的概念,他們分別表示的是兩個時間序列之間和同一個時間序列在任意兩個不同時刻的取值之間的相關程度,即互相關函數是描述隨機信號 x(t),y(t)在任意兩個不同時刻t1,t2的取值之間的相關程度,自相關函數是描述隨機信號x(t)在任意兩個不同時刻t1,t2的取值之間的相關程度。
自相關函數是描述隨機信號X(t)在任意兩個不同時刻t1,t2的取值之間的相關程度;互相關函數給出了在頻域內兩個信號是否相關的一個判斷指標,把兩測點之間信號的互譜與各自的自譜聯系了起來。它能用來確定輸出信號有多大程度來自輸入信號,對修正測量中接入噪聲源而產生的誤差非常有效.
事實上,在圖象處理中,自相關和互相關函數的定義如下:設原函數是f(t),則自相關函數定義為R(u)=f(t)*f(-t),其中*表示卷積;設兩個函數分別是f(t)和g(t),則互相關函數定義為R(u)=f(t)*g(-t),它反映的是兩個函數在不同的相對位置上互相匹配的程度。
那么,如何在matlab中實現這兩個相關並用圖像顯示出來呢?
dt=.1;
t=[0:dt:100];
x=cos(t);
[a,b]=xcorr(x,'unbiased');
plot(b*dt,a)
上面代碼是求自相關函數並作圖,對於互相關函數,稍微修改一下就可以了,即把
[a,b]=xcorr(x,'unbiased');改為[a,b]=xcorr(x,y,'unbiased');便可。
2. 實現過程:
在Matalb中,求解xcorr的過程事實上是利用Fourier變換中的卷積定理進行的,即R(u)=ifft(fft(f)×fft(g)),其中×表示乘法,注:此公式僅表示形式計算,並非實際計算所用的公式。當然也可以直接采用卷積進行計算,但是結果會與xcorr的不同。事實上,兩者既然有定理保證,那么結果一定是相同的,只是沒有用對公式而已。下面是檢驗兩者結果相同的代碼:
dt=.1;
t=[0:dt:100];
x=3*sin(t);
y=cos(3*t);
subplot(3,1,1);
plot(t,x);
subplot(3,1,2);
plot(t,y);
[a,b]=xcorr(x,y);
subplot(3,1,3);
plot(b*dt,a);
yy=cos(3*fliplr(t)); % or use: yy=fliplr(y);
z=conv(x,yy);
pause;
subplot(3,1,3);
plot(b*dt,z,'r');
即在xcorr中不使用scaling。
3. 其他相關問題:
1) 相關程度與相關函數的取值有什么聯系?
相關系數只是一個比率,不是等單位量度,無什么單位名稱,也不是相關的百分數,一般取小數點后兩位來表示。相關系數的正負號只表示相關的方向,絕對值表示相關的程度。因為不是等單位的度量,因而不能說相關系數0.7是0.35兩倍,只能說相關系數為0.7的二列變量相關程度比相關系數為0.35的二列變量相關程度更為密切和更高。也不能說相關系數從0.70到0.80與相關系數從0.30到0.40增加的程度一樣大。
對於相關系數的大小所表示的意義目前在統計學界尚不一致,但通常按下是這樣認為的:
相關系數 相關程度
0.00-±0.30 微相關
±0.30-±0.50 實相關
±0.50-±0.80 顯著相關
±0.80-±1.00 高度相關
matlab計算自相關函數autocorr和xcorr有什么不一樣的?xcorr是沒有將均值減掉做的相關,autocorr則是減掉了均值。