如何找到1D阵列/向量的自动坐标矩阵



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

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

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

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

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

随机信号的自相关矩阵

"自相关矩阵";通常被理解为随机向量的特征:对于每个元素都是实值随机变量的随机向量(X[1],…,X[N](,自相关矩阵是NxN对称矩阵R_XX,其第(i,j(个元素是

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

E[·]表示期望。

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

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

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

WSS信号的自相关

在信号处理中,一个常见的建模假设是;广义静止或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.correct(x,x(或Matlab中的xcorr(x,x(来计算它。我再次强调了信号边缘的边界处理注意事项。请按照这些链接阅读这些实现提供的选项。

您可以通过将1D相关阵列R_xx[k]与矩阵R_xx[i,j]关联起来

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

就像你说的是托普利茨。

最新更新