首页 > 解决方案 > 使用 Math.Net 的互相关

问题描述

我尝试使用此答案中建议的解决方案: cross-correlation using mathdotnet ,但我总是在滞后 0 时获得最大相关性。我的源数据肯定有明显的滞后,偶尔会发生一次。当我使用 Pandas 包在 Python 中运行它时,我能够检测到大多数具有延迟的地方,因为最强的相关性将处于某些滞后状态,但在 Math.Net 中,它始终处于滞后 0 并且在随后的每个滞后中都会减少。

下面是我使用重新采样并归一化为 500 毫秒平均值的数据集的链接。 500ms_0930_1000.csv

这是从其他问题借来的互相关代码。我正在使用一个滑动窗口运行此代码,该窗口每一步需要 40 个点(20 秒)并滑动 20 个(10 秒)。

public IList<(double Corr, double Lag)> CalculateCrossCorrelation(double[] x1, double[] x2)
        {
            var len = x1.Length;
            var len2 = 2 * len;
            var len3 = 3 * len;
            var s1 = new double[len3];
            var s2 = new double[len3];

            Array.Copy(x1, 0, s1, len, len);
            Array.Copy(x2, 0, s2, 0, len);

            var results = new List<(double Corr, double Lag)>(len2);
            for (int i = 0; i < len2; i++)
            {
                results.Add((Corr: Correlation.Pearson(s1, s2), Lag: i - len));
                Array.Copy(s2, 0, s2, 1, s2.Length - 1);
                s2[0] = 0;
            }

            return results;
        }

标签: c#cross-correlationmath.net

解决方案


为什么设置 s2[0]=0?

您不会在初始阶段执行此操作。它给出了一个输出


推荐阅读