MIMO信道容量计算.docx
实验一: MIMO 信道容量计算
实验学时:3
实验类型:(演示、验证、综合、设计、√研究)
实验要求:(√必修、选修) 一、实验目的
通过本实验的学习,理解和掌握信道容量的概念和物理意义;了解多天线系统信道容量的计算方法;采用计算机编程实现经典的注水算法。 二、实验内容
MIMO 信道容量; 注水算法原理;
采用计算机编程实现注水算法。 三、实验组织运行要求
以学生自主训练为主的开放模式组织教学 四、实验条件
(1)微机
(2)MATLAB 编程工具 五、实验原理、方法和手段
MIMO (MIMO,Multiple Input Multiple Output )技术利用多根天线实现多发多收,充分利用了空间资源,在有限的频谱资源上可以实现高速率和大容量,已成为4G 通信系统以及未来无线通信系统的关键技术之一。
图1平坦衰弱MIMO 信道模型
1.MIMO 信道模型
MIMO 指多输入多输出系统,当发送信号所占用的带宽足够小的时候,信道可以被认为是平坦的,即不考虑频率选择性衰落。平坦衰弱的MIMO 信道可以用一个
R T
n n ?的复数矩阵H 描述:
111212122212T 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 信道容量可表示为:
()()
logdet 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
max log det ...
T s t Tr 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
,需先确定1v ,它满足
11max ,0r
i T
i P v α=??-= ???∑ (10)
注意左边为1v 的递增函数,因此满足(10)的1
v 唯一。
找到满足(10)的1
v 的方法可形象地称为注水(warter-filling )。这是因为,我们可以将i α看做是第i 片区域的水平线,然后对整个区域注水,使
其具有深度1/v ,如图1所示。所需总水量为
{}
1
max 0,1/n
i i v
α=-∑,不断注水,直至总水量为
T
P ,。第i 个区域的水位深度即为最优的
*
i x 。
*
1
v
图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; 输出