实验一:MIMO信道容量计算
实验学时:3
实验类型:(演示、验证、综合、设计、√研究)
实验要求:(√必修、选修)
一、实验目的
通过本实验的学习,理解和掌握信道容量的概念和物理意义;了解多天线系统信道容量的计算方法;采用计算机编程实现经典的注水算法。
二、实验内容
MIMO信道容量;
注水算法原理;
采用计算机编程实现注水算法。
三、实验组织运行要求
以学生自主训练为主的开放模式组织教学
四、实验条件
(1)微机
(2)MATLAB编程工具
五、实验原理、方法和手段
MIMO(MIMO,Multiple Input Multiple Output)技术利用多根天线实现多发多收,充分利用了空间资源,在有限的频谱资源上可以实现高速率和大容量,已成为4G通信系统以及未来无线通信系统的关键技术之一。
图1平坦衰弱MIMO信道模型
1.MIMO 信道模型
MIMO 指多输入多输出系统,当发送信号所占用的带宽足够小的时候,信道可以被认为是平坦的,即不考虑频率选择性衰落。平坦衰弱的MIMO 信道可以用一个R T n n ?的复数矩阵H 描述:
1112
12122
212
T T R T R R n n n n n n h h h h h h h h h ??
?
?
??
=?
???
????
H (1) 其中T n 为发送端天线数,R n 为接收端天线数,H 的元素,j i h 表示从第i 根发射天线到第j 根接收天线之间的空间信道衰落系数。
窄带MIMO 信道模型(如图1所示)可以描述为:
=+y Hx n (2)
其中,x 为发送信号;y 为接收信号;n 为加性高斯白噪声。
2.MIMO 信道容量
假设n 服从均值为0,协方差为单位阵的复高斯分布。根据信道容量
()
max{(;)}p X C I X Y =的定义,可以证明当()p x 服从高斯分布时,达到MIMO 信道
容量。令x 的协方差矩阵为x R ,则MIMO 信道容量可表示为:
()()log det H C +x x R I HR H (3)
其中上标‘H ’表示复共轭,I 为单位阵,det 表示取行列式。()C x R 表示单位带宽下的MIMO 信道传输速率,单位为Nat/sec 。
发射机的传输功率可以表示为:
{}
(){}{}()
()
2
H H
P E E Tr Tr E Tr ===x x
xx xx R
其中,x 表示向量的模,Tr 表示取矩阵的迹,E 表示求期望。
假设发射机的最大传输功率为T P ,则功率约束下的MIMO 信道容量计算问题可以描述为:
()
()0
max log det ...
H T s t Tr P ≥+≤x x R x I HR H R (4)
即在功率约束下找到x 的最佳分布使得信道容量最大。此处0≥x R 表示x R 为半正定矩阵。
3.奇异值分解及问题转化
将信道矩阵进行奇异值分解,即H 可分解为H =H UDV ,其中U 和V 为酉矩阵满足
;;;H H H H ====UU I U U I V V I VV I ,
D 为R T n n ?的矩形对角矩阵。
利用恒等式()()det det +=+I AB I BA 和酉矩阵性质H =U U I ,得到
()()()
()
det det det det H H H H H H H
H H H
+=+=+=+x x x x
I UDV R VD U I U UDV R VD I DV R VD
I D DV R V
(5)
利用恒等式()()Tr Tr =AB BA 和酉矩阵性质H =V V I ,得到
()()()H H Tr Tr Tr ==x x x R VV R V R V (6)
定义H ΛD D ,利用(5)和(6),问题(4)可写为:
()()0
max log det ...
H
H H
T s t Tr P ≥+≤x x V R V x I ΛV R V V R V (7)
经过变量替换,令H
x X V R V ,问题(7)
(i.e., (4))等价为
()
()0
m a x l o g d e t ...
T
s t T r P ≥+≤
X I ΛX X (8)
根据Hadamard 不等式(参考《信息论基础》Thomas M. Cover ,定理16.8.2),问题(8)的最优解X 必为对角阵。因此问题(8)可简化为
{}01
1
max log 1...
i r
i x i i r
i
T i x s t
x
P α≥==??+ ???
≤∑∑ (9)
其中,r 为H (或者Λ)的秩,i x 和
1
i
α分别为X 和Λ的对角元素。
4.注水(water-filling )算法 求解问题(9)
对问题(9)使用拉格朗日乘子法,可知最优解必须满足:
1
1max ,0,
1,2...i i r
i
T
i x i r
v x
P α=??
=-= ???
=∑
其中μ为拉格朗日乘子。为求得i x ,需先确定1
v
,它满足
1
1max ,0r
i T i P
v α=??-= ???∑ (10) 注意左边为1v 的递增函数,因此满足(10)的1
v
唯一。
找到满足(10)的1
v
的方法可形象地称为注水(warter-filling )。这是因为,
我们可以将i α看做是第i 片区域的水平线,然后对整个区域注水,使其具有深度
1/v ,如图1所示。所需总水量为{}
1max 0,1/n
i i v α=-∑,不断注水,直至总水量
为T P ,。第i 个区域的水位深度即为最优的*
i x 。
*
1v
图2 注水算法图示。每片区域的高度为i α。注水总量为T P ,对整个区域
注水使其高度达到*
1/v 。每片区域上水的高度(阴影部分所示)即为最优的*i x 。
六、实验数据及具体步骤
1)随机产生H ,每个信道系数服从均值为0,方差为1的高斯分布(对Rayliegh 分布)
2) 奇异值分解H =H UDV (利用matlab SVD 函数) 3)计算H
=ΛD D 4)注水法求解问题(9)
5)计算H =x R VXV ,根据(3)计算容量(或者根据问题(9)的最优值确定最大容量)。
七、实验程序和结果
一、有一并联高斯加性信道,各子信道的方差为d 12=0.1,d 22=0.2,d 32=0.3,d 42=0.4,d 52=0.5,d 62=0.6,d 72=0.7,d 82=0.8,d 92=0.9,d 102=1.0。 1、若输入的信号总功率P=5 程序
L=input('子信道数目 L='); %输入子信道数目
d=input('各子信道噪声方差 d='); %输入各信道的噪声方差 P=input('输入信号总功率 P='); %输入信号总功率 D=sum(d); %各子信道的方差和 Pav=(P+D)*1.0/L; %求平均输出频率 i=1;
p=ones(1,L); %功率初始值
boolean=1;
c=0; %关闭的信道数量
while(boolean)
while(i<=L)
if(Pav p(i)=0; D=D-d(i); c=c+1; end i=i+1; end if(c==0) %当所有信道满足时退出循环 break; end if(i==L+1) %每个信道和Pav对比一遍后初始化各值,并重新计算Pav i=1; L=L-c; c=0; Pav=(P+D)*1.0/L; end end L=length(ai); for i=1:L if(p(i)~=0) p(i)=Pav-d(i); %计算各子信道分配功率 end end C=0; for i=1:L C=C+1/2*log2(1+p(i)/d(i)); end p C输出 >> WF 子信道数目L=10 各子信道噪声方差d=[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0] 输入信号总功率P=5 p = Columns 1 through 8 0.9500 0.8500 0.7500 0.6500 0.5500 0.4500 0.3500 0.2500 Columns 9 through 10 0.1500 0.0500 C = 6.0661 >> WF 子信道数目L=10 各子信道噪声方差d=[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0] 输入信号总功率P=1 p = Columns 1 through 8 0.4000 0.3000 0.2000 0.1000 0 0 0 0 Columns 9 through 10 0 0 C = 2.3514 二、实验题目 clear all; nt=[2 4 8]; nr=[2 4 8]; v=0; %给定1/v初始值(也就是这里的v) for count=1:3 y=0; for PTdb=0:5:30 y=y+1; PT=10^(PTdb/10); %把PT转化为10进制 for k=1:1000 H=sqrt(1/2)*complex(randn(nr(count),nt(count)),randn(nr(count),nt(count))); %随机产生H ,每个信道系数服从均值为0,方差为1的高斯分布(对Rayliegh分布)(sqrt(1/2)为了使模也为1) [U,D,VH]=svd(H); %奇异值分解H=U*D*VH A=D'*D; %求DH*D ai=sort((1./diag(A))'); %求ai并按从小到大排序 L=length(ai); AI=sum(ai); %各子信道的方差和 Pav=(PT+AI)/L; %求平均输出频率 i=1; p=ones(1,L); %功率初始值 boolean=1; ct=0; %关闭的信道数量 while(boolean) while(i<=L) if(Pav p(i)=0; AI=AI-ai(i); ct=ct+1; end i=i+1; end if(ct==0) %当所有信道满足时退出循环 break; end if(i==L+1) %每个信道和Pav对比一遍后初始化各值,并重新计算Pav i=1; L=L-ct; ct=0; Pav=(PT+AI)/L; end end for i=1:L if(p(i)~=0) p(i)=Pav-ai(i); %计算各子信道分配功率 end end X=diag(p); Rx=VH'*X*VH; %计算Rx=V*X*VH T=H*Rx*H'; L=length(ai); I=diag(ones(1,L)); c(k)=log2(det(T+I)); % I为单位阵,det表示取行列式。c表示单位带宽下的MIMO信道传输速率,单位为Nat/sec。 end C(y)=real(sum(c))/1000; pt(y)=PTdb; end switch count case 1 plot(pt,C,'r-*'); hold on; case 2 plot(pt,C,'y-p'); hold on; case 3 plot(pt,C,'g-s'); hold on; end end legend('nt=nr=2','nt=nr=4','nt=nr=8'); title('MIMO信道容量与功率关系图'); xlabel('功率/dB'); ylabel('容量/Nat/sec'); grid on; 输出 八、实验心得 在本次的实验中,我了解了注水法的思想,并且学会了如何使用注水法来求解MIMO 的信道容量和子信道的分配功率。注水法的思想:我们可以将ai 看做是第i 片区域的水平线,然后对整个区域注水,使其具有深度1/v 。所需总水量为 {}1 max 0,1/n i i v α=-∑, 不断注水,直至总水量为PT 。第i 个区域的水位深度即为最优的xi 。在解决书上的问题时,我们要考虑到每次平均功率都要重算,并且要知道如何找到该关闭的子信道。实验题目时我们要注意一些数据的初始值不能少。