c 中的 Matlab xcorr 函数

Matlabs xcorr function in c

我正在使用函数

in = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
lag = 8;
out = xcorr(in, lag)

它产生输出:

out = [175,000000000000, 238,000000000000, 308, 384, 465, 550, 638, 728, 819, 728, 638, 550, 465, 384, 308, 238, 175,000000000000];

我无法从 Matlabs 文档中了解如何获取这些值。有什么公式可以用吗?

在一般的 matlab 文档中,将公式放在名为 More about 的章节中,查看此章节以了解 matlab 实现了哪些公式。 这是 link 到 更多关于 章节的 xcorr 函数。 https://it.mathworks.com/help/signal/ref/xcorr.html#bubr0h6

为了更加清晰,请查看此代码:

in = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
lag = 8;
N = length(in);
correlation = zeros(2*lag,1);
for m = -8:8
    correlation(m+8+1) = sum(in.*[zeros(1,abs(m)) in(1:N-abs(m))]);
end

其中 sum(in.*[zeros(1,abs(m)) in(1:N-abs(m))]); 计算 in 与其移位版本之间的乘积之和。要计算 in 的移位版本,只需用零填充前 m 个元素,N-m 元素在 (1:N-m) 中。我使用 abs 是因为滞后 m 为负或正。 尝试代码并为 m 的各种值打印 [zeros(1,abs(m)) in(1:N-abs(m))] 以更好地理解矢量的移位版本的外观。

作业:为什么我们使用 [zeros(1,abs(m)) in(1:N-abs(m))] 而不是 [zeros(1,abs(m)) in(1:N)]? P.s 在这种情况下,您正在计算自相关,因此 y 向量是 x。 有关该理论的更多详细信息,请查看 参考资料 章节以查看 matlab 参考了哪些书籍。