m基于matlab的MIMO信道容量分析,对比了不同天线数量;非码本预编码SVD,GMD;码本预编码DFT,TxAA以及空间分集

264 阅读3分钟

1.算法概述

·MIMO信道容量

 

平均功率分配的MIMO信道容量:通过Matlab仿真在加性高斯白噪声情况下的SISO (11)、SIMO(16)、MISO(41)、MIMO(33)、MIMO(4*4)系统的信道容量进行分析。

 

·关于空间复用

 

主要通过基于码本的预编码技术和非码本的预编码技术:

 

码本的预编码技术:基于TxAA模式的码本、基于DFT的码本

 

    这里主要涉及到码本的设计,

 

非码本的预编码技术:SVD,GMD,UCD技术。

 

·把空间分集

 

SFBC和FSTD-SFBC。就是空频编码和频率切换分集与空频编码结合的,对这两种方式进行仿真。

 

    整个系统的设计流程:

 

·步骤一:

 

对不同的天线数目的MIMO系统进行仿真,主要包括:

 

SISO (11)、SIMO(14)、MISO(41)、MIMO(22)、MIMO(4*4),对上面的五个部分进行仿真,获得系统的信道容量进行仿真。

 

·步骤二:

 

空间复用,在步骤一的基础上,选择性能较好的一组仿真环境,然后在此基础上,进行基于非码本的预编码和基于码本的预编码。分别进行性能对比分析。

 

非码本的预编码:SVD,GMD;

 

码本的预编码:DFT,基于TxAA模式的码本;

 

·步骤三:

 

空间分集,重点仿真2发一收的SFBC(空频编码)和FSTD-SFBC(频率切换分集与空频编码),对两种方式进行仿真。

 

1步骤一:对不同的天线数目的MIMO系统进行仿真:

 

主要包括:SISO (11)、SIMO(14)、MISO(41)、MIMO(22)、MIMO(4*4),对上面的五个部分进行仿真,获得系统的信道容量进行仿真。

 

2.仿真效果预览

matlab2010b仿真

 

1步骤一:对不同的天线数目的MIMO系统进行仿真:

 

主要包括:SISO (11)、SIMO(14)、MISO(41)、MIMO(22)、MIMO(4*4),对上面的五个部分进行仿真,获得系统的信道容量进行仿真。

 

得到的仿真结果如下所示:

 

1.png

2.png  

2步骤二:空间复用:

 

在步骤一的基础上,选择性能较好的一组仿真环境,然后在此基础上,进行基于非码本的预编码和基于码本的预编码。分别进行性能对比分析。

 

非码本的预编码:SVD,GMD;

 

码本的预编码:DFT,基于TxAA模式的码本;

 

2.1破零均衡,MMSE均衡

 

3.png

 

·SVD分解的预编码

 

4.png

 

·GMD分解的预编码

 

5.png

 

3码本的预编码:DFT,基于TxAA模式的码本;

 

·DFT码本

 

6.png

 

·TxAA码本

 

7.png

 

空间分集:

 

仿真2发一收的SFBC(空频编码)和FSTD-SFBC(频率切换分集与空频编码),对两种方式进行仿真。

 

3.1 SFBC(空频编码)

 

8.png

 

3.2  FSTD-SFBC(频率切换分集与空频编码)

 

9.png

 

3.MATLAB部分代码预览 `SNR = 0:2:10;

%OFDM参数

fs1         = 1e6;               %OFDM采样频率

fs2         = 0.8e6;               %OFDM采样频率

Num_Carrier = 128;               %子载波个数

GIlen       = 160;               %保护间隔长度

CPlen       = GIlen - Num_Carrier;     %循环前缀长度

fm          = 66;                %频偏

d           = 1;                 %时偏

M           = 6;                 %多径数量

Stime       = 1000;

 

for i = 1:length(SNR)

    BER_sum = 0;

    for k = 1:Stime

        i

        k

        %产生随机的BPSK信号

        X   = 2*randint(1,Num_Carrier) - 1;     

        S_receive2 = func_FSTD_SFBC(X,SNR(i),fm,d,M,fs1,fs2,Num_Carrier,GIlen,CPlen);

        [bit,ratio]= biterr((X+1)/2,S_receive2);

        BER_sum = BER_sum + ratio;

    end

    

    BER(i) = BER_sum/Stime;

end

01-43m`