Документация Engee

xcov

Взаимная ковариация.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • с = xcov(x,y) — возвращает взаимную ковариацию двух дискретных последовательностей. Взаимная ковариация измеряет сходство между вектором x и сдвинутыми (запаздывающими) копиями вектора y как функцию задержки. Если x и y имеют разную длину, функция добавляет нули в конец более короткого вектора, чтобы он имел ту же длину, что и другой.

  • с = xcov(x) — возвращает последовательность автоковариации аргумента x. Если x — матрица, то выходной аргумент с — матрица, столбцы которой содержат последовательности автоковариации и взаимной ковариации для всех комбинаций столбцов x.

  • с = xcov(___,maxlag) — задает диапазон задержек от maxlag до maxlag для любого из предыдущих синтаксисов.

  • с = xcov(___,scaleopt) — также задает параметр нормализации для взаимной ковариации или автоковариации. Любое значение аргумента scaleopt, отличное от "none" (по умолчанию), требует, чтобы входные аргументы x и y имели одинаковую длину.

  • с, lags = xcov(___) — также возвращает значения задержек, по которым вычисляются ковариации.

Аргументы

Входные аргументы

# x — входной массив
вектор | матрица | многомерный массив

Details

Входной массив, заданный как вектор, матрица или многомерный массив. Если x — многомерный массив, то функция xcov работает по столбцам по всем измерениям и возвращает каждую автоковариацию и взаимную ковариацию как столбцы матрицы.

Типы данных

Float32, Float64

Поддержка комплексных чисел

Да

# y — входной массив
вектор

Details

Входной массив, заданный как вектор.

Типы данных

Float32, Float64

Поддержка комплексных чисел

Да

# maxlag — максимальная задержка
целочисленный скаляр

Details

Максимальная задержка, заданная как целочисленный скаляр. Если аргумент maxlag задан, возвращаемая последовательность взаимной ковариации находится в диапазоне от −maxlag до maxlag. Если аргумент maxlag не задан, по умолчанию диапазон отставания равен , где — большее из значений длин входных аргументов x и y.

Типы данных

Float32, Float64

# scaleopt — параметр нормализации
"none" (по умолчанию) | "biased" | "unbiased" | "normalized" | "coeff"

Details

Параметр нормализации, заданный одним из следующих способов:

  • "none" — необработанная, немасштабированная взаимная ковариация. Значение "none" — единственный допустимый вариант, если входные аргументы x и y имеют разную длину.

  • "biased" — смещенная оценка взаимной ковариации.

  • "unbiased" — несмещенная оценка взаимной ковариации.

  • "normalized" или "coeff" — нормализует последовательность таким образом, чтобы автоковариации при нулевой задержке были равны 1.

Выходные аргументы

# с — взаимная ковариация или автоковариация
вектор | матрица

Details

Взаимная ковариация или автоковариация, возвращаемая в виде вектора или матрицы.

Если x — матрица размером на , то xcov(x) возвращает матрицу размером на с автоковариациями и взаимными ковариациями столбцов x. Если аргумент maxlag задан, то выходной аргумент c имеет размер на .

Например, если S имеет три столбца: , то результат операции c = xcov(S) будет организован следующим образом:

# lags — индексы задержек
вектор

Details

Индексы задержек, возвращаемые в виде вектора.

Примеры

Взаимная ковариация двух случайных векторов

Details

Создадим вектор случайных чисел x и вектор y, равный вектору x, сдвинутому на 3 элемента вправо. Вычислим и построим график оцененной взаимной ковариации x и y. Наибольший всплеск наблюдается при значении задержки, когда элементы x и y точно совпадают (−3).

import EngeeDSP.Functions: xcov

using Random

Random.seed!(123)

x = rand(20, 1)
y = circshift(x, 3)

c, lags = xcov(x, y)

plot(vec(lags), c,
     seriestype = :stem, marker = :circle,
     legend = false)

xcov 1

Автоковариация случайного вектора

Details

Создадим случайный вектор размером 20 на 1, затем вычислим и построим график оцененной автоковариации. Наибольший всплеск наблюдается при нулевой задержке, когда вектор в точности равен самому себе.

import EngeeDSP.Functions: xcov

using Random

Random.seed!(123)

x = rand(20, 1)

c, lags = xcov(x)

plot(vec(lags), c,
     seriestype = :stem, marker = :circle,
     legend = false)

xcov 2

Нормализованная автоковариация шума

Details

Вычислим и построим график оцененной автоковариации белого гауссовского шума для . Нормализуем последовательность так, чтобы она была равна единице при нулевой задержке.

import EngeeDSP.Functions: xcov

using Random

Random.seed!(123)

x = rand(1000, 1)

maxlag = 10

c, lags = xcov(x, maxlag, "normalized")

plot(vec(lags), c,
     seriestype = :stem, marker = :circle,
     legend = false)

xcov 3

Смещенная взаимная ковариация двух сдвинутых сигналов

Details

Создадим сигнал, состоящий из двух сигналов, сдвинутых друг относительно друга по кругу на 50 отсчетов.

using Random

Random.seed!(123)

shft = 50
s1 = rand(150, 1)
s2 = circshift(s1, [shft 0])
x = [s1 s2]

Вычислим и построим график смещенных оценок последовательностей автоковариации и взаимной ковариации. Выходная матрица c организована в виде четырех векторов-столбцов таких, что . Элемент имеет максимумы в точках −50 и +100, а — максимумы в точках +50 и −100 в результате кругового сдвига.

import EngeeDSP.Functions: xcov

c, lags = xcov(x, "biased")

plot(vec(lags), c,
     label = ["c_s1s1" "c_s1s2" "c_s2s1" "c_s2s2"])

xcov 4

Дополнительно

Взаимная ковариация и автоковариация

Details

Функция xcov вычисляет среднее значение своих входных данных, вычитает это среднее значение, а затем вызывает функцию xcorr.

Результат работы функции xcov можно интерпретировать как оценку ковариации между двумя случайными последовательностями или как детерминированную ковариацию между двумя детерминированными сигналами.

Истинная последовательность взаимной ковариации двух совместно стационарных случайных процессов и представляет собой взаимную корреляцию центрированных последовательностей,

где и — средние значения двух стационарных случайных процессов, звездочка обозначает комплексное сопряжение, — оператор математического ожидания. Функция xcov может только оценить последовательность, поскольку на практике доступен только конечный сегмент одной реализации случайного процесса бесконечной длины.

По умолчанию функция xcov вычисляет необработанные ковариации без нормализации:

Выходной вектор c имеет элементы, заданные формулой

Для получения корректной оценки ковариационная функция требует нормализации. Вы можете управлять нормализацией ковариации, используя входной аргумент scaleopt.

Литература

  1. Orfanidis, Sophocles J. Optimum Signal Processing: An Introduction. 2nd Edition. New York: McGraw-Hill, 1996.

  2. Larsen, Jan. Correlation Functions and Power Spectra. November, 2009. https://www2.imm.dtu.dk/pubdb/edoc/imm4932.pdf