现在的位置: 首页 > 综合 > 正文

Matlab中autocorr和xcorr函数

2018年05月03日 ⁄ 综合 ⁄ 共 2135字 ⁄ 字号 评论关闭

写论文,用到了自相关(autocorrelation)函数。在网上查了很多资料,对自相关有了一定的了解,但是都解释的不清楚,甚至有些混乱。既然实验采用的是matlab的autocorr函数,那就深入研究一下它是怎么实现的。help autocorr 的描述是英文的,自己硬着头皮翻译了一遍,希望对用到自相关的同学有帮助。(只把需要用到的翻译了,其它的没用到,我也不懂

 AUTOCORR Sample autocorrelation
 
  Syntax:
 
    [acf,lags,bounds] = autocorr(y)
    [acf,lags,bounds] = autocorr(y,numLags,numMA,numSTD)
    autocorr(...)
 
  Description:
 
    Compute the sample autocorrelation function (ACF) of a univariate, stochastic time series y. When called with no output arguments, AUTOCORR plots the ACF sequence with confidence bounds.

计算单变量、随机时间序列y的样本自相关函数(ACF)。当调用无输出参数的自相关函数时,AUTOCORR画出在置信边界内(我也不懂什么意思)的ACF序列。

  Input Arguments:
 
    y - Vector of observations of a univariate time series for which the sample ACF is computed or plotted. The last element of y contains the most recent observation.

这句没必要翻译吧!

  Optional Input Arguments:
 
    numLags - Positive integer indicating the number of lags of the ACF to compute. If empty or missing, the default is to compute the ACF at lags 0,1,2, ... T = min[20,length(y)-1]. Since ACF is symmetric about lag zero, negative lags are ignored.

numLags-正整数表示需计算的ACF的延迟数量(这儿需要同学们去查一些自相关的资料,就能明白是什么意思)。假如不写,默认计算ACF,当延迟分别为0,1,2, ... T = min[20,length(y)-1]的时候。由于ACF是在延迟0处对称的,负的延迟被忽略了。

  Output Arguments:
 
    acf - Sample autocorrelation function of y. acf is a vector of  length numLags+1 corresponding to lags 0,1,2,...,numLags. The first element of acf is unity (i.e., acf(1) = 1 at lag 0).

acf-y的样本自相关函数。acf是一个长度为numsLags+1的向量,对应延迟0,1,2,...,numLags。acf的第一个元素是单位元素(例如,acf(1)=1 延迟为0时)。

这里给大家解释一下,acf(1)=1其实是认为规定的,它相当于所有真实的acf值都除了真实的acf(1)的值。Think about!

下面为大家看一个我自己做的实例吧!是对一条5s的心电信号做的处理。

5s的原始心电信号

numLags=100,ACF结果

后半部分转载自:http://poemunfinished.blog.163.com/blog/static/32082132201185105325810/

 

(赵伟峰写于2011.9.5)
Matlab中有两个现成的函数可以求自相关:方法1是利用互相关函数xcorr;方法2是自相关函数autocorr。
但是对于向量x,只是进行xcorr(x)和autocorr(x),求的的结果却差别很大。除了xcorr求得的序列是一个中心对称的偶函数序列外,数值的大小也不对应。
看了help,然后自己实验了一下,终于找到了原因。首先,autocorr是对序列减去均值后做的自相关,最后又进行了归一化。而且由于自相关本身是偶函数,而xcorr本身是计算互相关的,所以xcorr最终的结果是2*N-1,而autocorr只是取了以中心点N为起始的后面N个序列。因此,如果以向量x为例,x长为N。则用autocorr(x,N-1)能得到的N长度结果。用xcorr需要有以下几步:

 E = mean(x);
 X2 =x-E;
 c =xcorr(x2);
 d =c./c(N);
 f =d(N:2*N-1);

可见,求自相关还是用autocorr更方便一些。另外,这里为了方便,只是采用了默认的调用方式,两个函数的具体参数变化还是要看help详细说明,暂不讨论。

 

还有一篇相关博文可以参考。

地址:http://blog.csdn.net/scuthanman/article/details/5588138

 

抱歉!评论已关闭.