一个例子学会自相关互相关的计算

问题

A = [1 2 3 4] ,求A的自相关系数。
求解过程如下图:
pic
求得结果为:[4 11 20 30 20 11 4]
自相关的结果为2N-1个,关于N对称。

理解matlab中的xcorr

1. 求两个序列的互相关

x = [1 2 3 4 5 6 7 8];
[r,lags] = xcorr(x); 

求得:

r = [8	23	44	70	100	133	168	204	168	133	100	70	44	23 8]
lags = [-7	-6	-5	-4	-3	-2	-1	0	1	2	3	4	5	6	7]

lags就是偏移量,默认从最小的偏移量开始,信号长度是8,往左偏移最多7位,往右偏移做多也是7位。也理解了为什么求出来的自相关结果的长度位15=2N-1。
pic2

2. 求给定偏移量不大于p的自相关函数

x = [1 2 3 4 5 6 7 8];
[r,lags] = xcorr(x, 4); 

这里设定最大偏移量不大于4,考虑正负偏移和0,所以对于指定偏移范围的自相关计算,其结果为2p+1个。

lags = [-4	-3	-2	-1	0	1	2	3	4]

r 的计算如法炮制:
pic3

r = [70	100	133	168	204	168	133	100	70]

3. 计算无偏估计及其他

Matlab提供的xcorr提供了一个归一化选项:
pic5
在谱估计的时候,经常要用到自相关函数的有偏估计,下面求一个。

[r,lags] = xcorr(x, 4, 'biased'); 

按照上面的公式,N为信号长度,可以猜测r的结果为:

[70/8	100/8	133/8	168/8	204/8	168/8	133/8	100/8	70/8]

使用matlab计算:

>> xcorr(x, 4, 'biased')

ans =

  列 1 至 8

    8.7500   12.5000   16.6250   21.0000   25.5000   21.0000   16.6250   12.5000

  列 9

    8.7500

一模一样。

4. 互相关的例子

>> x = [1 2 3 4];
>> y = [1 4 9 16];
>> xcorr(x, y)

ans =

   16.0000   41.0000   70.0000  100.0000   50.0000   19.0000    4.0000

K>> 

怎么算的?跟上面一样,自行脑补。

5. 题外话

matlab的帮助文档写得非常好,比外面乱七八糟抄来抄去说不清的博客好太多了,还权威。

参考:xcorr 互相关

自相关的概念的理解也可以参考这个博文,个人认为写得挺好。

还有博主自己手写了一个求自相关函数的算法,并与matlab提供的xcorr做了对比:
MATLAB_XCORR_互相关函数的讨论

C++版本:
xcorr 自相关 c++实现

  • 15
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值