matlab如何产生均值为0,方差为1的复高斯分布 - 是晓雨呀?

matlab如何产生均值为0,方差为1的复高斯分布

网上对于matlab如何产生均值为0,方差为1的复高斯分布一般都会给出这个答案:

s = sqrt(var/2)*(randn(1,K) +j*randn(1,K)) (答案1)

其中s表示复高斯矩阵,var表示功率(即方差),而K表示采样数(这个例子中var为1)

究竟这个答案是否正确呢?网上已经有不少人给出了解释,现在我给出我自己的证明和看法:

第一部分:

首先是要明确什么是复高斯分布,对于这个内容,网站:http://everything2.com/title/complex+Gaussian+distribution 给出了比较好的解释,我再解释一下:我们称复随机变量z=x+iy是一个复随机变量或者服从复高斯分布如果它满足一下条件:

a、它的实部x和虚部y服从联合高斯分布

b、它的实部x和虚部y相互独立

c、它的实部x和虚部y拥有相同的方差

以mx and my 表示x和y的均值,则z的均值为E[z]=mz=mx+i*my,它的方差定义为:E[(z-mz)(z-mz)*] (*表示共轭,公式可在维基百科上查到),因为复数的性质zz*=|z|^2=|z^2|,可将方差表示为E[|z-mz|^2],方差的大小为x或y的方差的两倍(比较一下上述网站的方差定义就知道了)。

第二部分:

对复高斯分布了解了之后,现在解释一下randn这个函数,这个函数主要的作用是产生均值为0,方差为1的正态随机分布数或矩阵,而randn(n,m)是产生一个m*n的随机项矩阵

第三部分:

现在对答案1进行解释,根据均值的性质:E[cX]=cE[X],方差的性质:D[cX]=(c^2)D[X],可得s = sqrt(var/2)*(randn(1,K) +j*randn(1,K)) 的均值为sqrt(var/2)*0=0,

方差为2*[(sqrt(var/2))^2]*1=2*(1/2)=1,同时实部和虚部都满足要求,因此这个答案是能产生均值为0,方差为1的复高斯分布的。

当要改变方差是,只需要改变var的值即可(这个答案的均值都为0)。

------------------------------------------------------------------------------------------

z=x+iy

E{z}=E{x+iy}=E{x}+i*E{y}

D{z}=E{(x+iy)*(x+iy)\'}=E{|x+iy|^2}=E{x^2+y^2}=D{x}+D{y}

当复信号均值为0时,x和y均值为0

当复信号方差为1时,x和y方差为1/2

The typical assumption for a complex-valued Gaussian random vector is to split the variance equally among the real and imaginary parts. Let the variance be sigma2.

z = sqrt(sigma2/2)*(randn(1000,1)+1j*randn(1000,1));

If you have the Communications Toolbox, see awgn().

————————————————

原文链接:https://blog.csdn.net/weixin_49716102/article/details/108529230