Matlab:如何实现时间序列的期望运算符

信息处理 matlab 离散信号 自习
2022-02-09 20:58:47

我有一个时间序列的输出, y(t)它是一个t = 1,2,...m表示数据点数量的向量。

Q1:如果E[y(t)]= 过程的平均值y这可以使用命令mean(y)或编写语句来调用

m = size(y,1);
Expectation_y = sum(y)/m;

那么,我如何找到以下表达式的期望为

 [E[y(t-1)*y(t-1)']]^-1

在Slide2提到的自相关矩阵中可以找到这些类型的相关表达式 。在公式中,有期望运算符。那么如何在不使用内置命令的情况下实现滞后随机变量与自身和其他此类表达式的乘积的期望呢?

我的问题是如何实现它们?

Q2:我的困惑是两者之间有什么不同E[t=1Ny(t1)y(t1)T]和表达式 看起来像滞后的自相关以及如何实现它们。E[y(t1)y(t1)T]

谢谢!

1个回答

我不确定我是否理解这个问题。如果我遗漏了什么,请发表评论,我会根据需要尝试编辑/扩展/澄清。

首先,“均值”和“期望值”是相关的概念,但不是一回事。您可以找到一组样本或观察值的平均值。如果您正确采样/观察,平均值将接近预期值,这是基础随机过程的理论“真实平均值”。

当您对随机过程进行采样时,您最终会得到一组随机数。如果您再次对相同的过程进行采样,您最终会得到一组不同的数字。因此,您可以将每个样本视为一个随机变量(一个产生随机数的黑盒子);那么随机过程就是一系列随机变量。

这些随机变量可能是相关的;这意味着,直观地说,如果其中一个具有特定值,您可以使用它来预测其他一些样本的值。例如,您可能会发现,如果一个样本为正样本,则其相邻样本也往往为正样本。

在您的问题中,您说您有一组样本,y(t). 通常,您没有足够的信息来生成相关矩阵。但是,您可以这样做:

M = length(y);
C = zeros(M,M);
for i = 1:M
    for j = 1:M
        C(i,j) = mean(y(i)*y(j));  % Note that the mean is useless here,
                                   % since y(i)*y(j) is scalar
    end
end

要找到更接近底层过程的实际相关矩阵的近似值,您需要收集许多观察结果。假设您已将观察结果存储在矩阵的行中Y(每一行都是一组不同的观察值)。然后你可以这样做:

M = size(Y,2);
C = zeros(M,M);
for i = 1:M
    for j = 1:M
        C(i,j) = mean(Y(:,i).*Y(:,j));  
    end
end

为了测试这一点,让我们尝试对一个均值为零且方差为 1 的高斯过程进行采样。每次查看该过程时,我都会收集三个样本,并查看该过程 1000 次:

Y = randn(1000,3);

如果我用 matrix 运行上面的代码Y,我会得到这个相关矩阵:

0.9598    0.0590    0.0238
0.0590    0.9675   -0.0286
0.0238   -0.0286    1.0055

这是预期的(“真正的”相关矩阵是恒等式)。

关于在 Matlab 中计算时移,按如下方式在表格中排列向量是有帮助的(我假设):t=1,2,y(t)=10t

t    | y(t)  |  y(t-1)  | y(t-2) 
     |       |          |
1    |  10   |  --      | --
2    |  20   |  10      | --
3    |  30   |  20      | 10
4    |  40   |  30      | 20
...

从表中可以清楚地看出,要找到yn=y(t-n),您从 的末尾剪切n元素y,并移动时间向量:

tn = t(n:end);    % shifted time vector
yn = y(1:end-n);  % shifted signal

以下代码提供了一个示例,它不假定整数时间或整数延迟:

t = 0:0.1:3;  % time vector
y = exp(t/5); % y(t)
n = 0.8;      % time delay
tn = t(t>n);  % delayed time vector
yn = y(1:length(tn));  % delayed signal
plot(t,y,'r',tn,yn,'g');  % plot

这将产生以下图:

阴谋