我想将随机噪声向量与任何内置MATLAB函数自动关联。
我给出的自相关方程是:
Rxx[L] = ∑ from n = 1 to N-1 [x(n)*x(n+L)]
L = [0:200]
我已经编写了以下代码,但plot
Rxx
vs L
plot
并不是我所期待的。
我期待我的情节在L = 0
或L = 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)
答案 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)