Кросс-корреляция с использованием Math.Net - PullRequest
0 голосов
/ 23 сентября 2019

Я пытался использовать решение, предложенное в этом ответе: кросс-корреляция с использованием mathdotnet , но я всегда получаю максимальную корреляцию при лаге 0. Мои исходные данные имеют определенно значительные лаги, которые случаются время от времени.Когда я запускаю это в Python с использованием пакета Pandas, я могу обнаружить большинство мест, которые имеют задержку, так как самая сильная корреляция будет при определенных задержках, но с 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;
        }

1 Ответ

0 голосов
/ 30 сентября 2019

Почему вы устанавливаете s2 [0] = 0?

Вы не делаете этого на начальном проходе.Это дает outl

...