自相关矩阵和互相关矩阵的matlab实现

一维实值信号x的自相关矩阵Rxx应为实对称的toeplitz矩阵,而一维实值信号x,y的互相关矩阵Rxy为非对称的toeplitz阵,matlab提供的corrmtx函数产生的并非通常意义下的autocorrelation matrix
事实上,我们可以利用xcorr+toeplitz和corrmtx两种方法实现自相关阵Rxx和互相关阵Rxy 

一、 Rxx
1)% implementation with xcorr and toeplitz
m= 256;% dfine the time lag m+1, and m+1<=n;
n=length(x);%location of rxx(0);
rx=xcorr(x);%length of rx is 2*n-1;
Rxx=toeplitz(rx(n:n+m))/n;
2)%implementation with corrmtx
m= 256;% dfine the time lag m+1,and m+1<=n
rx=corrmtx(x,m);
Rxx=rx'*rx;
二、Rxy
1)% implementation with xcorr and toeplitz
m= 256;% dfine the time lag m+1, and m+1<=n;
n=max(length(x),length(y));location of rxy(0);
rxy=xcorr(x,y);%length of rxy is 2*n-1;
RR=toeplitz(rxy)/n;%RR is a (2*n-1)*(2*n-1) matrix
Rxy=RR(1:m,n:n+m);%the exact location of Rxy in RR;
2)% implementation with corrmtx
m= 256;% dfine the time lag m+1, and m+1<=n;
rx=corrmtx(x,m);
ry=corrmtx(y,m);
Rxy=rx'*ry; %on the other hand, Ryx=Rxy'


上面的方法实现了自相关和互相关的有偏矩估计(实际是用fft实现卷积的前提下做到的),也是做统计分析的常用手段,当然除了有偏矩估计,corrmtx还有很多可选参数,以供不同目的使用。
还有Rxy=Ryx',也就是说要求Ryx,只需要计算Rxy即可。
需要注意的是,当时延m+1接近于信号长度n的时候,xcorr后面的值(rx(m+1),rx(m),
r(m-1)...)估计的并不准确,这将严重影响滤波器设计等后续工作的效果,可以确信的是,n-m-1>100的时候,Rxx是可信的。
另外,自相关阵Rxx是一个主对角线绝对占优阵,也就是说,主对角线的值远大于其它对角线
这样svd(Rxx)得到的奇异值和eig(Rxx)得到的特征值几乎相同,这也是为什么有的论文用svd方法求主分量,有的则用evd(eigen value decomposition)求主分量了。
 

你可能感兴趣的:(信号处理)