基于alamouti的STBC空时分组码误码率matlab仿真

Posted fpga和matlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于alamouti的STBC空时分组码误码率matlab仿真相关的知识,希望对你有一定的参考价值。

up目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

        空时分组码是一种在无线通信中使用的技术,用于在多个天线上发送数据流的多个副本,并利用各种接收的数据版本来提高数据传输的可靠性。 传输信号必须穿过具有散射,反射,折射等的潜在困难环境,然后可能被接收器中的热噪声进一步破坏,这意味着一些接收到的数据副本将比其他更好。 这种冗余导致能够使用一个或多个接收到的副本来正确解码接收信号的机会更高。 实际上,空时编码以最佳方式组合所接收信号的所有副本,以尽可能多地从每个副本中提取信息。

        Alamouti编码的基础场景是两根发射天线,一根接收天线,并且发射机不知道信道,那么该如何发射。实现方式:一次性发送两个数据。因为只有一根接收天线,所以要再发送一次,接收端才能正常接收。

发射信号编码矩阵(其中x i x_ix i表示第i ii个发送信息块,第i ii行是第i ii个天线的发送信号)

两个信号都分别经过了两个信道,获得了分集的效果。方程改写为:
        基于Alamouti提出的BPSK调制下空时分组码在Rayleigh衰落信道中的码性能原理,推导出高阶(M ary)调制下Rician衰落信道中空时分组码的符号差错率的最小距离球界,并进行计算机仿真分析了两信道下引入空时分组码的多天线系统中发射和接收天线的分集增益,发射天线数量的"地板效应"以及Rician因子K对符号差错性能的影响。 

       这是一个非常特殊的STBC。它是唯一达到率-1的正交STBC。也就是说,它是唯一能够在不需要牺牲数据速率的情况下实现其全部分集增益的STBC。严格地说,这仅适用于复杂的调制符号。由于几乎所有的星座图都依赖于复数,因此该属性通常使Alamouti的代码比高阶STBC具有显着的优势,即使它们实现了更好的错误率性能。有关详细信息,请参阅“速率限制”。

        Alamouti在1998年提出的建议的重要性在于它首次证明了一种编码方法,它能够在接收机上实现线性处理的完全多样性。早期关于发射分集的提议需要处理方案,其与发射天线的数量成指数地缩放。此外,它是第一个具有这种能力的开环发射分集技术。随后对Alamouti概念的概括已经对无线通信行业产生了巨大影响。

        最初引入的STBC和通常研究的STBC是正交的。 这意味着STBC被设计成使得表示从编码矩阵中取出的任何列对的矢量是正交的。 其结果是接收器处的简单,线性,最佳解码。 其最严重的缺点是,除了满足此标准的一个代码之外的所有代码都必须牺牲其数据速率的某些比例(参见Alamouti的代码)。

        此外,存在准正交STBC,其以符号间干扰(ISI)为代价实现更高的数据速率。 因此,它们的差错率性能受正交速率1 STBC之一的限制,正交速率1 STBC由于正交性而提供ISI自由传输。

二、核心程序

..................................................................
for ii = 1:length(Eb_N0_dB)
    ii
    % Transmitter
    ip = rand(1,N)>0.5; % generating 0,1 with equal probability
    s = 2*ip-1; % BPSK modulation 0 -> -1; 1 -> 0

    % Alamouti STBC 
    sCode = 1/sqrt(2)*kron(reshape(s,2,N/2),ones(1,2)) ;

    % channel
    h = 1/sqrt(2)*[randn(nRx,N) + j*randn(nRx,N)]; % Rayleigh channel
    n = 1/sqrt(2)*[randn(nRx,N) + j*randn(nRx,N)]; % white gaussian noise, 0dB variance

    y = zeros(nRx,N);
    yMod = zeros(nRx*2,N);
    hMod = zeros(nRx*2,N);
    for kk = 1:nRx
.............................................................................

    end

    % equalization 
    hEqPower = sum(hEq.*conj(hEq),1);
    yHat = sum(hEq.*yMod,1)./hEqPower; % [h1*y1 + h2y2*, h2*y1 -h1y2*, ... ]
    yHat(2:2:end) = conj(yHat(2:2:end));

    % receiver - hard decision decoding
    ipHat = real(yHat)>0;

    % counting the errors
    nErr(ii) = size(find([ip- ipHat]),2);

end
...................................................................................

close all
figure
semilogy(Eb_N0_dB,theoryBer_nRx1,'bp-','LineWidth',2);
hold on
semilogy(Eb_N0_dB,theoryBerMRC_nRx2,'kd-','LineWidth',2);
semilogy(Eb_N0_dB,theoryBerAlamouti_nTx2_nRx1,'c+-','LineWidth',2);
semilogy(Eb_N0_dB,simBer,'mo-','LineWidth',2);
axis([0 25 10^-5 0.5])
grid on
legend('theory (nTx=1,nRx=1)', 'theory (nTx=1,nRx=2, MRC)', 'theory (nTx=2, nRx=1, Alamouti)', 'sim (nTx=2, nRx=2, Alamouti)');
xlabel('Eb/No, dB');
ylabel('Bit Error Rate');
title('BER for BPSK modulation with 2Tx, 2Rx Alamouti STBC (Rayleigh channel)');
up106

三、测试结果

以上是关于基于alamouti的STBC空时分组码误码率matlab仿真的主要内容,如果未能解决你的问题,请参考以下文章

MIMO通信系统中对比Alamouti和MRC的误码率性能matlab仿真

STBCAlamouti,STBC误码率仿真

写作MIMO,LDPC误码率仿真

误码率仿真基于matlab LDPC编译码误码率仿真含Matlab源码 2079期

误码率仿真基于matlab LDPC编译码误码率仿真含Matlab源码 2079期

LDPC/STBC基于LDPC/STBC编译码的图像传输系统的MATLAB仿真