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
请发表评论