在matlab里怎么产生零均值协方差是已知的高斯信号呢?
发布网友
发布时间:2022-05-21 19:24
我来回答
共1个回答
热心网友
时间:2023-11-07 23:41
如何生成满足协方差矩阵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].数据量越少,越不能体现统计特性。