MATLAB關於xcorr函式的用法
在做訊號處理的時候,經常會對訊號做自相關處理,比如對訊號做功率估計,或者是引數擬合。在機器學習領域,如wule-walker方程也會遇到自相互函式的處理。
1 自相關矩陣的基本概念
首先給出自相關函式的定義:
R(s,t)=E[(x(s)x(t))]
其中s,t是x(n)的不同時刻的訊號值。
在實際的應用當中,我們把測得的資料一般是隨機訊號,比如說要測每天的10點,14點,20點的天氣溫度,測了N天以後,我們計算要10點x1溫度的自相關函式。那麼該怎麼計算?
根據定義,我們需要知道x1和x2的概率密度f(x1,x2),然後通過來求得x1和x2的自相關矩陣。顯然,這個方法是行不通的。因為我們不知道f(x)的概率密度。但是我們又需要求出X1的自相關矩陣。
第二種方法就是測量無數天的10點溫度和12點溫度,然後帶入R(s,t)做平均。顯然這個方法也是行不通。因為這個方法所需要的資料是無窮的。
第三種方法就是假設每天10點和12點的溫度是平穩隨機過程。利用平穩隨機過程的各態歷經性,即時間平均收斂於集平均。
給出,其中k=s-t。n從0到N-1。
2 自相關矩陣的matlab實現
在matlab中,實現自相關的函式是xcorr()。
2.1 xcorr()
計算時先進行b的計算,用序列x中的元素的序號互相做減法,可以得到的所有值的可能集合,按照從小到大順序排列後就得到了b;然後分別根據序號的“差”的情況計算序列a:
當b(1)=-2時,只有資料(1, 5)作差可以得到,即序號1和序號3的差,因此計算a(1)=1*5=5;
當b(2)=-1時,涉及到了序號對應的(3, 1)和序號(5, 3),所以計算a(2)=3*1+5*3=18;
當b(3)=0時,涉及到了序號對應的(1, 1), (3, 3)和(5, 5),因此計算a(3)=1*1+3*3+5*5=35;
當b(4)=1時,涉及到了序號對應的(3, 1)和(5, 3),計算a(4)=3*1+5*3=18;
當b(5)=2時,涉及到了序號對應的(5, 1)(後面的資料的序號減去前面資料的序號正好為2),計算a(5)=5*1=5
2.2 xcorr(x, 'unbiased')
引數'unbiased'的作用在於基於預設引數時的計算結果,每個組的計算再除上該組的序號組數,比如b(1)時組數為1,記為N=1,則a(1)=1*5/N=5;b(2)時就是a(2)=18/N=18/2=9;類似等等;
點選(此處)摺疊或開啟
>> [a, b] = xcorr(x, 'unbiased')
a =
5.0000 9.0000 11.6667 9.0000 5.0000
b =
-2 -1 0 1 2
>>
3. xcorr(x, 'biased')
引數'biased'的作用在於預設引數的基礎上除以序列x的長度,即a(1)=5/3;比如:
點選(此處)摺疊或開啟
>> [a, b] = xcorr(x, 'biased')
a =
1.6667 6.0000 11.6667 6.0000 1.6667
b =
-2 -1 0 1 2
>>
4. xcorr(x, 'coeff')
此時用於求序列x的自相關序列,其結果是針對'biased'的情況進行歸一化,使得b=0時即中間的值a(3)=1,因此a(1)=5/11.6667,所有的分組資料在'biased'基礎上都通過11.6667歸一運算:
點選(此處)摺疊或開啟
>> [a, b] = xcorr(x, 'coeff')
a =
0.1429 0.5143 1.0000 0.5143 0.1429
b =
-2 -1 0 1 2
>>
3.編寫函式實現xocrr函式
根據1中提到的第三種方法計算自相關函式。u是輸入的資料
clear all;
u=[1 2 3 4];
for k=0:length(u)-1 %U的自相關函式,點數多的時候,計算速度慢等價於xcorr,biased
tmp = 0;
for i=1:length(u)-k
tmp = tmp + u(i)*u(i+k);
end
rx(k+1) = tmp/length(u);
end
得到結果為:
用matlab的函式xcorr()
clear all;
u=[1 2 3 4];
rx1=xcorr(u,'biased');
rx1=rx1(length(u):end)
可以得到
rx1=xcorr(u,'biased');
rx1=rx1(length(u):end)
才是我們用第三種方法所求的相關函式。
---------------------
作者:黨小板
來源:CSDN
原文:https://blog.csdn.net/qq_41912125/article/details/82659653
版權宣告:本文為博主原創文章,轉載請附上博文連結!
相關推薦
glViewport函式用法
一、 其函式原型為glViewport(GLint x,GLint y,GLsizei width,GLsizei height) x,y 以畫素為單位,指定了視窗的左下角位置。 width,height表示視口矩形的寬度和高度,根據視窗的實時變化重繪視窗。 二、 在預設情況下,視口被設定為佔據視窗
ROW_NUMBER() OVER()函式用法;(分組,排序),partition by (轉)
1、row_number() over()排序功能: (1) row_number() over()分組排序功能: 在使用 row_number() over()函式時候,over()裡頭的分組以及排序的執行晚於 where group by order
numpy函式:tile函式用法
tile函式位於python模組 numpy.lib.shape_base中,他的功能是重複某個陣列。比如tile(A,n),功能是將陣列A重複n次,構成一個新的陣列 from numpy import * #initialize the array a = [0,1,2]
Oracle單行函式用法
單行函式分為五種型別:字元函式、數值函式、日期函式、轉換函式、通用函式。 1.字元函式: 對於輸入的字元轉換為需要轉為的字元或數值。 upper()大寫 --小寫字母轉為大寫字母 --對於表指定
C語言幾個函式用法小結
1.char *ultoa(unsigned long value,char *string,int radix) 將無符號整型數value轉換成字串並返回該字串,radix為轉換時所用基數 2.char *ltoa(long value,char *string,i
numpy中flatten()函式用法
flatten是numpy.ndarray.flatten的一個函式,其官方文件是這樣描述的: ndarray.flatten(order='C') Return a copy of the array collapsed into one dimension. Parameters:
strtol函式用法
之前想用C寫MD5函式用法,中間設計大量進位制轉換的內容,於是就查到了strtol這個函式 但是發現之前對其認識上有一些偏頗,所以把它的用法記錄下來 strtol是一個C語言函式,作用就是將一個字串轉換為長整型long,其函式原型為 long int strtol (const
getline() 函式用法
本文轉自:http://blog.sina.com.cn/s/blog_60263c1c0101ck25.html 學習C++的同學可能都會遇到一個getline()函式,譬如在C++premer中,標準string型別第二小節就是“用getline讀取整行文字”。書上給的程式如下:
PHP array_pad函式用法
<?php //填充陣列到制定長度 $array = [1,2,3,4]; $array1 = [ [1],[2],[3],[4] ]; print_r(array_pad($array,6, 'abc')); //執行結果:Array ( [0] => 1 [1] =
np.nonzero()函式用法
返回陣列中不為0的元素的下標。 陣列中元素可為布林、整型和浮點型,返回值為元祖 一.一維陣列 1.陣列元素為布林型別 a=np.array([True,False,True,False]) b=np.nonzero(a) print(b) 輸出結果為(array([0, 2], dtype
python中的print輸出函式用法總結
【時間】2018.10.12 【題目】python中的print輸出函式用法總結 一、直接輸出 無論什麼型別,數值,布林,列表,字典...都可以直接輸出,或者先賦值給變數,再輸出。 二、格式化輸出 下面是《Python基
Python中split()函式用法和例項
一、描述 split()通過指定分隔符對字串進行切片,如果引數num 有指定值,則僅分隔 num 個子字串 函式形式:str.split(str="", num=string.count(str)) 引數: str -- 分隔符,預設為所有的空字元,包括空格、換行(\n)、製表
numpy中:tile函式用法
tile函式位於python模組 numpy.lib.shape_base中,他的功能是重複某個陣列。比如tile(A,n),功能是將陣列A重複n次,構成一個新的陣列,我們還是使用具體的例子來說明問題 ①先來引入numpy下的所有方法 from numpy import *
【 MATLAB 】nextpow2 函式用法之 Optimize FFT with Padding
您可以使用nextpow2來填充傳遞給fft的訊號。 這樣做可以在訊號長度不是2的精確冪次時加速FFT的計算。 Optimize FFT with Padding 下面這個例子展示了 使用填充優化FFT的案例,通過使用函式nextpow2完成: clc c
ROW_NUMBER() OVER()函式用法詳解 (分組排序 例子多)
語法格式:row_number() over(partition by 分組列 order by 排序列 desc) row_number() over()分組排序功能: 在使用 row_number() over()函式時候,over()裡頭的分組以及排序的執行晚於 wher
C函式之memcpy 函式用法
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
srand()以及rand()函式用法
srand()就是給rand()提供種子seed 如果srand每次輸入的數值是一樣的,那麼每次執行產生的隨機數也是一樣的, srand(n) for(10) rand()也就是說,以一個固定的數值作為種子是一個缺點。 通常的做法是 以這樣一句程式碼
Python的Request函式用法
目錄 傳送請求 POST 請求: 其他請求: 傳遞 URL 引數 響應內容 二進位制響應內容 JSON 響應內容 原始響應內容 定製請求頭 更加複雜的 POST 請求 POST一個多部分編碼(Multipart-Encoded)的檔案 響應狀態碼
linux之select函式用法詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
matlab中的mvnrnd函式用法
使用matlab來實現: clear all;close all; clc; % 第一組資料 mul=[0,0]; % 均值 S1=[.1 0;0 .1]; % 協方差 data1=mvnrnd(mul, S1, 100); % 產生高斯分佈資料 % 第二組資料 mu2=[1.25 1.25