Главная       Скачать       Коммерческая поддержка       FAQ       Forum       О нас       Английская версия

Кросс-корреляция

Дискретной кросс-корреляций функций f(t) и g(t), определенных на множестве целых чисел Z, называется следующая операция:

Круговой дискретной кросс-корреляцией не-периодической функции f с периодической функцией g называется следующая операция:

Кросс-корреляция чаще всего применяется в обработке сигналов, при этом f считается образцом, а g – сигналом, содержащим образец. Результат – это вектор чисел, показывающих, насколько сильно образец выражен в сигнале.

Представление данных

Областью определения функций f и g является всё множество целых чисел, но на практике мы имеем дело с данными ограниченной длины. Удобнее всего, когда функции f и g отличны от ноля только для неотрицательных t. Вычислительные подпрограммы пакета ALGLIB решают именно эту задачу – находят кросс-корреляцию двух функций, отличных от ноля только при неотрицательных значениях аргумента. Это позволяет воспользоваться простым соответствием между аргументом функции и индексом массива, в котором хранятся её значения: f(t=i) = f_array[i], 0 ≤ i < M и g(t=i) = g_array[i], 0 ≤ i < N. Кросс-корреляция двух таких функций, однако, будет отлична от ноля и при отрицательных значениях аргумента:

Чаще всего нам интересен результат корреляции в положительных отсчетах. Например, при обработке сигналов практически никогда не важна корреляция сигнала с образцом в момент времени t < 0. Поэтому подпрограммы пакета ALGLIB помещают значения корреляции в точках с положительным t в начало массива, а значения в точках с отрицательным t – в конец. Благодаря этому для положительных t сохраняется равенство индекса элемента массива и t.

В случае, если функции f и g отличны от ноля и при положительных, и при отрицательных значениях аргумента, можно воспользоваться тем, что при сдвиге одного из аргументов кросс-корреляции результат также подвергается сдвигу на ту же величину. При сдвиге сигнала результат сдвигается в том же направлении, при сдвиге образца – в обратном направлении. Просто сдвиньте f и g вправо, пока все ненулевые значения не окажутся по одну сторону от ноля, рассчитайте кросс-корреляцию, после чего сдвиньте обратно результат.

Реализация кросс-корреляции в ALGLIB

Для упрощения программного кода пакет ALGLIB представляет кросс-корреляцию, как свертку с модифицированными аргументами и результатом. Используются оптимизированные алгоритмы свертки, которые осуществляют автоматический выбор между тремя различными алгоритмами (в зависимости от того, какой метод будет быстрее). Подпрограмма свертки автоматически подбирает длину операндов, по необходимости дополняя их нолями, чтобы достичь оптимального быстродействия (быстродействие БПФ сильно зависит от разложения длины операнда на простые множители). Таким образом, пользователям ALGLIB не надо беспокоиться об оптимальной длине операндов.

Manual entries

C++ corr subpackage   
C# corr subpackage   

This article is intended for personal use only.

Скачать ALGLIB

C#

Исходный код на C#

Downloads page

 

C++

Исходный код на C++

Downloads page

 

C++, арифметика высокой точности

Исходный код на C++, использующий библиотеки MPFR/GMP.

Исходный код GMP доступен на сайте gmplib.org. Исходный код MPFR доступен на сайте www.mpfr.org.

Downloads page

 

FreePascal

Исходный код на Free Pascal.

Downloads page

 

Delphi

Исходный код на Delphi.

Downloads page

 

VB.NET

Исходный код на VB.NET.

Downloads page

 

VBA

Исходный код на VBA.

Downloads page

 

Python

Исходный код на Python (CPython и IronPython).

Downloads page

 

 

ALGLIB® - numerical analysis library, 1999-2017.
ALGLIB is registered trademark of the ALGLIB Project.