在工程應(yīng)用時(shí),有時(shí)候需要計(jì)算兩個(gè)信號(hào)序列的相似度,實(shí)際信號(hào)由于在采集過程中會(huì)混入干擾,如果簡單的依次比較各樣本是否相等或者差值,則很難判定兩個(gè)信號(hào)序列的相似程度。本文來聊聊我的一些思路。
什么是互相關(guān)函數(shù)?
在統(tǒng)計(jì)學(xué)中,相關(guān)是描述兩個(gè)隨機(jī)變量序列或二元數(shù)據(jù)之間的統(tǒng)計(jì)關(guān)系,無論是否具有因果關(guān)系。廣義上講,相關(guān)性是統(tǒng)計(jì)上的關(guān)聯(lián)程度,它通常指的是兩個(gè)變量的線性相關(guān)的程度。比如商品的價(jià)格和消費(fèi)者購買愿意數(shù)量之間的關(guān)系,也即所謂的需求曲線。
相關(guān)性是有用的,因?yàn)樗鼈兛梢悦枋鲆环N可在實(shí)踐中加以利用的預(yù)測作用。例如,根據(jù)電力需求和天氣之間的相關(guān)性,電力公司可能會(huì)在天氣涼快時(shí)候生產(chǎn)更少的電力。在這個(gè)例子中,有一定的因果關(guān)系存在,因?yàn)闃O端天氣導(dǎo)致人們使用更多的電力用于取暖或制冷。然而,一般而言,相關(guān)性的存在并不足以推斷出因果關(guān)系的存在,也就是說相關(guān)性并不意味著因果關(guān)系。
什么是相關(guān)系數(shù)?
最熟悉的度量兩個(gè)量之間的相關(guān)性的方法是皮爾遜乘積矩相關(guān)系數(shù)(PPMCC),也稱為“皮爾遜相關(guān)系數(shù)”,通常簡稱為“相關(guān)系數(shù)”。在數(shù)學(xué)上,它被定義為對原始數(shù)據(jù)的最小二乘擬合的質(zhì)量(擬合程度或效果)。它是由數(shù)據(jù)集兩個(gè)變量的協(xié)方差的比率,歸一化到他們的方差的平方根得到的。數(shù)學(xué)上,兩個(gè)變量的協(xié)方差除以標(biāo)準(zhǔn)差的乘積。
皮爾遜積矩相關(guān)系數(shù)試圖通過兩個(gè)隨機(jī)序列的數(shù)據(jù)集建立一條最佳擬合曲線,實(shí)質(zhì)上是通過列出期望和由此產(chǎn)生的皮爾遜相關(guān)系數(shù)表明實(shí)際數(shù)據(jù)集離預(yù)期值有多遠(yuǎn)。根據(jù)皮爾遜相關(guān)系數(shù)的符號(hào),如果數(shù)據(jù)集的變量之間存在某種關(guān)系,可以得到負(fù)相關(guān)或正相關(guān)。其定義公式如下:
相關(guān)系數(shù)有啥用?
皮爾遜相關(guān)系數(shù)的絕對值不大于1是Cauchy–Schwarz不等式的推論(有興趣的可以去找書看看)。因此,相關(guān)系數(shù)的值在[-1,1]之間。在理想的增加線性相關(guān)關(guān)系情況下,相關(guān)系數(shù)為+1;在理想的減少(反相關(guān))線性關(guān)系情況下,相關(guān)系數(shù)為-1;在所有其他取值情況下,表示變量之間的線性相關(guān)程度。當(dāng)它接近零時(shí),更接近于不相關(guān)。系數(shù)越接近-1或1,變量之間的相關(guān)性越強(qiáng)。
故,相關(guān)系數(shù)其值范圍分布在區(qū)間[-1,1]:
1表示完全正相關(guān)
0表示不相關(guān)
-1表示完全負(fù)相關(guān)
為了方便理解,假定兩個(gè)隨機(jī)序列按照下面各類情況分布,下面的數(shù)字為相關(guān)系數(shù):
程序如何實(shí)現(xiàn)呢?
上述公式在實(shí)際編程時(shí),當(dāng)然可以直接按照公式編制代碼,如果仔細(xì)觀察會(huì)發(fā)現(xiàn)該公式可以進(jìn)一步簡化,過程省略:
由這個(gè)公式就很容易編程了,干貨在這里,可以拿去稍加改造即可使用:
#include#include /*返回值在區(qū)間:[-1,1]*/ /*如返回-10,則證明輸入參數(shù)無效*/ #definedelta0.0001f doublecalculate_corss_correlation(double*s1,double*s2,intn) { doublesum_s12=0.0; doublesum_s1=0.0; doublesum_s2=0.0; doublesum_s1s1=0.0;//s1^2 doublesum_s2s2=0.0;//s2^2 doublepxy=0.0; doubletemp1=0.0; doubletemp2=0.0; if(s1==NULL||s2==NULL||n<=0) ??????return?-10; ???? ????for(int?i=0;i -delta&&temp1 -delta&&temp2
運(yùn)行結(jié)果為:
pxyofs1ands2:0.997435 pxyofs1ands1:1.000000 pxyofs1ands1:-1.000000
將這三個(gè)信號(hào)繪制成波形來看看:
由圖看出:
S1與S2非常相似,其相關(guān)系數(shù)為0.997435,高度相似
S1與-S1則剛好相位相反,理想反相關(guān),其相關(guān)系數(shù)為-1
S1與S1則理所當(dāng)然是一樣的,其相關(guān)系數(shù)為1
再來一組信號(hào)對比一下:
其波形數(shù)據(jù)為:
doubles1[30]={ 0.309016989,0.587785244,0.809016985,0.95105651,1, 0.951056526,0.809017016,0.587785287,0.30901704,5.35898E-08, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 }; doubles6[30]={ 0,0,0.187381311,0.368124547,0.535826787, 0.684547097,0.809016985,0.904827044,0.968583156,0.998026727, 0.992114705,0.951056526,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 }; doubles7[30]={ 0.187381311,0.368124547,0.535826787,0.684547097,0.809016985, 0.904827044,0.968583156,0.998026727,0.992114705,0.951056526, 0.876306697,0.770513267,0.637424022,0.481753714,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 };
利用上述代碼計(jì)算S1與S6,S1與S7的相關(guān)系數(shù):
pxyofs1ands6:0.402428 pxyofs1ands7:0.612618
可見,S6、S7與S1的相關(guān)系數(shù)越來越大,從波形上看相似度也越來越大。
總結(jié)一下
通過相關(guān)系數(shù)可以比較完美的判斷兩個(gè)信號(hào)序列,或者兩個(gè)隨機(jī)變量之間的相似度。相關(guān)系數(shù)以及互相關(guān)函數(shù)應(yīng)用很廣,本文僅僅描述了一個(gè)工程上應(yīng)用較多的實(shí)際栗子。事實(shí)上,該數(shù)學(xué)特性有著廣泛的應(yīng)用,有興趣的可以深度學(xué)習(xí)探討一下。
??
審核編輯:劉清
-
波形圖
+關(guān)注
關(guān)注
1文章
34瀏覽量
14905 -
信號(hào)線
+關(guān)注
關(guān)注
2文章
167瀏覽量
21406 -
變量
+關(guān)注
關(guān)注
0文章
613瀏覽量
28306
原文標(biāo)題:數(shù)學(xué)之美:判定兩個(gè)隨機(jī)信號(hào)序列的相似度
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論