自相關與互相關在matlab中實現


     之前要做一個圖像匹配的灰度投影算法,要用到互相關函數,matlab真是好啊,一個函數搞掂,只要弄清楚參數意義就可以了,先轉載在網上搜到的吧

**************************************************************************

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  高度相關

(2)matlab計算自相關函數autocorr和xcorr有什么不一樣的?

    分別用這兩個函數對同一個序列計算,為什么結果不太一樣?因為xcorr是沒有將均值減掉做的相關,autocorr則是減掉了均值的。而且,用離散信號做自相關時,信號截取長度(采樣點N)不一樣,自相關函數就不一樣。 (3)xcorr是計算互相關函數,帶有一個option的參數:
a=xcorr(x,y,'option')
option=baised時,是計算互相關函數的有偏估計;
option=unbaised時,是計算互相關函數的無偏估計;
option=coeff時,是計算歸一化的互相關函數,即為互相關系數,在-1至1之間;
option=none,是缺省的情況。
所以想要計算互相關系數,可用'coeff'參數。
************************************************************************* 用這個xcorr函數作離散互相關運算時要注意,當x, y是不等長向量時,短的向量會自動填0與長的對齊,運算結果是行向量還是列向量就與x一樣。 互相關運算計算的是x,y兩組隨機數據的相關程度,使用參數coeff時,結果就是互相關系數,在-1至1之間,否則結果不一定在這范圍,有可能很大也有可能很小,這視乎x, y數據的大小,所以一般要計算兩組數據的相關程度,一般選擇coeff參數,對結果進行歸一化。 所謂歸一化簡單理解就是將數據系列縮放到-1到1范圍,正式的就是一種簡化計算的方式,即將有量綱的表達式,經過變換,化為無量綱的表達式,成為純量。變換式為X=(X實測--Xmin)/(Xmax-Xmin)。 一般來說選擇歸一化進行互相關運算后,得到結果絕對值越大,兩組數據相關程度就越高。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com