主要内容

单天线(TM1)、发射分集(TM2)、开环(TM3)和闭环(TM4/6)空间复用PDSCH吞吐量一致性测试

这个例子演示了如何使用LTE Toolbox™对以下传输模式(TM)测量物理下行共享信道(PDSCH)吞吐量性能:

  • TM1:单天线(端口0)

  • TM2:发射分集

  • TM3:基于开环码本的预编码:循环延迟分集(CDD)

  • TM4:基于闭环码本的空间多路复用

  • TM6:基于单层闭环码本的空间多路复用

该示例还显示了如何参数化和自定义不同TMS的设置。它还支持使用并行万博1manbetx计算工具箱™来降低有效的模拟时间。

介绍

这个例子测量了许多信噪比点的吞吐量。提供的代码可以在多种传输模式下运行:TM1、TM2、TM3、TM4和TM6。有关如何建模TM7、TM8、TM9和TM10的信息,请查看以下示例:非码本预编码方案的PDSCH吞吐量:端口5 (TM7),端口7或8或端口7-8 (TM8),端口7-14 (TM9和TM10)

该示例在一个子帧接一个子帧的基础上工作。对于每个考虑的信噪比点,生成一个填充的资源网格,并对OFDM进行调制以创建发射波形。产生的波形通过一个有噪声的衰落信道。然后由接收器执行以下操作:信道估计、均衡、解调和解码。PDSCH的吞吐量性能由信道译码器输出的块CRC结果决定。

对需要预编码矩阵(TM4和TM6)的TMS实现预编码器矩阵指示(PMI)反馈。

一个parfor可以使用Loop来代替循环进行信噪比计算。在示例中说明了这一点。的parfor语句是并行计算工具箱的一部分,并并行执行信噪比循环,以减少总的模拟时间。

模拟配置

该例子是执行模拟长度为2帧的若干信噪比点。大量的NFrames应用于产生有意义的吞吐量结果。SNRIn可以是值数组或标量。一些TMs和某些调制方案对噪声和信道损害的鲁棒性比其他的更强,因此不同的参数集可能需要使用不同的信噪比值。

NFrames = 2;%帧数SNRIn = [10.3 12.3 14.3];%信噪比范围,单位为dB

eNodeB配置

选择感兴趣的TM并设置eNodeB参数。使用变量选择TMtxMode,它可以取值TM1、TM2、TM3、TM4和TM6。

txMode =“TM4”% tm1, tm2, tm3, tm4, tm6

为简单起见,本例中建模的所有TMs的带宽为50个资源块,全部分配,代码率为0.5。不指定RMC编号确保所有下行链路子帧都被调度。如果指定了RMC(例如:'R.0'),子帧调度是定义在TS 36.101,其中子帧5在大多数情况下是不调度的。

的变量txMode通过switch语句选择TM。对于每个TM,都指定了所需的参数。此示例不执行DCI格式解码,因此DCIFormat字段不是严格必需的。但是,由于DCI格式与TM紧密相连,因此包含它是为了完整性。

simulationParameters = [];%明显simulationParameterssimulationParameters。NDLRB = 50;simulationParameters.PDSCH.TargetCodeRate = 0.5;simulationParameters.PDSCH.PRBSet = (0:49) ';开关txMode%单天线(Port0)模式(TM1)情况下“TM1”流('\nTM1 -单天线(端口0)\n');simulationParameters.PDSCH.TxScheme =“Port0”;simulationParameters.PDSCH.DCIFormat =“Format1”;simulationParameters。CellRefP = 1;simulationParameters.PDSCH.Modulation = {16 qam的};发射分集模式(TM2)情况下“TM2”流('\nTM2 -传输分集\n');simulationParameters.PDSCH.TxScheme =“TxDiversity”;simulationParameters.PDSCH.DCIFormat =“Format1”;simulationParameters。CellRefP = 2;simulationParameters.PDSCH.Modulation = {16 qam的};simulationParameters.PDSCH.NLayers = 2;% CDD模式(TM3)情况下“TM3”流(“\ nTM3 CDD \ n”);simulationParameters.PDSCH.TxScheme =CDD的;simulationParameters.PDSCH.DCIFormat =“Format2A”;simulationParameters。CellRefP = 2;simulationParameters.PDSCH.Modulation = {16 qam的16 qam的};simulationParameters.PDSCH.NLayers = 2;%空间复用模式(TM4)情况下“TM4”流(基于码本的空间多路复用\n′);simulationParameters。CellRefP = 2;simulationParameters.PDSCH.Modulation = {16 qam的16 qam的};simulationParameters.PDSCH.DCIFormat =“Format2”;simulationParameters.PDSCH.TxScheme =“SpatialMux”;simulationParameters.PDSCH.NLayers = 2;%没有码本限制simulationParameters.PDSCH.CodebookSubset =''%单层空间复用模式(TM6)情况下“TM6”流(...基于码本的单层空间复用\n′);simulationParameters。CellRefP = 4;simulationParameters.PDSCH.Modulation = {“正交相移编码”};simulationParameters.PDSCH.DCIFormat =“Format2”;simulationParameters.PDSCH.TxScheme =“SpatialMux”;simulationParameters.PDSCH.NLayers = 1;%没有码本限制simulationParameters.PDSCH.CodebookSubset =''否则错误(“传输模式应该是TM1, TM2, TM3, TM4或TM6之一。”结束%设置适用于所有TMs的其他simulationParameters字段simulationParameters。TotSubframes = 1;%每次生成一个子帧simulationParameters.PDSCH.CSI =“上”%软位由CSI加权
TM4 -基于码本的空间复用

调用lteRMCDL,生成未指定的默认eNodeB参数simulationParameters.这些将需要稍后产生波形使用lteRMCDLTool

enb = lteRMCDL (simulationParameters);

输出enb在其他字段中,结构包含传输块大小和帧内每个码字子帧的冗余版本序列。这些将在稍后的模拟中使用。

rvSequence = enb.PDSCH.RVSeq;trBlkSizes = enb.PDSCH.TrBlkSizes;

码字的数量,作战飞机的条目数enb.PDSCH.Modulation字段。

作战飞机=长度(string (enb.PDSCH.Modulation));

为闭环TMs (TM4和TM6)设置PMI延迟。这是PMI从UE传递到eNodeB之间的延迟,如TS 36.101,表8.2.1.4.2-1所定义。

pmiDelay = 8;

接下来,我们打印一些更相关的模拟参数的摘要。检查这些值以确保它们符合预期。如果手动指定传输块大小,显示的码率对于检测问题很有用。典型值是1/3、1/2和3/4。

hDisplayENBParameterSummary (enb txMode);
—参数摘要:--------------------------------------------双工作模式:FDD传输模式:TM4传输方案:SpatialMux下行资源块数:50已分配资源块数:50蜂窝参考信号端口数:2发射天线数:2传输层数:2码字数:2调制码字1:16 qam传输块大小码字1:11448 11448 11448 11448 11448 11448 11448 11448 11448 11448码率码字1:0.515 0.48 0.48 0.48 0.48 0.4918 0.48 0.48 0.48 0.48调制码字2:16 qam传输块大小码字2:11448 11448 11448 11448 11448 11448 11448 11448 11448 11448码率码字2:0.515 0.48 0.48 0.48 0.48 0.4918 0.48 0.48 0.48 0.48  ------------------------------------------------------------------

传播信道模型配置

结构通道包含通道模型配置参数。

通道。种子= 6;%通道种子通道。NRxAnts = 2;% 2接收天线通道。DelayProfile =“环保署”%延迟概要通道。DopplerFreq = 5;%多普勒频率通道。MIMOCorrelation =“低”% Multi-antenna相关性通道。NTerms = 16;衰落模型中使用的振荡器通道。ModelType =“GMEDS”%瑞利衰落模型类型通道。InitPhase =“随机”%随机初始阶段通道。NormalizePathGains =“上”正规化延迟轮廓功率通道。NormalizeTxAnts =“上”传送天线规格化

使用返回的值设置通道模型的采样率lteOFDMInfo

ofdmInfo = lteOFDMInfo (enb);通道。SamplingRate = ofdmInfo.SamplingRate;

信道估计配置

的变量perfectChanEstimator控制信道估计器行为。有效的值真正的.当设置为真正的使用完美的信道响应作为估计,否则根据接收的导频信号的值得到一个不完美的估计。

完美信道估计标志perfectChanEstimator = false;

如果perfectChanEstimator配置结构设置为falsecec,以参数化信道估计器。信道在时间和频率上变化缓慢,因此使用一个大的平均窗来平均噪声。

配置信道估计器cec。PilotAverage =“UserDefined”导频符号平均值的类型cec。FreqWindow = 41;%频率窗口大小,以REs表示cec。TimeWindow = 27个;%时间窗口大小,以REs表示cec。InterpType =“立方”二维插值型cec。InterpWindow =“中心”插值窗口类型cec。InterpWinSize = 1;插值窗口大小

显示模拟信息

的变量displaySimulationInformation控制仿真信息的显示,如用于每个子帧的HARQ进程ID。在CRC错误的情况下,也会显示RV序列的索引值。

displaySimulationInformation = true;

处理循环

为了确定每个信噪比点的吞吐量,PDSCH数据在一个子帧的基础上进行分析,步骤如下:

  • 更新当前HARQ进程。HARQ过程要么携带新的传输数据,要么重传先前发送的传输数据,这取决于基于CRC结果的确认(ACK)或否定确认(NACK)。所有这些都是由HARQ调度程序处理的,hHARQScheduling.根据HARQ状态更新PDSCH数据。

  • 采购经理人指数。此步骤仅适用于TM4和TM6(闭环空间复用和单层闭环空间复用)。PMI是按顺序从一组PMI中获取的,txPMIs,每个子帧并由eNodeB用来选择预编码矩阵。eNodeB使用终端推荐的巡检数据进行数据传输。有一个延迟pmiDelay在推荐PMI的UE和使用它来选择预编码矩阵的eNodeB之间的子帧。最初一套pmiDelay使用随机pmi。

  • 创建传输波形。HARQ进程生成的数据被传递给lteRMCDLTool产生OFDM调制波形,其中包含物理通道和信号。

  • 噪声信道建模。该波形通过一个衰落信道并加入噪声(AWGN)。

  • 执行同步和OFDM解调。接收的符号被偏移以考虑实现延迟和信道延迟扩展的组合。然后对这些符号进行OFDM解调。

  • 进行信道估计。估计信道响应和噪声水平。这些估计被用来解码PDSCH。

  • PDSCH解码。所有发射和接收天线对的恢复PDSCH符号,连同噪声估计,由ltePDSCHDecode获取接收码字的估计值。

  • 解码下行共享通道(DL-SCH),并为HARQ进程存储块CRC错误。解码后的软位的向量被传递到lteDLSCHDecode;这对码字进行解码,并返回用于确定系统吞吐量的块CRC错误。新的软缓冲区的内容,harqProc .decState (harqID),在此函数的输出中可用,用于解码下一个子帧。

  • 更新采购经理人指数。选择巡检结果反馈给eNodeB,供后续使用。此步骤仅适用于TM4和TM6(闭环空间复用和单层闭环空间复用)。

%发射天线数量P从资源网格中获取%的维度。'dim '是M乘N乘p,其中M是子载波数N%为符号数,P为发射天线数。= lteDLResourceGridSize dim (enb);P = dim (3);%初始化在模拟和分析中使用的变量%阵列存储所有信噪比点的最大吞吐量maxThroughput = 0(长度(SNRIn), 1);%阵列存储所有信噪比点的模拟吞吐量simThroughput = 0(长度(SNRIn), 1);%获取HARQ ID序列,进行HARQ处理。这是一个索引列表%用于HARQ进程调度。[~,~,enbOut] = lteRMCDLTool(enb, []);harqProcessSequence = enbOut.PDSCH.HARQProcessSequence;临时变量“enb_init”、“channel_init”和“% 'harqProcessSequence_init'用于优化并行处理(仅限)%如果使用并行计算工具箱运行示例)enb_init = enb;channel_init =通道;harqProcessSequence_init = harqProcessSequence;legendString = [的吞吐量:char (enb.PDSCH.TxScheme)];allRvSeqPtrHistory =细胞(1,元素个数(SNRIn));nFFT = ofdmInfo.Nfft;snrIdx = 1:元素个数(SNRIn)% parfor snrIdx = 1:numel(SNRIn)%要启用并行计算以提高速度,请注释掉%上面的'for'语句并取消下面的'parfor'语句的注释。%这需要并行计算工具箱。如果没有安装% 'parfor'将默认为普通的'for'语句。如果“parfor”建议使用变量“displaySimulationInformation”上面的%设置为false,否则将显示模拟信息%每个信噪比点将重叠。%根据循环变量设置随机数生成器种子%以确保独立的随机流rng (snrIdx“combRecursive”);SNRdB = SNRIn (snrIdx);流('\ n模拟%g dB信噪比为%d帧\n'、SNRdB NFrames);%初始化在模拟和分析中使用的变量偏移量= 0;%初始化帧偏移值抵消= 0;初始化无线电帧的帧偏移值blkCRC = [];%阻塞所有考虑的子帧的CRCbitTput = [];%每子帧成功接收比特数txedTrBlkSizes = [];%每子帧传输的比特数enb = enb_init;%初始化RMC配置频道= channel_init;初始化通道配置harqProcessSequence = harqProcessSequence_init;%初始化HARQ进程序列pmiIdx = 0;延迟队列中的% PMI索引变量harqPtrTable存储的是%指针指向所有HARQ进程的RV序列值。%预分配与nan,因为一些子帧没有数据rvSeqPtrHistory = NaN(ncw, NFrames*10);%HARQ进程的%初始化状态harqProcesses = hNewHARQProcess (enb);%对第一个'pmiDelay'子帧使用随机pmi,直到反馈%可从UE获得;注意PMI反馈只适用于%空间复用TMs (TM4和TM6),但是这里的代码是必需的%表示在使用时,信噪比循环中变量的完整初始化%并行计算工具箱。pmidims = ltePMIInfo (enb enb.PDSCH);txPMIs = randi([0 pmidimms . txt])MaxPMI], pmidims。NSubbands pmiDelay);subframeNo = 0: (NFrames * 10 - 1)%更新子帧号enb。NSubframe = subframeNo;%从HARQ进程序列中获取子帧的HARQ进程IDharqID = harqProcessSequence(mod(subframeNo, length(harqProcessSequence))+1);%当前子帧中调度了一个传输块%(由非零的'harqID'表示),执行传输和%接待。否则继续下一帧如果harqID = = 0继续结束%更新当前HARQ进程harqProcesses (harqID) = hHARQScheduling (...harqProcesses (harqID)、subframeNo rvSequence);提取当前子帧传输块大小trBlk = trBlkSizes(:, mod(subframeNo, 10)+1).';%显示运行时信息如果displaySimulationInformation disp (' ');disp ([的子帧:num2str (subframeNo)...”。HARQ进程ID: 'num2str (harqID)]);结束%更新RV序列指针表rvSeqPtrHistory (:, subframeNo + 1) =...harqProcesses harqID .txConfig.RVIdx。';%用HARQ进程状态更新PDSCH传输配置enb。PDSCH = harqProcesses (harqID) .txConfig;data = harqProcesses (harqID) . data;%在延迟队列中设置相应的PMI值如果strcmpi (enb.PDSCH.TxScheme“SpatialMux”) pmiIdx = mod(subframeNo, pmiDelay);延迟队列中的% PMI索引enb. pdsh . pmiset = txPMIs(:, pmiIdx+1);%设置采购经理人指数结束%产生发射波形txWaveform = lteRMCDLTool(enb, data);%添加25个样品填充。这是为了覆盖延迟的范围%期望从渠道建模(组合实现延迟和信道延迟扩展%)txWaveform = [txWaveform;0(25日P)];% #好< AGROW >%从'enbOut'获取HARQ ID序列进行HARQ处理harqProcessSequence = enbOut.PDSCH.HARQProcessSequence;%初始化每个子帧的信道时间通道。InitTime = subframeNo / 1000;%通过通道模型传递数据rx波形= lteFadingChannel(channel, tx波形);计算噪声增益,包括下行功率的补偿%分配信噪比= 10 ^ ((SNRdB-enb.PDSCH.Rho) / 20);将噪声功率归一化以考虑采样率,即%是OFDM调制中使用的IFFT大小的函数天线数%N0 = 1 /(√(2.0 * enb.CellRefP *双(nFFT)) *信噪比);创建加性高斯白噪声噪音= N0 *复杂(randn(大小(rxWaveform)),...randn(大小(rxWaveform)));%将AWGN添加到接收的时域波形中rx波形= rx波形+噪声;在子帧0上,每帧计算一次新的同步%抵消如果(mod(subframeNo,10) == 0) offset = lteDLFrameOffset(enb, rxWaveform); / /帧偏移如果(offset > 25) offset = offset (end);结束offset = [offset];% #好吧结束%同步接收的波形rx波形= rx波形(1+偏移:结束,:);%对接收到的数据进行OFDM解调,重新创建%资源网格rxSubframe = lteofdm解调器(enb, rx波形);%信道估计如果(perfectChanEstimator) estChannelGrid = lteDLPerfectChannelEstimate(enb, channel, offset);% #好吧noiseGrid = lteOFDMDemodulate(enb, noise(1+offset:end,:));噪音= var (noiseGrid (:));其他的[estChannelGrid, noiseEst] = lteDLChannelEstimate(...enb, enb。PDSCH、cec rxSubframe);结束%获取PDSCH索引pdschIndices = ltePDSCHIndices(enb, enb.)PDSCH enb.PDSCH.PRBSet);从接收的子帧中获取PDSCH资源元素。规模的由PDSCH功率因数Rho接收的子帧。PDSCH是的单元格参考符号%信道估计(用于PDSCH解码阶段)不是。[pdschRx, pdschHest] = lteExtractResources(pdschIndices, pdschRx, pdschHest)...rxSubframe * (10 ^ (-enb.PDSCH.Rho / 20)), estChannelGrid);%解码PDSCHdlschBits = ltePDSCHDecode (...enb, enb。PDSCH, pdschRx, pdschhester, noiseEst);解码DL-SCH[decbits harqProcesses (harqID) .blkerr harqProcesses (harqID) .decState] =...lteDLSCHDecode (enb enb。PDSCH、trBlk dlschBits,...harqProcesses (harqID) .decState);显示块错误如果displaySimulationInformation如果任何(harqProcesses (harqID) .blkerr) disp ([“块错误。房车指数:num2str (harqProcesses (harqID) .txConfig.RVIdx)...“CRC:”num2str (harqProcesses (harqID) .blkerr)])其他的disp ([“没有错误。房车指数:num2str (harqProcesses (harqID) .txConfig.RVIdx)...“CRC:”num2str (harqProcesses (harqID) .blkerr)])结束结束%存储计算吞吐量的值%仅用于带有数据的子帧如果任何(trBlk) blkCRC = [blkCRC harqProcesses(harqID).blkerr];% #好< AGROW >bitTput = [bitTput trBlk.*(1-...harqProcesses (harqID) .blkerr)];% #好< AGROW >txedTrBlkSizes = [txedTrBlkSizes trBlk];% #好< AGROW >结束%向eNodeB提供巡检反馈信息如果strcmpi (enb.PDSCH.TxScheme“SpatialMux”) PMI = ltePMISelect(enb, enb.)PDSCH estChannelGrid,噪音);txPMIs(:, pmiIdx+1) = PMI;结束结束计算最大和模拟吞吐量maxThroughput (snrIdx) =总和(txedTrBlkSizes);最大可能吞吐量%simThroughput (snrIdx) = (bitTput, 2)总和;%模拟吞吐量%在命令窗口中动态显示结果流([[' \ nThroughput (Mbps)的num2str (NFrames)“帧(s)”],...“= % .4f \ n”), 1 e-6 * simThroughput (snrIdx) / (NFrames * 10 e - 3));流([的吞吐量(% %)num2str (NFrames)'帧(s) = %.4f\n'],...simThroughput (snrIdx) * 100 / maxThroughput (snrIdx));allRvSeqPtrHistory {snrIdx} = rvSeqPtrHistory;结束%绘制所有HARQ进程的RV序列hPlotRVSequence (SNRIn allRvSeqPtrHistory NFrames);
在10.3 dB SNR中模拟2帧子帧:0. HARQ进程ID:1块错误。RV索引:1 1,CRC:1 1子帧:1。HARQ进程ID:2块错误。RV索引:1 1,CRC:1 1子帧:2. HARQ进程ID:3块错误。RV索引:1 1,CRC:1 1子帧:3。HARQ进程ID:4块错误。RV索引:1 1,CRC:0 1子帧:4。HARQ进程ID:5块错误。RV索引:1 1,CRC:0 1子帧:5。HARQ进程ID:6块错误。RV索引:1 1,CRC:1 1子帧:6。HARQ进程ID:7块错误。RV索引:1 1,CRC:1 1子帧:7。HARQ进程ID:8块错误。RV索引:1 1,CRC:1 1子帧:8。HARQ进程ID:1块错误。RV索引:2 2,CRC:0 1子帧:9。HARQ进程ID:2块错误。 RV index: 2 2, CRC: 0 1 Subframe: 10. HARQ process ID: 3 Block error. RV index: 2 2, CRC: 0 1 Subframe: 11. HARQ process ID: 4 Block error. RV index: 1 2, CRC: 0 1 Subframe: 12. HARQ process ID: 5 Block error. RV index: 1 2, CRC: 0 1 Subframe: 13. HARQ process ID: 6 Block error. RV index: 2 2, CRC: 0 1 Subframe: 14. HARQ process ID: 7 Block error. RV index: 2 2, CRC: 0 1 Subframe: 15. HARQ process ID: 8 Block error. RV index: 2 2, CRC: 0 1 Subframe: 16. HARQ process ID: 1 No error. RV index: 1 3, CRC: 0 0 Subframe: 17. HARQ process ID: 2 No error. RV index: 1 3, CRC: 0 0 Subframe: 18. HARQ process ID: 3 No error. RV index: 1 3, CRC: 0 0 Subframe: 19. HARQ process ID: 4 Block error. RV index: 1 3, CRC: 0 1 Throughput(Mbps) for 2 Frame(s) = 9.7308 Throughput(%) for 2 Frame(s) = 42.5000 Simulating at 12.3 dB SNR for 2 Frame(s) Subframe: 0. HARQ process ID: 1 Block error. RV index: 1 1, CRC: 1 1 Subframe: 1. HARQ process ID: 2 Block error. RV index: 1 1, CRC: 0 1 Subframe: 2. HARQ process ID: 3 Block error. RV index: 1 1, CRC: 1 1 Subframe: 3. HARQ process ID: 4 Block error. RV index: 1 1, CRC: 0 1 Subframe: 4. HARQ process ID: 5 Block error. RV index: 1 1, CRC: 0 1 Subframe: 5. HARQ process ID: 6 Block error. RV index: 1 1, CRC: 0 1 Subframe: 6. HARQ process ID: 7 Block error. RV index: 1 1, CRC: 0 1 Subframe: 7. HARQ process ID: 8 Block error. RV index: 1 1, CRC: 0 1 Subframe: 8. HARQ process ID: 1 Block error. RV index: 2 2, CRC: 0 1 Subframe: 9. HARQ process ID: 2 Block error. RV index: 1 2, CRC: 0 1 Subframe: 10. HARQ process ID: 3 Block error. RV index: 2 2, CRC: 0 1 Subframe: 11. HARQ process ID: 4 Block error. RV index: 1 2, CRC: 0 1 Subframe: 12. HARQ process ID: 5 Block error. RV index: 1 2, CRC: 0 1 Subframe: 13. HARQ process ID: 6 Block error. RV index: 1 2, CRC: 0 1 Subframe: 14. HARQ process ID: 7 Block error. RV index: 1 2, CRC: 0 1 Subframe: 15. HARQ process ID: 8 No error. RV index: 1 2, CRC: 0 0 Subframe: 16. HARQ process ID: 1 No error. RV index: 1 3, CRC: 0 0 Subframe: 17. HARQ process ID: 2 No error. RV index: 1 3, CRC: 0 0 Subframe: 18. HARQ process ID: 3 No error. RV index: 1 3, CRC: 0 0 Subframe: 19. HARQ process ID: 4 No error. RV index: 1 3, CRC: 0 0 Throughput(Mbps) for 2 Frame(s) = 13.1652 Throughput(%) for 2 Frame(s) = 57.5000 Simulating at 14.3 dB SNR for 2 Frame(s) Subframe: 0. HARQ process ID: 1 Block error. RV index: 1 1, CRC: 0 1 Subframe: 1. HARQ process ID: 2 Block error. RV index: 1 1, CRC: 0 1 Subframe: 2. HARQ process ID: 3 Block error. RV index: 1 1, CRC: 0 1 Subframe: 3. HARQ process ID: 4 Block error. RV index: 1 1, CRC: 0 1 Subframe: 4. HARQ process ID: 5 Block error. RV index: 1 1, CRC: 0 1 Subframe: 5. HARQ process ID: 6 Block error. RV index: 1 1, CRC: 0 1 Subframe: 6. HARQ process ID: 7 Block error. RV index: 1 1, CRC: 0 1 Subframe: 7. HARQ process ID: 8 Block error. RV index: 1 1, CRC: 0 1 Subframe: 8. HARQ process ID: 1 No error. RV index: 1 2, CRC: 0 0 Subframe: 9. HARQ process ID: 2 Block error. RV index: 1 2, CRC: 0 1 Subframe: 10. HARQ process ID: 3 Block error. RV index: 1 2, CRC: 0 1 Subframe: 11. HARQ process ID: 4 No error. RV index: 1 2, CRC: 0 0 Subframe: 12. HARQ process ID: 5 No error. RV index: 1 2, CRC: 0 0 Subframe: 13. HARQ process ID: 6 No error. RV index: 1 2, CRC: 0 0 Subframe: 14. HARQ process ID: 7 No error. RV index: 1 2, CRC: 0 0 Subframe: 15. HARQ process ID: 8 No error. RV index: 1 2, CRC: 0 0 Subframe: 16. HARQ process ID: 1 Block error. RV index: 1 1, CRC: 0 1 Subframe: 17. HARQ process ID: 2 No error. RV index: 1 3, CRC: 0 0 Subframe: 18. HARQ process ID: 3 No error. RV index: 1 3, CRC: 0 0 Subframe: 19. HARQ process ID: 4 Block error. RV index: 1 1, CRC: 0 1 Throughput(Mbps) for 2 Frame(s) = 16.0272 Throughput(%) for 2 Frame(s) = 70.0000

RV序列指针图

上面的代码还生成了带有指向模拟子帧的RV序列中的元素指针值的图。这提供了需要重新传输的概念。我们绘制指针,并注意使用的RV值,以防这些值不是按升序组织的。例如,在某些情况下,RV序列可以是[0,2,3,1]。在使用时绘制这些值并不能清楚地了解所需的重传次数。

当传输一个新的传输块时,使用RV序列的第一个元素。在上面的图中,该子帧的值为1。这是模拟开始时的情况。如果需要重新传输,则选择RV序列中的下一个元素并增加指针。值2将被绘制为发生重传的子帧。如果需要进一步重传,指针值将进一步增加。注意,在连续帧的子帧5中,这些图没有显示任何值。这是因为在这些子帧中没有数据传输。

模拟10帧得到下图。注意,在某些情况下,最多需要3次重传。

吞吐量结果

在每个信噪比点完成后,MATLAB®命令窗口将显示模拟的吞吐量结果。它们也被捕获simThroughputmaxThroughputsimThroughput是一个阵列,其测量的吞吐量为所有模拟信噪比点的比特数。maxThroughput以比特数存储每个模拟信噪比点的最大可能吞吐量。

%绘制吞吐量图绘制(SNRIn simThroughput * 100. / maxThroughput,* - - - - - -。);包含(“信噪比(dB)”);ylabel (的吞吐量(%));标题(吞吐量和信噪比的)传说(legendString“位置”“西北”);网格

生成的图是用较少的帧数获得的,因此所显示的结果不具有代表性。一个较长的模拟获得1000帧产生的结果如下所示。

附录

这个例子使用了这些辅助函数。

选定的参考书目

  1. 3GPP TS 36.101《用户设备(UE)无线电发射和接收》