Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何求一维数组/向量的自相关矩阵_Python_Math_Signal Processing_Eigenvector_Autocorrelation - Fatal编程技术网

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

Python 如何求一维数组/向量的自相关矩阵,python,math,signal-processing,eigenvector,autocorrelation,Python,Math,Signal Processing,Eigenvector,Autocorrelation,我有一个大小为n的一维数组,它代表时域中的一个信号,我需要用python找到这个信号的自相关矩阵,然后我将计算这个矩阵的特征向量和特征值 我尝试使用scipy.linalg中的Toeplitz方法,如下所示 res = scipy.linalg.toeplitz(c=np.asarray(signal),r=np.asarray(signal)) eigenValues,eigenVectors = numpy.linalg.eig(res) 我不确定这是否正确,因为在Matlab论坛上我看到

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

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

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

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

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

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

R_XX[i,j] = E[X[i] ⋅ X[j]]
和E[⋅] 表示

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

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

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或Matlab中计算它。同样,我会在信号边缘强调边界处理注意事项。请按照这些链接阅读这些实现提供的选项

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

R_XX[i,j] ~= R_xx[j - i]
就像你说的,这就是托普利茨