zoukankan      html  css  js  c++  java
  • matlab中的xcorr 自相关函数

    转载自 http://blog.163.com/to_be_myself/blog/static/176060227201101762159227/

    Matlab中用于计算自相关函数的指令是xcorr.比如矩阵A=[1 2 3];

        xcorr(A)=3.0000 8.0000 14.0000 8.0000 3.0000

    自相关函数是信号间隔的函数,间隔有正负间隔,所以n个长度的信号,有2n-1个自相关函数值,分别描述的是不同信号间隔的相似程度。

         比如,上面的矩阵,最后得到5个结果,其中第三个是自己和自己相乘,最后相加的结果,值最大1*1+2*2+3*3=14。而第二个和第四个分别是间隔正负1的结果也就是1*2+2*3=8,2*1+3*2=8。第1个和第五个分别是间隔正负2,也就是1*3=3,3*1=3。


    matlab中的xcorr探秘 - szshdy - 水中鱼腹...
    xcorr求出的结果仅仅是x(n)*x(n+m)并对其求和,并没有除以前面的N或者是N-|K|。不用这个函数也可以求
    for k=0:1:p
        t5=0;
        for n=0:1:N-k-1
            t5=t5+conj(x(n+1))*x(n+1+k);
        end
        Rxx(k+1)=t5/N;
    end
    也可以实现,其中N为序列长度此处并未求出全部的自相关序列,只求了间隔从0到p的。
    我们令Rx=xcorr(x);
    则Rxx(k+1)=Rx(N+k)/N得到。
    下面是摘自一篇博文:

    1. 首先说说自相关和互相关的概念。
    这个是信号分析里的概念,他们分别表示的是两个时间序列之间和同一个时间序列在任意两个不同时刻的取值之间的相关程度,即互相关函数是描述随机信号 x(t),y(t)在任意两个不同时刻t1,t2的取值之间的相关程度,自相关函数是描述随机信号x(t)在任意两个不同时刻t1,t2的取值之间的相关程度。
    自相关函数是描述随机信号X(t)在任意两个不同时刻t1,t2的取值之间的相关程度;互相关函数给出了在频域内两个信号是否相关的一个判断指标,把两测点之间信号的互谱与各自的自谱联系了起来。它能用来确定输出信号有多大程度来自输入信号,对修正测量中接入噪声源而产生的误差非常有效.
    事实上,在图象处理中,自相关和互相关函数的定义如下:设原函数是f(t),则自相关函数定义为R(u)=f(t)*f(-t),其中*表示卷积;设两个函数分别是f(t)和g(t),则互相关函数定义为R(u)=f(t)*g(-t),它反映的是两个函数在不同的相对位置上互相匹配的程度。
    那么,如何在matlab中实现这两个相关并用图像显示出来呢?
    dt=.1;
    t=[0:dt:100];
    x=cos(t);
    [a,b]=xcorr(x,'unbiased');
    plot(b*dt,a)
    上面代码是求自相关函数并作图,对于互相关函数,稍微修改一下就可以了,即把
    [a,b]=xcorr(x,'unbiased');改为[a,b]=xcorr(x,y,'unbiased');便可。
    2. 实现过程:
          在Matalb中,求解xcorr的过程事实上是利用Fourier变换中的卷积定理进行的,即R(u)=ifft(fft(f)×fft(g)),其中×表示乘法,注:此公式仅表示形式计算,并非实际计算所用的公式。当然也可以直接采用卷积进行计算,但是结果会与xcorr的不同。事实上,两者既然有定理保证,那么结果一定是相同的,只是没有用对公式而已。下面是检验两者结果相同的代码:
    dt=.1;
    t=[0:dt:100];
    x=3*sin(t);
    y=cos(3*t);
    subplot(3,1,1);
    plot(t,x);
    subplot(3,1,2);
    plot(t,y);
    [a,b]=xcorr(x,y);
    subplot(3,1,3);
    plot(b*dt,a);
    yy=cos(3*fliplr(t)); % or use: yy=fliplr(y);
    z=conv(x,yy);
    pause;
    subplot(3,1,3);
    plot(b*dt,z,'r');
    即在xcorr中不使用scaling。
    3. 其他相关问题:
    1) 相关程度与相关函数的取值有什么联系?
      相关系数只是一个比率,不是等单位量度,无什么单位名称,也不是相关的百分数,一般取小数点后两位来表示。相关系数的正负号只表示相关的方向,绝对值表示相关的程度。因为不是等单位的度量,因而不能说相关系数0.7是0.35两倍,只能说相关系数为0.7的二列变量相关程度比相关系数为0.35的二列变量相关程度更为密切和更高。也不能说相关系数从0.70到0.80与相关系数从0.30到0.40增加的程度一样大。
    对于相关系数的大小所表示的意义目前在统计学界尚不一致,但通常按下是这样认为的:
    相关系数          相关程度
    0.00-±0.30       微相关
    ±0.30-±0.50   实相关
    ±0.50-±0.80  显著相关
    ±0.80-±1.00  高度相关
    matlab计算自相关函数autocorr和xcorr有什么不一样的?xcorr是没有将均值减掉做的相关,autocorr则是减掉了均值。

  • 相关阅读:
    标签的讲解
    属性分类
    LeetCode 003. 无重复字符的最长子串 双指针
    Leetcode 136. 只出现一次的数字 异或性质
    Leetcode 231. 2的幂 数学
    LeetCode 21. 合并两个有序链表
    象棋博弈资源
    acwing 343. 排序 topsort floyd 传播闭包
    Leetcode 945 使数组唯一的最小增量 贪心
    Leetcode 785 判断二分图 BFS 二分染色
  • 原文地址:https://www.cnblogs.com/sddai/p/5410811.html
Copyright © 2011-2022 走看看