1

我想在没有任何内置 MATLAB 函数的情况下自动关联随机噪声向量。

我给出的自相关方程是:

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

L = [0:200]

我已经编写了下面的代码,但plot RxxvsL plot不是我所期望的。我希望我的情节在MATLAB 开始其索引为 1时L = 0或之后的某个最大值开始。然后指数减少并在最小值为零时饱和。L = 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)
4

2 回答 2

1

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

clc

清除所有

randn('种子',2496132);

z = randn(1,1024);

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

上限=数字(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)

于 2013-11-01T21:56:15.973 回答
1

您在内部循环中有错误:您需要使用n1(j) = n(j+L);instead n1(j) = n(j)+L;。例如,您需要添加L到索引而不是值。

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

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

取而代之的是,您还可以更正上限值:

upperbound = numel(n) - maxL;

maxLL 的最大值将在下一个循环中使用。

另一个提示:如果用标量积替换内部循环,可以提高计算速度,例如

for L = 1:200
    Rxx_sum(L) = n(1:upperbound) * n(1+L:upperbound+L)';    
end
于 2013-11-01T04:57:58.603 回答