最近在做一些MIMO空间相关信道的仿真,个人存在一些混淆,特此记录下来,欢迎大家学习并指正!
Kronecker相关信道模型
Hcorr=Rr1/2HiidRt1/2 \boldsymbol H_{corr} = \boldsymbol R_r^{1/2} \boldsymbol H_{iid} \boldsymbol R_t^{1/2} Hcorr=Rr1/2HiidRt1/2
- Hiid\boldsymbol H_{iid}Hiid :独立同分布复高斯随机变量
- Rr\boldsymbol R_rRr 和 Rt\boldsymbol R_tRt :接收和发送天线间的相关性
- 指数相关模型,各元素 rijr_{ij}rij 由下式给出(ρ\rhoρ 是天线间相关系数)(本文采用指数相关模型)
rij={ρj−i,i≤jrji∗,i>j r_{ij} = \begin{cases} \rho^{j-i}, & i \leq j \\ r_{ji}^*, & i>j \end{cases} rij={ρj−i,rji∗,i≤ji>j - 3GPP相关信道模型:https://itecspec.com/spec/3gpp-36-101-b-2-3-mimo-channel-correlation-matrices/
- Rr1/2\boldsymbol R_r^{1/2}Rr1/2 和 Rt1/2\boldsymbol R_t^{1/2}Rt1/2 表示接收发送相关矩阵的平方根分解/cholesky分解。
- 指数相关模型,各元素 rijr_{ij}rij 由下式给出(ρ\rhoρ 是天线间相关系数)(本文采用指数相关模型)
方式1---直接生成
nr = 2; nt = 2;
rho_r = 0.3; rho_t = 0.3;
Rr = toeplitz((rho_r * ones(1,nr)).^(0:(nr-1)));
Rt = toeplitz((rho_t * ones(1,nt)).^(0:(nt-1)));
H_iid = sqrt(0.5) * (randn(nr, nt) + 1j * randn(nr, nt));
H_corr = sqrtm(Rr) * H_iid * sqrtm(Rt);
方式2---complex correlation
该方式由于对 R1/2\boldsymbol R^{1/2}R1/2 的解释不同而产生两种方法,分别是基于平方根分解(sqrtm)和基于cholesky分解(chol)。
平方根分解
根据平方根分解,有
R=Rt⊗RrC2=RC=R1/2=(Rt⊗Rr)1/2\begin{align} & \boldsymbol R = \boldsymbol R_t \otimes \boldsymbol R_r \\ & \boldsymbol C^2 = \boldsymbol R \\ & \boldsymbol C = \boldsymbol R^{1/2} = (\boldsymbol R_t \otimes \boldsymbol R_r)^{1/2} \end{align}R=Rt⊗RrC2=RC=R1/2=(Rt⊗Rr)1/2
最终生成的相关信道矩阵满足
vec(Hcorr)=Cvec(Hiid)=(Rt⊗Rr)1/2vec(Hiid)=(Rt1/2⊗Rr1/2)vec(Hiid)=vec(Rr1/2HiidRtT/2)=vec(Rr1/2HiidRt1/2) (对称)\begin{align*} {\rm vec} (\boldsymbol H_{corr}) = & \boldsymbol C {\rm vec}(\boldsymbol H_{iid})\\ = & (\boldsymbol R_t \otimes \boldsymbol R_r)^{1/2} {\rm vec} (\boldsymbol H_{iid})\\ = & (\boldsymbol R_t^{1/2} \otimes \boldsymbol R_r^{1/2}) {\rm vec} (\boldsymbol H_{iid})\\ = & {\rm vec} (\boldsymbol R_r^{1/2} \boldsymbol H_{iid} \boldsymbol R_t^{T/2})\\ = & {\rm vec} (\boldsymbol R_r^{1/2} \boldsymbol H_{iid} \boldsymbol R_t^{1/2})~(对称)\\ \end{align*}vec(Hcorr)=====Cvec(Hiid)(Rt⊗Rr)1/2vec(Hiid)(Rt1/2⊗Rr1/2)vec(Hiid)vec(Rr1/2HiidRtT/2)vec(Rr1/2HiidRt1/2) (对称)
nr = 2; nt = 2;
rho_r = 0.3; rho_t = 0.3;
Rr = toeplitz((rho_r * ones(1,nr)).^(0:(nr-1)));
Rt = toeplitz((rho_t * ones(1,nt)).^(0:(nt-1)));
R = kron(Rt, Rr);
C = sqrtm(R);
H_iid = sqrt(0.5) * (randn(nr, nt) + 1j * randn(nr, nt));
H_corr = reshape(C * H_iid(:),nr,nt);
cholesky分解
根据cholesky分解,有
R=Rt⊗RrCTC=RC=chol(R)\begin{align} & \boldsymbol R = \boldsymbol R_t \otimes \boldsymbol R_r \\ & \boldsymbol C^T C = \boldsymbol R \\ & \boldsymbol C = {\rm chol} (\boldsymbol R) \end{align}R=Rt⊗RrCTC=RC=chol(R)
最终生成的相关信道满足
vec(Hcorr)=CTvec(Hiid)=(chol(Rt⊗Rr))Tvec(Hiid)=(chol(Rt)⊗chol(Rr))Tvec(Hiid)=(chol(Rt)T⊗chol(Rr)T)vec(Hiid)=vec(chol(Rr)THiidchol(Rt))\begin{align*} {\rm vec} (\boldsymbol H_{corr}) = & \boldsymbol C^T {\rm vec} (\boldsymbol H_{iid})\\ = & ({\rm chol} (\boldsymbol R_t \otimes \boldsymbol R_r))^T {\rm vec} (\boldsymbol H_{iid})\\ = & ({\rm chol} (\boldsymbol R_t) \otimes {\rm chol} (\boldsymbol R_r))^T {\rm vec} (\boldsymbol H_{iid})\\ = & ({\rm chol} (\boldsymbol R_t)^T \otimes {\rm chol} (\boldsymbol R_r)^T) {\rm vec} (\boldsymbol H_{iid})\\ = & {\rm vec} ({\rm chol} (\boldsymbol R_r)^T \boldsymbol H_{iid} {\rm chol} (\boldsymbol R_t))\\ \end{align*}vec(Hcorr)=====CTvec(Hiid)(chol(Rt⊗Rr))Tvec(Hiid)(chol(Rt)⊗chol(Rr))Tvec(Hiid)(chol(Rt)T⊗chol(Rr)T)vec(Hiid)vec(chol(Rr)THiidchol(Rt))
nr = 2; nt = 2;
rho_r = 0.3; rho_t = 0.3;
Rr = toeplitz((rho_r * ones(1,nr)).^(0:(nr-1)));
Rt = toeplitz((rho_t * ones(1,nt)).^(0:(nt-1)));
R = kron(Rt, Rr);
C = chol(R).';
H_iid = sqrt(0.5) * (randn(nr, nt) + 1j * randn(nr, nt));
H_corr = reshape(C * H_iid(:), nr, nt);
% 对应的方式1为:
% H_corr = chol(Rr).' * H_iid * chol(Rt);
需要注意的是,使用两种分解方法最终得到的分解结果和相关信道矩阵不同。
方式3---power(field) correlation
从《MIMO-OFDM wireless communications with MATLAB》给出的代码来看,power(field) correlation相当于将相关矩阵的量纲视作功率,与方式2唯一不同的是
C=(Rt⊗Rr)1/2 \boldsymbol C = (\sqrt{\boldsymbol R_t \otimes \boldsymbol R_r})^{1/2} C=(Rt⊗Rr )1/2
C = sqrtm(sqrt(kron(Rt, Rr))); % 其余与方式2代码相同
待解决的问题
- 何时使用平方根分解?何时使用cholesky分解?
- 不同的生成方式各自的适用范围/应用场景是什么?