多维高斯随机变量的仿真

多维高斯随机变量

问题

在进行科学研究的时候,可能会涉及到如何采样多维高斯随机变量的问题,即给定随机变量 ξ ∼ N ( 0 , K ) , ξ ∈ R n \xi\sim\mathcal N(\mathbf 0,\mathbf K), \xi\in\mathbb R^n ξN(0,K),ξRn,得到样本数据 x i , i = 1 , 2 , . . . Q \mathbf x_i, i=1,2,...Q xi,i=1,2,...Q。这里假设高斯随机变量的均值为零,对于非零的均值,只需通过对样本数据添加一个常量即可。多维高斯随机变量的概率密度函数由均值和协方差矩阵唯一确定。

解决思路

  1. 先采样n维标准正态分布得到数据样本 y i \mathbf y_i yi,这可以通过以下方式实现:采样一维标准正态分布,再将每n个一维样本级联成一个n维样本。
  2. K \mathbf K K进行cholesky分解,即 K = A A T \mathbf K=\mathbf A\mathbf A^T K=AAT
  3. 获得最终的样本 x i = A y i \mathbf x_i=\mathbf A\mathbf y_i xi=Ayi

Matlab代码实现

function [ X ] = joint_gaussian( K , num)
% sampling the multi-dimensional Gaussian random variablbe
% K is the covariance matrix
% num is the number of the samples
if K'~=K
   error('Kz must be symmetry');
end
N=size(K,1);
L=chol(K,'lower');
z=randn(N,num);
X=L*z;
end

扩展

循环对称多维复高斯随机变量

在通信仿真中,常常涉及到循环对称多维复高斯随机变量的采样,这里先解释一下什么是循环对称多维复高斯随机变量?它是多维复高斯随机变量的特例。和多维高斯随机变量不同,多维复随机高斯变量的概率密度函数仅由协方差矩阵 K z = E [ ξ ξ H ] \mathbf K_z=E[\xi\xi^H] Kz=E[ξξH]不能完全确定,还需要伪协方差矩阵 M z = E [ ξ ξ T ] \mathbf M_z=E[\xi\xi^T] Mz=E[ξξT]共同确定。但如果是循环对称多维复高斯,则其概率密度函数由协方差矩阵完全确定[1]。因为循环对称多维复高斯的伪协方差矩阵为零矩阵。
采样的方法如下所示:

  1. 将n维的复随机变量 ξ \xi ξ转化为2n维的实随机变量 η = [ R e a l ( ξ ) , I m a g ( ξ ) ] \eta=[Real(\xi),Imag(\xi)] η=[Real(ξ),Imag(ξ)]
  2. 计算 η \eta η的协方差矩阵 K η = [ 0.5 R e a l ( K z ) − 0.5 I m a g ( K z ) 0.5 I m a g ( K z ) 0.5 R e a l ( K z ) ] \mathbf K_{\eta}=\left[ \begin{array}{cc} 0.5Real(\mathbf K_z) & -0.5Imag(\mathbf K_z) \\ 0.5Imag(\mathbf K_z) & 0.5Real(\mathbf K_z)\end{array} \right] Kη=[0.5Real(Kz)0.5Imag(Kz)0.5Imag(Kz)0.5Real(Kz)]
  3. 使用上一节的采样方法进行采样,再将其组合成复随机变量。

Matlab代码实现

function [ X ] = joint_complex_gaussian( Kz, num )
% sampling the circulary-symmetric Gaussian random vector
% Kz is the covariance matrix
% num is the number of the samples
if Kz'~=Kz
   error('Kz must be hermitian');
end
Kv=[0.5*real(Kz),-0.5*imag(Kz);0.5*imag(Kz),0.5*real(Kz)];
N=size(Kv,1);
L=chol(Kv,'lower');
z=randn(N,num);
X=L*z;
X=X(1:N/2,:)+1i*X(N/2+1:end,:);
end

代码测试

对采样到的样本数据计算协方差矩阵,再与理论值进行比较,使用相对误差衡量效果,在样本数据为10万时,相对误差在0.5%左右。

clear all;
n = 6;
num = 100000;
% joint gaussian
K = randn(n,n);
K = K*K';
x = joint_gaussian(K,num);
% validate the covariance matrix by relative error
norm(K-x*x'/num)/norm(K)

% joint complex gaussian
Kz = randn(n,n)+1i*randn(n,n);
Kz = Kz*Kz';
x_complex = joint_complex_gaussian(Kz,num);
% validate the covariance matrix by relative error
norm(Kz-x_complex*x_complex'/num)/norm(Kz)

本文使用的符号

A T \mathbf A^T AT矩阵转置
A H \mathbf A^H AH矩阵共轭转置
E [ ] E[] E[]数学期望
R e a l ( ) Real() Real()取复数的实部
I m a g ( ) Imag() Imag()取复数的虚部

参考文献

[1] Gallager R G. Circularly-Symmetric Gaussian random vectors[J]. preprint, 2008:1-9.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值