【问题标题】:Matlabs xcorr function in cc语言中的Matlab xcorr函数
【发布时间】:2018-08-24 08:02:51
【问题描述】:

我正在使用该功能

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 cross-correlation


    【解决方案1】:

    在一般的matlab文档中,将公式放在名为More about的一章中,查看这一章以了解matlab实现了哪些公式。 这是 xcorr 函数的 More about 章节的链接。 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 参考了哪些书籍。

    【讨论】:

    • 是的,我当然已经看到了。但是我不太了解这些公式,尤其是我并没有真正看到这里的滞后参数是如何处理的。有没有更好的解释?
    • 要计算互相关,只需将向量 y 从 -inf 移到 +inf,因此互相关是 y 移位的函数。但是向量的范围有限,因此没有必要从 -inf 计算到 inf。通常,互相关的宽度是最大向量宽度的两倍。例如,如果您有一个昏暗 30 的向量 X 和一个昏暗 50 的向量 Y,则 X 和 Y 之间的互相关的宽度为 100。现在根据 xcorr 的 matlab 文档,您可以指定最大滞后以将 xcorr 约束为 -滞后到滞后
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2016-08-19
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多