MSCBSC 移动通信论坛
搜索
登录注册
网络优化工程师招聘专栏 4G/LTE通信工程师最新职位列表 通信实习生/应届生招聘职位

  • 阅读:3955
  • 回复:1
LTE在SIMO模式下的仿真测试
destild
新手上路
鎵嬫満鍙风爜宸查獙璇


 发短消息    关注Ta 

积分 -742
帖子 60
威望 13021 个
礼品券 0 个
专家指数 -1042
注册 2017-1-19
专业方向 
回答问题数 0
回答被采纳数 0
回答采纳率 0%
 
发表于 2019-01-13 18:42:22  只看楼主 

原文 Understanding LTE with MATLAB  ,作者Houman Zarrinkoub,本文是对于该书的翻译,书中的专业性词汇给出了英文原文,图和表的排版都是参考原文,翻译不准确的地方请读者多多包涵。本文仅限于个人学习,研究,交流,不得用于其他商业用途!


5.18.2 SIMO模式

SIMO模式可以看作是SISO模式的一般情况。LTE传输模式1通常被视为SIMO传输模式。在这种模式下,信号处理链与SISO的情况非常相似,只是它使用多个(在我们的功能中为两个或四个)接收天线。在接收器上使用多个天线可以让我们利用接收分集。最大比值组合接收分集(MRC)比单输入单输出(SISO)系统具有更好的误码率性能。建模接收分集不会改变发射机,但会对信道建模和接收机操作带来许多变化。所有这些变化都与多通道处理有关。

在传输性能之后,加载通道处理来自单个传输天线的样本。但是,根据接收天线的数量,它分别对每个链路(发送器-接收器对)应用信道建模。衰落信道的输出现在是一个多信道矩阵,行数等于传输样本数,列数等于接收天线数。类似地,awgn通道处理衰落通道的多通道输出,并在添加白噪声的情况下产生相同大小的输出。


由于多通道接收信号现在是接收器的输入,因此接收器中执行的第一组操作必须跨不同的通道重复(表示不同的接收天线)。这些包括OFDM接收器、资源元素去映射器和达到均衡器功能的信道估计器。


每个接收器上的估计数据资源元素现在与一个新的均衡器相结合,以生成对发送信号的最佳估计。均衡器使用ZF或MMSE方法在每个天线上相等,但结果根据MRC进行组合。这种方法基本上是根据每个接收天线的功率测量来衡量和衡量其贡献。下面的matlab函数包含SIMO情况下收发器中的操作。

 1function [dataIndataOuttxSigrxSigdataRxyReccsr_ref]...
2    = commlteSIMO_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH, prmMdl)
3%% TX
4%  Generate payload
5dataIn = genPayload(nS,  prmLTEDLSCH.TBLenVec);
6Transport block CRC generation
7tbCrcOut1 =CRCgenerator(dataIn);
8Channel coding includes - CB segmentationturbo codingrate matching,
9bit selectionCB concatenation - per codeword
10[dataKplus1C1] = lteTbChannelCoding(tbCrcOut1, nS, prmLTEDLSCH, prmLTEPDSCH);
11%Scramble codeword
12scramOut = lteScramble(data, nS, 0, prmLTEPDSCH.maxG);
13Modulate
14modOut = Modulator(scramOut, prmLTEPDSCH.modType);
15Generate Cell-Specific Reference (CSRsignals
16csr = CSRgenerator(nS, prmLTEPDSCH.numTx);
17Resource grid filling
18E=8*prmLTEPDSCH.Nrb;
19csr_ref=reshape(csr(1:E),2*prmLTEPDSCH.Nrb,4);
20txGrid = REmapper_1Tx(modOut, csr_ref, nS, prmLTEPDSCH);
21OFDM transmitter
22txSig = OFDMTx(txGrid, prmLTEPDSCH);
23%% Channel
24SIMO Fading channel
25[rxFadechPathG] = MIMOFadingChan(txSig, prmLTEPDSCH, prmMdl);
26idealhD = lteIdChEst(prmLTEPDSCH,  prmMdl, chPathG, nS);
27Add AWG noise
28nVar = 10.^(0.1.*(-snrdB));
29rxSig =  AWGNChannel(rxFade, nVar);
30%% RX
31OFDM Rx
32rxGrid = OFDMRx(rxSig, prmLTEPDSCH);
33updated for numLayers -> numTx
34[dataRxcsrRxidx_data] = REdemapper_1Tx(rxGrid, nS, prmLTEPDSCH);
35MIMO channel estimation
36if prmMdl.chEstOn
37    chEst = ChanEstimate_1Tx(prmLTEPDSCH, csrRx,  csr_ref, 'interpolate');
38    hD=ExtChResponse(chEst, idx_data, prmLTEPDSCH);
39else
40    hD = idealhD;
41end
42Frequency-domain equalizer
43Based on Maximum-Combining Ratio (MCR
44yRec = Equalizer_simo( dataRx, hD, nVar, prmLTEPDSCH.Eqmode);    
45Demodulate
46demodOut = DemodulatorSoft(yRec, prmLTEPDSCH.modType, nVar);
47Descramble both received codewords
48rxCW =  lteDescramble(demodOut, nS, 0, prmLTEPDSCH.maxG);
49Channel decoding includes - CB segmentationturbo decodingrate dematching
50[decTbData1, ~,~] = lteTbChannelDecoding(nS, rxCW, Kplus1, C1,  prmLTEDLSCH, prmLTEPDSCH);
51Transport block CRC detection
52[dataOut, ~] = CRCdetector(decTbData1);
53end
54


5.18.2.1 函数改进

启用Simo模式所需的修改会影响以下三个功能。

  • Redemapper_1Tx 现在通过在for循环中迭代接收天线来支持多通道处理,以便分别提取数据、CSR和其他信号。

  • ChanEstimate_1Tx 现在通过在多个天线上重复基于CSR信号的资源网格生成过程来支持多通道处理。

  • Equalizer_simo 采用MRC方法生成接收器处资源元素的最佳估计。与siso模式的频域均衡器不同,simo模式的均衡器必须结合来自多个信道的贡献。

 1function [datacsridx_datapdcchpsssssbch] = REdemapper_1Tx(in, nS, prmLTE)
2%#codegen
3NcellID = 0;                                     % One of possible 504 values
4numTx = 1;                                      % prmLTE.numTx;
5Get input params
6numRx=prmLTE.numRx;                   % number of receive antennas
7Nrb = prmLTE.Nrb;                            % either of 
{6,...,1}
8Nrb_sc = prmLTE.Nrb_sc;                 % 12 for normal mode
9numContSymb    = prmLTE.contReg;  % either {123}
10Npss= prmLTE.numPSSRE;
11Nsss=prmLTE.numSSSRE;
12Nbch=prmLTE.numBCHRE;
13Ncsr=prmLTE.numCSRResources;
14Ndci=prmLTE.numContRE;
15%% Specify resource grid location indices for CSR, PDCCH, PDSCH, PBCH, PSS, SSS
16%% 1st: Indices for CSR pilot symbols
17lenOFDM = Nrb*Nrb_sc;
18idx            = 1:lenOFDM;
19idx_csr0   = 1:6:lenOFDM;              % More general starting point = 1+mod(NcellID, 6);
20idx_csr4   = 4:6:lenOFDM;              % More general starting point = 1+mod(3+NcellID, 6);
21idx_csr     =[idx_csr0, 4*lenOFDM+idx_csr4, 7*lenOFDM+idx_csr0, 11*lenOFDM+idx_csr4];
22%% 2nd: Indices for PDCCH control data symbols
23ContREs=numContSymb*lenOFDM;
24idx_dci=1:ContREs;
25idx_pdcch = ExpungeFrom(idx_dci,idx_csr0);
26%% 3rd: Indices for PDSCH and PDSCH data in OFDM symbols whee pilots are present
27idx_data0= ExpungeFrom(idx,idx_csr0);
28idx_data4 = ExpungeFrom(idx,idx_csr4);
29switch nS
30    %% 4th: Indices for BCH, PSS, SSS are only found in specific subframes 0 and 5
31    % Thsese symbols share the same 6 center sub-carrier locations (idx_ctr)
32    % and differ in OFDM symbol number.
33    case 0    % Subframe 0
34        % PBCH, PSS, SSS are available + CSR, PDCCH, PDSCH
35        idx_6rbs = (1:72);
36        idx_ctr = 0.5* lenOFDM - 36 + idx_6rbs ;
37        idx_SSS  = 5* lenOFDM + idx_ctr;
38        idx_PSS  = 6* lenOFDM + idx_ctr;
39        idx_ctr0 = ExpungeFrom(idx_ctr,idx_csr0);
40        idx_bch=[7*lenOFDM + idx_ctr0, 8*lenOFDM + idx_ctr, 9*lenOFDM + idx_ctr, 10*lenOFDM + idx_ctr];
41        idx_data5   = ExpungeFrom(idx,idx_ctr);
42        idx_data7 = ExpungeFrom(idx_data0,idx_ctr);
43        idx_data   = [ContREs+1:4*lenOFDM,   4*lenOFDM+idx_data4, ...
44            5*lenOFDM+idx_data5, 6*lenOFDM+idx_data5,  7*lenOFDM+idx_data7, 8*lenOFDM+idx_data5, ...
45            9*lenOFDM+idx_data5, 10*lenOFDM+idx_data5, 11*lenOFDM+idx_data4, ...
46            12*lenOFDM+1:14*lenOFDM];
47    case 10  % Subframe 5
48        % PSS, SSS are available + CSR, PDCCH, PDSCH
49        % Primary ans Secondary synchronization signals in OFDM symbols 5 and 6
50        idx_6rbs = (1:72);
51        idx_ctr = 0.5* lenOFDM - 36 + idx_6rbs ;
52        idx_SSS  = 5* lenOFDM + idx_ctr;
53        idx_PSS  = 6* lenOFDM + idx_ctr;
54        idx_data5 = ExpungeFrom(idx,idx_ctr);
55        idx_data   = [ContREs+1:4*lenOFDM, 4*lenOFDM+idx_data4,  5*lenOFDM+idx_data5, 6*lenOFDM+idx_data5, ...
56            7*lenOFDM+idx_data0, 8*lenOFDM+1:11*lenOFDM,  11*lenOFDM+idx_data4, ...
57            12*lenOFDM+1:14*lenOFDM];
58    otherwise % other subframes
59        % Only CSR, PDCCH, PDSCH
60        idx_data = [ContREs+1:4*lenOFDM, 4*lenOFDM+idx_data4, ...
61            5*lenOFDM+1:7*lenOFDM, ...
62            7*lenOFDM+idx_data0, ...
63            8*lenOFDM+1:11*lenOFDM, ...
64            11*lenOFDM+idx_data4, ...
65            12*lenOFDM+1:14*lenOFDM];
66end
67%% Handle 3 types of subframes differently
68pss=complex(zeros(Npss,numRx));
69sss=complex(zeros(Nsss,numRx));
70bch=complex(zeros(Nbch,numRx));
71data=complex(zeros(numel(idx_data),numRx));
72csr=complex(zeros(Ncsr,numRx));
73pdcch = complex(zeros(Ndci,numRx));
74idx_data=idx_data.';
75for n=1:numRx
76    tmp=in(:,:,n);
77    data(:,n)=tmp(idx_data);       % Physical Downlink Shared Channel (PDSCH) = user data
78    csr(:,n)=tmp(idx_csr.'
);            % Cell-Specific Reference signal (CSR) = pilots
79    pdcch(:,n) = tmp(idx_pdcch.');   % Physical Downlink Control Channel (PDCCH)
80    if nS==0
81        pss(:,n)=tmp(idx_PSS.'
);    % Primary Synchronization Signal (PSS)
82        sss(:,n)=tmp(idx_SSS.');     % Secondary Synchronization Signal (SSS)
83        bch(:,n)=tmp(idx_bch.'
);    % Broadcast Cahnnel data (BCH)
84    elseif nS==10
85        pss(:,n)=tmp(idx_PSS.');     % Primary Synchronization Signal (PSS)
86        sss(:,n)=tmp(idx_SSS.'
);      % Secondary Synchronization Signal (SSS)
87    end
88end


 1function hD = ChanEstimate_1Tx(prmLTE, Rx, Ref, Mode)
2%#codegen
3Nrb           = prmLTE.Nrb;     % Number of resource blocks
4Nrb_sc      = prmLTE.Nrb_sc;                 % 12 for normal mode
5Ndl_symb = prmLTE.Ndl_symb;        % 7    for normal mode
6numRx = prmLTE.numRx;
7Assume same number of Tx and Rx antennas = 1
8Initialize output buffer
9hD = complex(zeros(Nrb*Nrb_sc, Ndl_symb*2,numRx));
10Estimate channel based on CSR - per antenna port
11csrRx = reshape(Rx, numel(Rx)/(4*numRx), 4, numRx); % Align received pilots with reference pilots
12for n=1:numRx
13    hpcsrRx(:,:,n)./Ref;                  % Just divide received pilot by reference pilot
14    % to obtain channel response at pilot locations
15    % Now use some form of averaging/interpolation/repeating to
16    % compute channel response for the whole grid
17    % Choose one of 3 estimation methods "averageor "interpolateor "hybrid"
18    switch Mode
19        case 'average'
20            tmp=gridResponse_averageSubframe(hp, Nrb, Nrb_sc, Ndl_symb);
21        case 'interpolate'
22            tmp=gridResponse_interpolate(hp, Nrb, Nrb_sc, Ndl_symb);
23        case 'hybrid'
24            tmp=gridResponse_averageSlot(hp, Nrb, Nrb_sc, Ndl_symb);
25        otherwise
26            error('Choose the right mode for function ChanEstimate.');
27    end
28    hD(:,:,n)=tmp;
29end
30


 1function [ynumdenum]  = Equalizer_simo(in, hD, nVar, EqMode)
2%#codegen
3switch EqMode
4    case 1,   % Zero forcing
5       num = conj(hD);
6       denum=conj(hD).*hD;            
7    case 2,   % MMSE
8        num = conj(hD);
9        denum=conj(hD).*hD+nVar;  
10    otherwise,
11        error('Two equalization mode available: Zero forcing or MMSE');
12end
13y = sum(in .*num,2)./sum(denum,2);
14


5.18.2.2验证收发器性能

为了观察接收分集对性能的影响,我们可以执行simo收发器模型(commlteSIMO)的matlab脚本。首先,我们在脚本中设置与模型的各个组件相关的参数(commlteSIMO_参数)。这与siso中使用的脚本相同,只是我们将接收参数的数量从1更改为4。

 1% PDSCH
2numTx          = 1;    % Number of transmit antennas
3numRx          = 4;    % Number of receive antennas
4chanBW       = 4;    % Index to chanel bandwidth used [1,....6]
5contReg       = 1;    % No. of OFDM symbols dedictaed to control information [1,...,3]
6modType      =  2;   % Modulation type [123for ['QPSK,'16QAM','64QAM']
7% DLSCH
8cRate            = 1/3; % Rate matching target coding rate 
9maxIter         = 6;     % Maximum number of turbo decoding terations  
10fullDecode    = 0;    % Whether "full" or "early stopping" turbo decoding is performed
11% Channel model
12chanMdl        =  '
frequency-selective-high-mobility'; 
13corrLvl           = '
Low'; 
14% Simulation parametrs
15Eqmode        = 2;      % Type of equalizer used [1,2] for ['
ZF', 'MMSE']
16chEstOn        = 1;     % Whether channel estimation is done or ideal channel model used
17maxNumErrs = 1e7; % Maximum number of errors found before simulation stops
18maxNumBits = 1e7;  % Maximum number of bits processed before simulation stops
19visualsOn     = 0;      % Whether to visualize channel response and constellations
20snrdB            = 16;   % Value of SNR used in this experiment
21

图5.14说明了星座图,并显示了Simo OFDM收发器如何补偿多径衰落效应,并旋转和缩放损坏的星座(均衡前),使其回到可以正确解调的星座(均衡后)。图5.15显示了均衡前后发送和接收信号的功率谱密度。结果表明,当发射信号具有归一化为1的功率谱幅度时,接收信号的幅度谱反映了信道多径衰落响应的影响。均衡后,幅度谱表现出更为平坦的性质,与传输谱非常相似。

1.JPG


5.18.2.3 误码率测量
为了验证收发器的误码率性能,我们创建了一个名为commltesimo_test_timing_ber.m的测试台,首先初始化LTE系统参数,然后迭代一系列的信噪比值,并调用循环中的commltesimo_fcn函数来计算相应的误码率值。

 1% Script for SIMO LTE (mode 1)
2%
3% Single codeword transmission only,
4%
5clear all
6clear functions
7disp('Simulating the LTE Mode 1: Single Tx and multiple Rx antrenna');
8%% Create the parameter structures
9commlteSIMO_params;
10[prmLTEPDSCH, prmLTEDLSCH, prmMdl] = commlteSIMO_initialize( chanBW, contReg, modType, Eqmode,...
11    numTx, numRx, cRate,maxIter, fullDecode, chanMdl, corrLvl, chEstOn, maxNumErrs, maxNumBits);
12clear  chanBW contReg numTx numRx modType Eqmode cRate maxIter fullDecode chanMdl corrLvl chEstOn maxNumErrs maxNumBits;
13%%
14zReport_data_rate(prmLTEDLSCH, prmLTEPDSCH);
15MaxIter=numel(prmMdl.snrdBs);
16ber_vector=zeros(1,MaxIter);
17tic;
18for n=1:MaxIter
19    fprintf(1,'Iteration %2d out of %2d : ', n, MaxIter);
20    hPBer = comm.ErrorRate;
21    snrdB = prmMdl.snrdBs(n);
22    maxNumErrs=prmMdl.maxNumErrs;
23    maxNumBits=prmMdl.maxNumBits;
24    %% Simulation loop
25    nS = 0; % Slot number, one of [0:2:18]
26    Measures = zeros(3,1); %initialize BER output
27    while (( Measures(2)< maxNumErrs) && (Measures(3) < maxNumBits))
28        [dataIn, dataOut, txSig, rxSig, dataRx, yRec, csr] = ...
29            commlteSIMO_step(nS, snrdB, prmLTEDLSCH, prmLTEPDSCH, prmMdl);
30        % Calculate  bit errors
31        Measures = step(hPBer, dataIn, dataOut);
32        % Visualize constellations and spectrum
33        if visualsOn
34            zVisualize( prmLTEPDSCH, txSig, rxSig, yRec, dataRx, csr, nS);
35        end;
36        % Update subframe number
37        nS = nS + 2if nS > 19, nS = mod(nS, 20); end;
38    end
39    ber=Measures(1);
40    ber_vector(n)=ber;
41    disp(ber_vector);
42end;
43toc;
44%% Now visualize
45semilogy(prmMdl.snrdBs, ber_vector);
46title('BER - commlteSIMO');xlabel('SNR (dB)');ylabel('ber');grid;

在执行matlab脚本时,命令提示符中会显示消息,包括收发器参数(调制类型、编码速率、信道带宽、天线配置和最大数据速率)、正在执行的迭代以及已用时间的最终计数。


图5.16显示了作为信噪比值函数的收发器的误码率。在这个例子中,我们在八个迭代中处理5000万位,每个迭代的特征是一个信噪比值。收发器采用16QAM调制方案,编码速率为1/3,系统带宽为10MHz,Simo天线配置为1×4。选择此参数集将导致9.91Mbps的最大数据速率,如函数zreport_data_rate.m所报告的那样。


捕获.JPG

图5.6 SIMO模型的BER计算

5.19本章小结

在本章中,我们研究了LTE标准中使用的多载波传输方案。重点开发了基于正交频分复用(OFDM)传输的MATLAB下行链路收发器。首先,我们研究了更现实的移动通信信道表示,并介绍了多径衰落信道模型。然后,我们提出了一个OFDM传输方案的功能要素,旨在对抗多径衰落的影响。


然后,我们回顾了发送器中的功能元素,包括:(i)导致资源网格形成的数据的时频表示;(ii)在资源网格中包含OFDM引导信号(或参考信号);以及(iii)使用反向FFT计算传输数据的OFDM信号生成。作为一种基于资源网格表示的完全在频域中指定的时域信号。


随后,我们回顾了接收机中的典型功能元素,包括:(i)计算接收资源网格的OFDM接收机,(ii)基于参考信号的信道估计,(iii)基于信道估计结果插值的整个资源网格的信道响应计算,以及(iv)频域E。基于估计信道响应的定性,用于恢复传输资源元素的最佳估计。


最后,我们整合了所有的功能元素,在Matlab中为LTE标准的单天线下行传输模式建立了一个收发器模型。收发器也被称为LTE传输模式1,它处理SISO和SIMO下行链路收发器操作。通过模拟,我们进行了定性评估和误码率性能测量。结果表明,该收发器能有效地对抗多径衰落引起的码间干扰的影响。在下一章中,我们将介绍MIMO多天线方案,其中多个天线用于传输。



本章完

2019/1/13



3.JPG



扫码关注5G通信官方公众号,免费领取以下5G精品资料
  • 1、回复“iot6”免费领取《【8月30号登载】物联网创新技术与产业应用蓝皮书——物联网感知技术及系统应用
  • 2、回复“6G31”免费领取《基于云网融合的6G关键技术白皮书
  • 3、回复“IM6G”免费领取《6G典型场景和关键能力白皮书
  • 4、回复“SPN2”免费领取《中国移动SPN2.0技术白皮书
  • 5、回复“LTKJ7”免费领取《 联通科技周17本白皮书合集
  • 6、回复“5g-a”免费领取《中国联通5G-A 通感算融合技术白皮书
  • 7、回复“URLLC”免费领取《中国联通5G URLLC 技术白皮书
  • 8、回复“LDSL”免费领取《中国移动算力网络技术白皮书
  • 对本帖内容的看法? 我要点评

     
    [充值威望,立即自动到帐] [VIP贵宾权限+威望套餐] 另有大量优惠赠送活动,请光临充值中心
    充值拥有大量的威望和最高的下载权限,下载站内资料无忧
    destild
    新手上路
    鎵嬫満鍙风爜宸查獙璇


     发短消息    关注Ta 

    积分 -742
    帖子 60
    威望 13021 个
    礼品券 0 个
    专家指数 -1042
    注册 2017-1-19
    专业方向 
    回答问题数 0
    回答被采纳数 0
    回答采纳率 0%
     
    发表于 2019-01-13 18:48:08  只看楼主 
    技术问题,回答得专家指数,快速升级


    QUOTE:
    原帖由 destild 于 2019-1-13 10:42:22 发表
    “原文 Understanding LTE with MATLAB ,作者Houman Zarrinkoub,本文是对于该书的翻译,书中的专业性词汇给出了英文原文,图和表的排版都是参考原文,翻译不准确的地方请读者多多包涵。本文仅限于个人学 ...


    对本帖内容的看法? 我要点评

     
    [立即成为VIP会员,百万通信专业资料立即下载,支付宝、微信付款,简单、快速!]

    快速回复主题    
    标题
    内容
     上传资料请点左侧【添加附件】

    当前时区 GMT+8, 现在时间是 2024-03-29 22:24:56
    渝ICP备11001752号  Copyright @ 2006-2016 mscbsc.com  本站统一服务邮箱:mscbsc@163.com

    Processed in 0.343204 second(s), 16 queries , Gzip enabled
    TOP
    清除 Cookies - 联系我们 - 移动通信网 - 移动通信论坛 - 通信招聘网 - Archiver