资源描述
基于Matlab的MIMO通信系统仿真
北京邮电大学
基于Matlab的MIMO通信系统仿真
专业:信息工程
班级:2011211126
姓名:
学号:
目录
一、概述1
1、课题的研究背景1
2、课程设计的研究目的1
3、MIMO系统1
【1】MIMO的三种主要技术1
【2】MIMO系统的概述2
【3】MIMO系统的信道模型2
二、基本原理3
1、基本流程3
2、MIMO原理3
3、空时块码4
三、仿真设计5
1、流程图5
2、主要模块及参数6
3、信源产生6
4、信道编码6
5、调制7
6、AWGN信道7
7、输出统计8
四、 程序块设计8
1、代码8
五、 仿真结果分析12
1、仿真图12
2、 结果分析12
六、重点研究的问题12
七、心得与体会13
八、参考文献13
一、概述
1、背景
MIMO 表示多输入多输出。在第四代移动通信技术标准中被广泛采用,例如IEEE 802.16e (Wimax),长期演进(LTE).在新一代无线局域网(WLAN)标准中,通常用于 IEEE 802.11n,但也可以用于其他 802。11 技术.MIMO 有时被称作空间分集,因为它使用多空间通道传送和接收数据.只有站点(移动设备)或接入点(AP)支持 MIMO 时才能部署 MIMO。
MIMO 技术可以显著克服信道的衰落,降低误码率。该技术的应用,使空间成为一种可以用于提高性能的资源,并能够增加无线系统的覆盖范围。
通常,多径要引起衰落,因而被视为有害因素.然而研究结果表明,对于MIMO系统来说,多径可以作为一个有利因素加以利用。MIMO系统在发射端和接收端均采用多天线(或阵列天线)和多通道,MIMO的多入多出是针对多径无线信道来说的。传输信息流s(k)经过空时编码形成N个信息子流ci(k),I=1,……,N。这N个子流由N个天线发射出去,经空间信道后由M个接收天线接收.多天线接收机利用先进的空时编码处理能够分开并解码这些数据子流,从而实现最佳的处理。
2、课程设计的研究目的
设计一个基于Matlab的MIMO通信系统仿真.
3、MIMO系统
【1】 MIMO的三种主要技术
当前,MIMO技术主要通过3种方式来提升无线传输速率及品质:
(1)空间复用(Spatial Multiplexing):
系统将数据分割成多份,分别在发射端的多根天线上发射出去,接收端接收到多个数据的混合信号后,利用不同空间信道间独立的衰落特性,区分出这些并行的数据流。从而达到在相同的频率资源内获取更高数据速率的目的。
(2)传输分集技术,以空时编码(Space Time Coding)为代表:
在发射端对数据流进行联合编码以减小由于信道衰落和噪声所导致的符号错误率。空时编码通过在发射端增加信号的冗余度,使信号在接收端获得分集增益。
(3)波束成型(Beam Forming):
系统通过多根天线产生一个具有指向性的波束,将信号能量集中在欲传输的方向,从而提升信号质量,并减少对其他用户的干扰.
【2】 MIMO系统的概述
多输入多输出(Multi—input Multi-output;MIMO)是一种用来描述多天线无线通信系统的抽象数学模型,能利用发射端的多个天线各自独立发送信号,同时在接收端用多个天线接收并恢复原信息。该技术最早是由马可尼于1908年提出的,他利用多天线来抑制信道衰落(fading)。根据收发两端天线数量,相对于普通的单输入单输出系统(Single-Input Single-Output,SISO),MIMO此类多天线技术尚包含早期所谓的“智能型天线”,亦即单输入多输出系统(Single—Input Multi—Output,SIMO)和多输入单输出系统(Multiple—Input Single-Output,MISO)。
由于MIMO可以在不需要增加带宽或总发送功率耗损(transmit power expenditure)的情况下大幅地增加系统的数据吞吐量(throughput)及发送距离,使得此技术于近几年受到许多瞩目。MIMO的核心概念为利用多根发射天线与多根接收天线所提供之空间自由度来有效提升无线通信系统之频谱效率,以提升传输速率并改善通信质量.
【3】MIMO系统的信道模型
采用多发送多接收的天线系统, 副发送天线, 副接收天线的MIMO的系统信道模型如图1.3所示.用表示第i根发送天线到第j根接收天线之间的信道衰落系数, 表示i副发送天线发送的信号, 为第j 副接收天线接收到的信号,考虑平坦的衰落信道则它们之间关系写成矩阵的形式为:,
其中定义表示n 发射天线在发射的信号向量; 表示n 接收天线在时间t接收的信号向量;
表示t时刻的加性高斯白噪声向量;
,H为信道衰落系数矩阵.其中的幅度服从Rayleigh分布。
二、基本原理
1、基本流程
2、MIMO原理
核心思想:时间上空时信号处理同空间上分集结合。
时间上空时通过在发送端采用空时码实现: 空时分组、空时格码,分层空时码。
空间上分集通过增加空间上天线分布实现.此举可以把原来对用户来说是有害的无线电波多径传播转变为对用户有利。
MIMO系统模型:
MIMO信道模型
分集与复用
n 根据各根天线上发送信息的差别,MIMO可以分为发射分集技术和空间复用技术.
n 发射分集:在不同的天线上发射包含同样信息的信号(信号的具体形式不一定完全相同),达到空间分集的效果,起到抗衰落的作用
典型代表:空时块码(STBC)
n 空间复用:在不同的天线上发射不同的信息,获得空间复用增益,从而大大提高系统的容量和频谱利用率
典型代表:分层空时码
3、 空时块码
n Alamouti提出了采用两个发射天线和一个接收天线的系统可以得到采用一个发射天线两个接收天线系统同样的分集增益。
n 将每k个输入字符映射为一个矩阵,矩阵的每行对应在p个不同的时间间隔里不同天线上所发送的符号。
n 2*2举例:
三、仿真设计
1、流程图
2、主要模块及参数
3、信源产生
n 产生独立等概二进制信源
n Matlab函数:randsrc()
n 编码块长度:
40-6114(3GPP TS36。212 Table 5。1。3—3)
推荐值:320,1024,2560,5120
利用randsrc()随机产生0与1的数,利用公式将其变成1与—1,即产生信源.
4、信道编码
Option 1:卷积码(3GPP TS25.212 4.2.3.1)
根据要求,卷积码编码器为(3,1,8)编码器,G0=(001101111)转换为八进制为557;G1=(010110011)转换为八进制为663;G1=(011001001)转换为八进制为711.卷积码记忆长度为9。
5、调制
调制模块基本要求:QPSK
QPSK调制的函数可以利用matlab函数库自带的QPSK函数进行编写。但是由于QPSK是M=4进行映射的,所以将随机产生的信源利用reshape函数变成两列,即00映射成,01映射成,10映射成,11映射成。解调时利用matlab自带的demodulate函数。
6、AWGN信道
Matlab实现:randn()
信噪比与AWGN噪声的关系:
由于信源经过QPSK调制,相当于在两条坐标轴的平面(一条实数轴,一条虚数轴)每一个方向都有随机的高斯白噪声分布,然后各自乘以相应的幅度,将得出的噪声加入QPSK调制的信号里,得到的便是经过AWGN信道的信号。
7、输出统计
n 误码率统计
n 输出:
横坐标—SNR Eb/N0 (Eb/N0 vs Es/N0?)
纵坐标—BER(误比特率),BLER(误块率)
n 画图:semilogy(x,y)
四、 程序块设计
1、 代码
[1]、MIMO:
SNR_dB=0:1:30; %信噪比范围
LOOP=500;
%-————-———————---———-——————-———-—--—---——-—
%—-————--—-——-—信源产生——--—-——--—-————-——-—
%--—--———-—-——-——-——--—-—-———--——-———-——-—-
for i=1:length(SNR_dB)
snr=10^(SNR_dB(i)/10); %信噪比转换
sgma=sqrt(8/snr/3); %噪声方差
error0=0;
error1=0;
error2=0;
error3=0;
for a=1:LOOP
N=2560; %仿真序列长度
S=randsrc(1,N,[0,1]); %二进制序列信源 产生n个随机数
%-—-—-—-—-——-———-———————-—-————-—-——-----—-—
%——-—-————-——有信道编码—--——————-—-—---———--—
%—-——----——-—-——-—-—-——-----—————-——-——-—-——
S00=convolutionalcode(S);
%———-————-————-QPSK调制-——————-—-——---—---——
s=QPSK(S00);
s0=zeros(1,3*N/4); %将调制后的信息奇偶拆分成两个信息以进行MIMO发射
s1=zeros(1,3*N/4);
for b1=1:2:(3*N/2)
s0(ceil(b1/2))=s(b1);
s1(ceil(b1/2))=s(b1+1);
end
N1=size(s0,2);
%-—--—---有信道编码(2发2收)--——-——---—--——-—
h0=sqrt(0。5)。*(randn(1,N1)+1i。*randn(1,N1)); %设置信道冲激响应
h1=sqrt(0.5).*(randn(1,N1)+1i。*randn(1,N1));
h2=sqrt(0。5)。*(randn(1,N1)+1i。*randn(1,N1));
h3=sqrt(0。5)。*(randn(1,N1)+1i。*randn(1,N1));
%—-—-—-接收到的信号(冲激响应与发送序列卷积)-——
R0=h0。*s0+h1。*s1; %接收信号矢量(不含高斯噪声)
R1=-conj(s1)。*h0+h1.*conj(s0); %移动通信P166
R2=h2。*s0+h3.*s1;
R3=-conj(s1).*h2+h3.*conj(s0);
%通过AWGN信道加入噪声后的冲击序列
r0=(R0+sgma.*(randn(1,N1)+1i*randn(1,N1)));%接收信号矢量(有噪声)
r1=(R1+sgma。*(randn(1,N1)+1i*randn(1,N1)));
r2=(R2+sgma。*(randn(1,N1)+1i*randn(1,N1)));
r3=(R3+sgma。*(randn(1,N1)+1i*randn(1,N1)));
s_0=conj(h0).*r0+h1.*conj(r1)+conj(h2).*r2+h3。*conj(r3);%STBC空时译码
s_1=conj(h1)。*r0-h0。*conj(r1)+conj(h3).*r2—h2.*conj(r3);
for l0=1:3*N/4 %将接收到的信号合并
Y0(2*l0-1)=s_0(l0);
Y0(2*l0)=s_1(l0);
end
y0=DEQPSK(Y0); %QPSK解调
m0=viterbi(y0); %维特比译码
[n0,e0]=biterr(m0,S);%计算误比特率
error0=error0+n0;
%有信道编码2发1收
hr0=sqrt(0。5).*(randn(1,N1)+1i。*randn(1,N1)); %瑞利信道函数
hr1=sqrt(0。5)。*(randn(1,N1)+1i。*randn(1,N1));
Rr0=hr0.*s0+hr1.*s1; %接收信号矢量(不含高斯噪声)
Rr1=—conj(s1)。*hr0+hr1。*conj(s0);
rN0=(Rr0+sgma.*(randn(1,N1)+1i*randn(1,N1)));%接收信号矢量(含复高斯噪声)
rN1=(Rr1+sgma。*(randn(1,N1)+1i*randn(1,N1)));
sr_0=conj(hr0).*rN0+hr1。*conj(rN1);%STBC空时译码
sr_1=conj(hr1)。*rN0—hr0。*conj(rN1);
for l1=1:3*N/4 %将接收到的信号合并
Y1(2*l1-1)=sr_0(l1);
Y1(2*l1)=sr_1(l1);
end
y1=DEQPSK(Y1); %QPSK解调
m1=viterbi(y1); %维特比译码
[n1,e1]=biterr(m1,S);%计算误比特率
error1=error1+n1;
%———-————---———---——-———-—--
%无信道编码
%—--———————————-—--——-—————-
sn=QPSK(S); %QPSK调制
for b2=1:2:(N/2) %将调制后的信息奇偶拆分成两个信息以进行MIMO发射
sn0(ceil(b2/2))=sn(b2);
sn1(ceil(b2/2))=sn(b2+1);
end
N2=size(sn0,2);
%无信道编码(2发2收)
hn0=sqrt(0。5).*(randn(1,N2)+1i.*randn(1,N2)); %瑞利信道函数
hn1=sqrt(0.5)。*(randn(1,N2)+1i。*randn(1,N2));
hn2=sqrt(0.5).*(randn(1,N2)+1i.*randn(1,N2));
hn3=sqrt(0。5).*(randn(1,N2)+1i。*randn(1,N2));
Rn0=hn0.*sn0+hn1.*sn1; %接收信号矢量(无噪声)
Rn1=—conj(sn1).*hn0+hn1.*conj(sn0);
Rn2=hn2。*sn0+hn3.*sn1;
Rn3=-conj(sn1).*hn2+hn3.*conj(sn0);
rn0=(Rn0+sgma。*(randn(1,N2)+1i*randn(1,N2))); %接收信号矢量(有噪声)
rn1=(Rn1+sgma。*(randn(1,N2)+1i*randn(1,N2)));
rn2=(Rn2+sgma。*(randn(1,N2)+1i*randn(1,N2)));
rn3=(Rn3+sgma。*(randn(1,N2)+1i*randn(1,N2)));
sn_0=conj(hn0)。*rn0+hn1。*conj(rn1)+conj(hn2)。*rn2+hn3.*conj(rn3);
sn_1=conj(hn1)。*rn0—hn0。*conj(rn1)+conj(hn3)。*rn2-hn2。*conj(rn3);
for l2=1:N/4 %将接收到的信号合并
Y2(2*l2—1)=sn_0(l2);
Y2(2*l2)=sn_1(l2);
end
y2=DEQPSK(Y2); %QPSK解调
y2=y2';
[n2,e2]=biterr(y2,S);%计算误比特率
error2=error2+n2;
%无信道编码(2发1收)
hN0=sqrt(0。5).*(randn(1,N2)+1i。*randn(1,N2)); %瑞利信道函数
hN1=sqrt(0。5)。*(randn(1,N2)+1i.*randn(1,N2));
RN0=hN0。*sn0+hN1。*sn1; %发射序列与接收序列的卷积
RN1=—conj(sn1)。*hN0+hN1。*conj(sn0);
rN0=(RN0+sgma。*(randn(1,N2)+1i*randn(1,N2))); %接收信号矢量(有噪声)
rN1=(RN1+sgma.*(randn(1,N2)+1i*randn(1,N2)));
sN_0=conj(hN0)。*rN0+hN1。*conj(rN1);
sN_1=conj(hN1)。*rN0—hN0.*conj(rN1);
for l3=1:N/4 %将接收到的信号合并
Y3(2*l3—1)=sN_0(l3);
Y3(2*l3)=sN_1(l3);
end
y3=DEQPSK(Y3); %QPSK解调
y3=y3’;
[n3,e3]=biterr(y3,S);%计算误比特率
error3=error3+n3;
end
BER0(i)=error0/(LOOP*N);
BER1(i)=error1/(LOOP*N);
BER2(i)=error2/(LOOP*N);
BER3(i)=error3/(LOOP*N);
end
semilogy(SNR_dB,BER0,’—b+');
hold on;
semilogy(SNR_dB,BER1, ’r’);
grid on;
semilogy(SNR_dB,BER2,’--g’);
grid on;
semilogy(SNR_dB,BER3,'-.k’);
grid on;
legend(’2Tx2R:卷积信道编码’,'2Tx1R有信道编码’,’2Tx2R无信道编码',’2Tx1R无信道编码’);
xlabel('SNR/dB’);
ylabel(’BER’);
[2]、viterbi
function decodingsequence=viterbi(m)
trel = poly2trellis(9,[557,663,711]);
tblen=7; %卷积码记忆深度
decodingsequence=vitdec(m,trel,tblen,’trunc’,’hard');
decodingsequence=decodingsequence’;
[3]、QPSK
function modulatingsignal=QPSK(s)
s=s’;
H=modem。pskmod(’M',4,’InputType', 'Bit’);
modulatingsignal=modulate(H,s);
modulatingsignal=modulatingsignal’;
[4]、DEQPSK
function demodulatingsignal=DEQPSK(s)
h= modem。pskdemod(’M',4,’OutputType’, ’Bit');
s=s’;
demodulatingsignal=demodulate(h,s);
[5]、convolutionalcode
%卷积码编码器
%msg信号
%constrainlength约束长度(寄存器数目加一)
%codegenerator冲击响应g(转换成八进制)
function code=convolutionalcode(msg)
constrainlength=9;
trel = poly2trellis(constrainlength,[557,663,711]);
code = convenc(msg,trel);
五、 仿真结果分析
1、仿真图
2、 结果分析
由误码率仿真图看出在四种信道编码的方法中:
横坐标:信噪比 纵坐标:误码率
n 信噪比在零到五之间时四种方式的误码率都差不多.
n 在信噪比大于五之后2x2卷积信道编码的误码率最低、仿真性能最好。
n 信噪比大于8左右时2x1无信道编码的误码率最高、仿真性能最差。
n 2x1有信道编码和2x2无信道编码的仿真效果差不多。
n 有卷积码的误码率比无卷积码的低,因为卷积码有纠错功能。
六、重点研究的问题
七、心得与体会
这次是我上大学以来觉得最为困难的一次小学期,这一次的任务综合了信道系统编码和通信原理的知识与Matlab软件的应用。以前几乎没用过matlab,所以刚看到这个题目时我简直觉得我从下手。Ppt看了好多遍也不知道到底做什么.通过翻阅通原课本、上网查阅资料,了解ppt上给出的每个函数的功能与用途,经过两个星期终于完成了本次任务.在这次任务重,我碰到了许许多多的问题,其中最复杂的部分就是调制部分的代码与瑞利信道函数部分的代码.借助网上找的资料和在同学的帮助下才完成了这次的任务。这次小学期让我获益匪浅,首先我温习了通信原理的知识,而且学习了matlab的一些的用法.最开始的迷茫到最后的完成,感觉万事开头难,只要有足够的决心与毅力,没有什么是完成不了的。希望下一次我可以做的更好。
八、参考文献
[1] 吴伟陵,牛凯,《移动通信原理》,电子工业出版社。
[2] 张梧桐. MIMO通信技术导论[J]。 科学周刊, 2013(5).
[3] 周炯槃、庞沁华、续大我、吴伟陵、杨鸿文《通信原理》,北京邮电大学出版社
[4] 啜钢、王文博、常永宇、全庆一《移动通信原理与系统》,北京邮电大学出版社
=+
13
展开阅读全文