如何求一维数组/向量的自相关矩阵

2024-06-23 03:17:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大小为n的一维数组,它代表时域中的一个信号,我需要用python找到这个信号的自相关矩阵,然后我将计算这个矩阵的特征向量和特征值

我尝试使用scipy.linalg中的Toeplitz方法,如下所示

res = scipy.linalg.toeplitz(c=np.asarray(signal),r=np.asarray(signal))
eigenValues,eigenVectors = numpy.linalg.eig(res)

我不确定这是否正确,因为在Matlab论坛上,我看到了一个完全不同的解决方案Matlab solution


Tags: signal信号npres代表矩阵scipy数组
1条回答
网友
1楼 · 发布于 2024-06-23 03:17:02

关于相关性的术语令人困惑,所以让我仔细定义一下您想要计算的内容

随机信号的自相关矩阵

"Autocorrelation matrix"通常被理解为随机向量的表征:对于随机向量(X[1],…,X[N]),其中每个元素是实值随机变量,自相关矩阵是NxN对称矩阵rxx,其(i,j)th元素为

R_XX[i,j] = E[X[i] ⋅ X[j]]

和E[⋅] 表示expectation

为了合理地估计自相关矩阵,你需要对随机向量X进行多次观测来估计期望值。但听起来你只有一个一维数组X。如果我们仍然应用上述公式,期望值就会简化为

R_XX[i,j] = E[X[i] ⋅ X[j]] ~= x[i] ⋅ x[j].

换句话说,矩阵退化为外积np.outer(x, x),一个具有一个非零特征值的秩1矩阵。但这是一个可怕的R_XX估计,并没有揭示关于信号的新见解

WSS信号的自相关

在信号处理中,一个常见的建模假设是信号为"wide-sense-stationary or WSS",这意味着信号的任何时间偏移都具有相同的统计信息。该假设特别适用于通过对信号的单个观察来估计上述期望:

R_XX[i,j] = E[X[i] ⋅ X[j]] ~= sum_n (x[i + n] ⋅ x[j + n])

其中,n的和覆盖所有样本。为简单起见,在本描述中,假设x是一个无限长的信号。在有限长信号的实践中,必须在信号边缘做一些事情,但我将对此进行掩饰。等效地,通过变量m=I+n的变化,我们得到

R_XX[i,j] = E[X[i] ⋅ X[j]] ~= sum_m (x[m] ⋅ x[j - i + m]),

i和j只在右边以差值(j-i)的形式出现。因此,这种自相关通常以“滞后”k=j-i为索引

R_xx[k] = sum_m (x[m] ⋅ x[j - i + m]).

请注意,这会产生一个1D数组而不是矩阵。例如,您可以使用Python中的scipy.signal.correlate(x, x)或Matlab中的xcorr(x, x)计算它。同样,我在强调信号边缘的边界处理注意事项。请按照这些链接阅读这些实现提供的选项

可以通过以下方式将一维相关数组R_xx[k]与矩阵R_xx[i,j]关联:

R_XX[i,j] ~= R_xx[j - i]

就像你说的,这就是托普利茨

相关问题 更多 >

    热门问题