m基于STBC的MIMO通信系统性能仿真和信道容量仿真

时间:2022-12-10 21:54:10

1.算法概述 空时分组编码STBC(Space Time Block Coding)用在无线通信中传输一个数据流的多个拷贝。通过许多天线来产生数据的多种接收版本,提高数据传输的可靠性。接收机接收到的数据拷贝中,存在一些比其它拷贝“更好”的拷贝。而这种冗余导致有更高机会使用一个或更多接收到数据拷贝来正确的解码接收到的数据。实际上,STBC联合所有接收到的信号的拷贝以一种最佳的方式从它们中尽可能地吸取更多有用的数据。

   空时编码在不同天线所发送的信号中引入时间和空间的相关性,从而不用牺牲带宽就可以为接收端提供不编码系统所没有的分集增益和编码增益。空时编码的基本工作原理如下:从信源给出的信息数据流,到达空时编码器后,形成同时从许多个发射天线上发射出去的矢量输出,称这些调制符号为空时符号(STS)或者空时矢量符(STVS)。与通常用一个复数表示调制符号类似(复的基带表示) ,一个空时矢量符STVS可以表示成为一个复数的矢量,矢量中数的个数等于发射天线的个数。

   MIMO技术实质上是为系统提供了空间复用增益和空间分集增益。

空间复用就是在接收端和发射端使用多副天线,充分利用空间传播中的多径分量,在同一个频带上使用多个数据通道(MIMO子信道)发射信号,从而使得容量随着天线数量的增加而线性增加。这种信道容量的增加不需要占用额外的带宽,也不需要消耗额外的发射功率,因此是提高信道和系统容量一种非常有效的手段。

m基于STBC的MIMO通信系统性能仿真和信道容量仿真

    利用 h (τk, t) 定义在时间 t 和时延 τk 处的信道脉冲响应,可以采用一个线性时变系统作为无线信道的模型,其中 k = 0,...,L-1,L 为多径编号。用 hi,j (τk, t) 表示第 j 个发射天线与第 i 个接收天线之间的脉冲响应,用 Nr x Nt 矩阵 h (τk,t) 表示具有 Nt 个发射天线和 Nr 个接收天线的 MIMO 信道:

m基于STBC的MIMO通信系统性能仿真和信道容量仿真

此外,假设信号 sj(t) 是从第 j 个发射天线发出,在第 i 个接收天线处接收的信号 yj(t) 给出如下:

m基于STBC的MIMO通信系统性能仿真和信道容量仿真 对于一个理想的 MIMO 信道,每个 hi,j (为方便起见,省略 τk,t) 的性质都与 SISO 无线信道相同,其中,所有信道都相互独立而且不相关。在实际 MIMO 信道中,信道之间存在一定程度的相关性,因此,会直接影响 MIMO 系统能够实现的分集增益。

    MIMO信道的信道容量在很大程度上取决于天线之间的相关性和MIMO信道矩阵的满秩情况。如前所述,对于收发端都具有相关性的MIMO信道.为了分析和比较天线的相关性对信道容量的具体影响,这里以2*2的信道为例进行仿真,相关系数分别取为0,0.2,0.5,0.9,结果如图XX所示。从图中可以看出,天线的相关系数越大,对信道容量的影响越大,而且信噪比越大,造成的损失越大。

2.仿真效果预览 matlab2022a仿真结果如下:

m基于STBC的MIMO通信系统性能仿真和信道容量仿真m基于STBC的MIMO通信系统性能仿真和信道容量仿真m基于STBC的MIMO通信系统性能仿真和信道容量仿真

3.核心MATLAB预览

for(k = 1 : 2)
    nt = nt_V(k);
    nr = nr_V(k);
    for(i = 1 : length(SNR_V))
        Pt = N0 * SNR_V(i);
        for(j = 1 : Iteration)
            H = random('rayleigh',1,nr,nt);
            [S V D] = svd(H);
            landas(:,j)  = diag(V);
            [Capacity(i,j) PowerAllo] = WaterFilling_alg(Pt,landas(:,j),B,N0);
        end
    end
 
    f1 = figure(1);
    hold on
    plot(SNR_V_db,mean(Capacity'),notation(k,:),'color',color(k,:))
    
   
    hold on
    [y,x] = hist(reshape(landas,[1,min(nt,nr)*Iteration]),100);
    plot(x,y/Iteration,'color',color(k,:));
    clear landas
end
f1 = figure(1)
legend_str = [];
for( i = 1 : length(nt_V))
    legend_str =[ legend_str ;...
        {['nt = ',num2str(nt_V(i)),' , nr = ',num2str(nr_V(i))]}];
end
01_005_m