Matlabs xcorr函数在C语言中

时间:2018-08-24 08:02:52

标签: matlab cross-correlation

我正在使用该功能

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文档如何获得这些值。我可以使用任何公式吗?

1 个答案:

答案 0 :(得分:4)

在一般的matlab文档中,将公式放在名为更多信息的一章中,请查看本章以了解matlab实现的公式。 这是指向 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个元素填充为in(1:N-m)。我使用abs是因为滞后 m 是负的还是正的。 尝试使用代码,并打印[zeros(1,abs(m)) in(1:N-abs(m))]以获得 m 的各种值,以更好地理解向量的移位版本。

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