Я пытался использовать решение, предложенное в этом ответе: кросс-корреляция с использованием 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;
}