在matlab里怎么产生零均值协方差是已知的高斯信号呢?零均值协方差矩阵是已知的,已知的是协方差矩阵,不是协方差
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/20 20:26:29
在matlab里怎么产生零均值协方差是已知的高斯信号呢?零均值协方差矩阵是已知的,已知的是协方差矩阵,不是协方差
在matlab里怎么产生零均值协方差是已知的高斯信号呢?
零均值协方差矩阵是已知的,已知的是协方差矩阵,不是协方差
在matlab里怎么产生零均值协方差是已知的高斯信号呢?零均值协方差矩阵是已知的,已知的是协方差矩阵,不是协方差
如何生成满足协方差矩阵Cx=[4 -1;-1 2]的二维高斯随机变量x的N个样本?
为了简单起见,假设X是零均值的.对于非零均值,设均值average=[a;b],只要外加一步x=x+average*ones(1,N)就OK了.
首先生成不相关的二维高斯随机变量z=randn(2,N);
这样生成的z,因为不相关,如果没有野值的话,其协方差Cz=[1 0;0,1];
如何从这样一个样本变换出满足所要求协方差矩阵的随机变量?
在零均值的条件下,Cz=E{z*z'},
我们假设 x=A*z,那么 Cx=E{x*x'}=E{(A*z)*(A*z)'}=A*E{z*z'}*A'=A*Cz*A'=A*A'
现在要解决的问题是,已知A*A'=Cx=[4 -1;-1 2],如何求A?显然这样的A有很多,我们为了方便计算,假设A为对称矩阵,即A=A',那么A的平方等于Cx,A等于Cx的平方根.
程序如下:
z=randn(2,N);
x=sqrtm(Cx)*z;
如果是非零均值,加上x=x+average*ones(1,N);
注意:
(1)程序中求平方根用的是sqrtm(Cx),而不是sqrt(Cx),前者是求满足A*A=Cx的A,后者是求满足A.*A=Cx的A.
(2)当N的值取太小时,Cz可能不等于[1 0;0 1].数据量越少,越不能体现统计特性.