Matlab中autocorr和xcorr函数

写论文,用到了自相关(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

 

  • 16
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: MATLAB的`autocorr`函数用于计算一个信号的自相关函数。它的语法如下: ``` [R,lags] = autocorr(x) [R,lags] = autocorr(x,maxlags) ``` 其,`x`是输入信号向量,`maxlags`是自相关函数的滞后阶数(默认为`length(x)-1`)。函数输出包括自相关函数`R`和滞后向量`lags`。 以下是一个简单的示例: ```matlab x = sin(2*pi*0.1*(0:999))+randn(1,1000); % 生成含有噪声的正弦波信号 [R,lags] = autocorr(x); % 计算自相关函数 plot(lags,R); % 绘制自相关函数 xlabel('Lags'); ylabel('Autocorrelation'); ``` 这个示例将生成一个含有噪声的正弦波信号,并计算其自相关函数。最后,它将绘制自相关函数图像。 ### 回答2: 在Matlab,使用autocorr函数来计算给定信号的自相关函数。具体用法如下: 1. 首先,准备一个信号向量。例如,假设我们有一个长度为N的信号x。 2. 调用autocorr函数,提供信号向量作为输入参数。例如,autocorr(x)。 3. 可以选择提供一个可选的第二个参数,表示自相关函数的最大延迟。例如,autocorr(x, m),其m是一个正整数。 4. 根据需要,可以选择提供其他可选参数,以控制自相关函数的计算方式。例如,autocorr(x, 'NumLags', n),其n是一个正整数,表示自相关函数的最大延迟。 5. 得到计算得到的自相关函数。它将是一个长度为2N-1的向量,前N个值代表正延迟,后N-1个值代表负延迟。 6. 可以将结果可视化,以便更好地理解信号的自相关特性。使用plot函数可以绘制自相关函数的图形。 需要注意的是,autocorr函数并不会对信号进行标准化。如果需要标准化后的自相关函数,可以使用matlab内置函数xcorr。使用xcorr函数时,只需将normed参数设置为true即可。 综上所述,使用Matlabautocorr函数可以计算给定信号的自相关函数,并通过可视化结果来了解信号的自相关特性。 ### 回答3: 在MATLAB,可以使用autocorr函数来计算信号的自相关函数autocorr函数的语法如下: r = autocorr(x, lags) 其,x是输入信号,lags是要计算的滞后的个数。 x可以是一个向量或一个矩阵。当x是一个矩阵时,autocorr函数将返回每一列的自相关系数。lags是一个整数,用于指定要计算的滞后个数。默认情况下,lags为10。 函数返回一个自相关系数的向量r,其长度为lags+1。 使用例子: 假设有一个信号x,长度为N。你可以使用以下代码计算自相关系数: r = autocorr(x, N-1) 这将返回一个长度为N的自相关系数向量。 另外,autocorr函数还可以用于绘制自相关函数autocorr(x) 这将在一个新的窗口绘制x的自相关函数图。默认情况下,函数在-lags到+lags之间绘制自相关函数,其lags的值为10。 总之,使用MATLABautocorr函数,你可以计算信号的自相关系数以及绘制自相关函数图。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值