# xcov


互协方差

函数库: TyStatistics

# 语法

c, = xcov(x,y)

c, = xcov(x)

c, = xcov(___;maxlag=nothing)

c, = xcov(___;scale=nothing)

c,lags = xcov(___)

# 说明

c, = xcov(x,y)返回两个离散时间序列的互协方差。互协方差测量向量 x 和移位(滞后)副本向量 y 的之间的相似性,形式为滞后的函数。如果 x 和 y 的长度不同,函数会在较短向量的末尾添加零,使其长度与另一个向量相同。示例

c, = xcov(x) 返回 x 的自协方差序列。如果 x 是矩阵,则 c 是矩阵,其列包含 x 所有列组合的自协方差和互协方差序列。示例

c, = xcov(___;maxlag=nothing) 将上述任一语法中的滞后范围限制为从 -maxlag 到 maxlag。示例

c, = xcov(___;scale=nothing) 还为互协方差或自协方差指定归一化选项。除 nothing(默认值)以外的任何选项都要求 x 和 y 具有相同的长度。示例

c,lags = xcov(___) 还返回用于计算协方差的滞后。示例

# 示例

两个随机向量的互协方差

创建一个由随机数组成的向量 x 和一个向量 y,后者是 x 右移 3 个元素的结果。计算并绘制 x 和 y 的估计互协方差。在 x 和 y 的元素完全匹配的滞后值 (-3) 处,出现最大峰值。

using TyPlot
using TyMath
using TyStatistics
rng=mt19937ar(5489);
x = rand(rng,20,1);
y = circshift(x,3);
c,lags = xcov(x,y);
stem(lags,c)
随机向量的自协方差

创建一个 20×1 随机向量,然后计算并绘制估计的自协方差。在零滞后时(此时向量与自身完全相等),出现最大峰值。

using TyPlot
using TyMath
using TyStatistics
rng=mt19937ar(5489);
x = rand(rng,20,1);
c,lags = xcov(x);
stem(lags,c)
噪声的归一化自协方差

计算并绘制 −10≤m≤10 时高斯白噪声的估计的自协方差 c(m)。将序列归一化,使其在零滞后时为单位 1。

using TyPlot
using TyMath
using TyStatistics
rng=mt19937ar(5489);
x = randn(rng,1000,1);
maxlag = 10;
c,lags = xcov(x,maxlag=maxlag,scale="normalized");
stem(lags,c)
两个移位信号的有偏互协方差

创建一个由两个信号组成的信号,这两个信号彼此循环移位 50 个样本。

using TyPlot
using TyMath
using TyStatistics
rng=mt19937ar(5489);
shft = 50;
s1 = rand(rng,150,1);
s2 = circshift(s1,[shft 0]);
x = [s1 s2];

计算并绘制自协方差和互协方差序列的有偏估计。输出矩阵 c 的形式为四个列向量,满足 。由于循环移位, 在 -50 和 +100 处有最大值, 在 +50 和 -100 处有最大值。

c, lags = xcov(x; scale="biased")
plot(lags, c)
legend([raw"$cₛ₁ₛ₁$", raw"$cₛ₁ₛ₂$", raw"$cₛ₂ₛ₁$", raw"$cₛ₂ₛ₂$"])

# 输入参数

x — 输入数组
向量 | 矩阵 | 多维数组

输入数组,指定为向量、矩阵或多维数组。如果 x 是多维数组,则 xcov 对所有维度按列操作,并将每个自协方差和互协方差作为矩阵的列返回。

数据类型: Float32 |Float64 |Int8 |Int16 |Int32 |Int64 |Int128 |UInt8 |UInt16 |UInt32 |UInt64 |UInt128 |Bool

复数支持:

y — 输入数组
向量 | 矩阵 | 多维数组

输入数组,指定为向量、矩阵或多维数组。

数据类型: Float32 |Float64 |Int8 |Int16 |Int32 |Int64 |Int128 |UInt8 |UInt16 |UInt32 |UInt64 |UInt128 |Bool

复数支持:

maxlag — 最大滞后
整数标量

最大滞后,指定为整数标量。如果您指定 maxlag,则返回的互协方差序列范围是从 -maxlag 到 maxlag。默认情况下,滞后范围等于 2N–1,其中 N 是输入 x 和 y 中较长一方的长度。

数据类型: Float32 |Float64 |Int8 |Int16 |Int32 |Int64 |Int128 |UInt8 |UInt16 |UInt32 |UInt64 |UInt128 |Bool

scale — 归一化选项
nothing (默认) | "biased" | "unbiased" | "normalized" | "coeff"

归一化选项,指定为下列各项之一。

  • nothing - 原始、未缩放的互协方差。当 x 和 y 长度不同时,'none' 是唯一有效的选项。
  • "biased" - 互协方差的有偏估计:

.

  • "unbiased" - 互协方差的无偏估计:

.

  • "normalized" 或 "coeff" - 对序列进行归一化,使零滞后时的互协方差等于 1:

.

# 输出参数

c — 互协方差或自协方差
向量 | 矩阵

互协方差或自协方差,以向量或矩阵形式返回。

如果 x 是 M × N 矩阵,则 先从 xcov(x) 返回 矩阵,其中包含 x 各列的自相关和互相关。如果您指定 [maxlag],则 r 的大小为

例如,如果 S 有三列,,则 C = xcov(S) 的结果的形式为

lags — 滞后索引
向量

滞后索引,以向量形式返回。

# 详细信息

互协方差和自协方差

xcov 计算其输入的均值,减去均值,然后调用 xcorr

xcov 的结果可以解释为两个随机序列之间的协方差估计,也可以解释为两个确定性信号之间的确定性协方差。

两个联合平稳随机过程 的真正互协方差序列是去除均值后的序列的互相关,

其中 是两个平稳随机过程的均值,星号表示复共轭,E 是期望值运算符。xcov 只能估计序列,因为实际上,在无限长随机过程的一个实现中只有有限的部分可用。

默认情况下,xcov 计算未经归一化的原始协方差:

输出向量 c 包含的元素由下式给出:

.

协方差函数需要归一化来正确估计函数。您可以通过使用输入参数 scale 来控制相关性的归一化。

# 另请参阅

conv | corrcoef | ty_cov | xcorr