如何在没有像xcorr这样的内置函数的情况下创建自相关函数

时间:2013-11-01 00:22:42

标签: matlab correlation

我想将随机噪声向量与任何内置MATLAB函数自动关联。

我给出的自相关方程是:

Rxx[L] = ∑ from n = 1 to N-1 [x(n)*x(n+L)]

L = [0:200]

我已经编写了以下代码,但plot Rxx vs L plot并不是我所期待的。 我期待我的情节在L = 0L = 1开始时达到最大值,因为MATLAB的指数开始为1.然后指数下降并在零点处饱和。


clc
clear all

randn('seed',2496132);
n = randn(1,1024);

upperbound = numel(n)-1;

for L = 1:200

    for j = 1 : upperbound

            n1(j) = n(j)+L;
            Rxx(j) = (n(j)*n1(j));             

    end

    Rxx_sum(L) = sum(Rxx);
    Rxx = 0;

end

plot([1:200], Rxx_sum)

2 个答案:

答案 0 :(得分:1)

内循环中存在错误:您需要使用n1(j) = n(j+L);代替n1(j) = n(j)+L;。例如。您需要添加L来代替索引值。

第二个错误如下:如果你想使用upperbound = numel(n)-1,你应该使用L等于0或1。例如。你的外环将是

for L = 0:1
   ...
   Rxx_sum(L+1) = sum(Rxx);
   ...

除此之外,您还可以更正上限值:

upperbound = numel(n) - maxL;

maxL是下一循环中使用的L的最大值。

还有一个提示:如果用标量积代替内环,可以提高计算速度,例如

for L = 1:200
    Rxx_sum(L) = n(1:upperbound) * n(1+L:upperbound+L)';    
end

答案 1 :(得分:1)

我最终在上述代码的帮助下修复了我的脚本。

  

CLC

     

清除所有

     

randn( '种子',2496132);

     

z = randn(1,1024);

     

n = [z zeros(1,200)];

     

upperbound = numel(z)-1;

     

对于L = 0:200

for j = 1 : upperbound

    Rxx(j) = (n(j)*n(j+L));             

>end

Rxx_sum(L+1) = sum(Rxx);
Rxx = 0;
  

     

积([0:200],Rxx_sum)