主要内容

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

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

  • TM1:单天线(端口0)

  • TM2:发射分集

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

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

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

该示例还展示了如何为不同的tcm参数化和自定义设置。它还支持使用并行金宝app计算工具箱™来减少有效的模拟时间。

介绍

此示例测量多个SNR点的吞吐量。提供的代码可以在许多传输模式下运行: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循环可以使用而不是循环SNR计算。这在该示例中表示。这parfor语句是并行计算工具箱的一部分,并行执行SNR循环,以减少总模拟时间。

模拟配置

该例子是执行模拟长度为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 [1在大多数情况下,子帧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 = {'16QAM'};发射分集模式(TM2)案件“TM2”流('\nTM2 -传输分集\n');simulationParameters.PDSCH.TxScheme =“TxDiversity”;simulationParameters.PDSCH.DCIFormat ='format1';SimulationParameters.cellrefp = 2;simulationParameters.PDSCH.Modulation = {'16QAM'};simulationParameters.PDSCH.NLayers = 2;% CDD模式(TM3)案件“TM3”流(“\ nTM3 CDD \ n”);simulationParameters.PDSCH.TxScheme ='CDD';simulationParameters.PDSCH.DCIFormat =“Format2A”;SimulationParameters.cellrefp = 2;simulationParameters.PDSCH.Modulation = {'16QAM''16QAM'};simulationParameters.PDSCH.NLayers = 2;%空间多路复用模式(TM4)案件“TM4”流('\ ntm4  - 基于码本的空间多路复用\ n');SimulationParameters.cellrefp = 2;simulationParameters.PDSCH.Modulation = {'16QAM''16QAM'};simulationParameters.PDSCH.DCIFormat ='format2';simulationParameters.PDSCH.TxScheme ='spatialmux';simulationParameters.PDSCH.NLayers = 2;%没有码本限制simulationParameters.PDSCH.CodebookSubset =''%单层空间复用模式(TM6)案件“TM6”流(......'\ ntm6  - 基于码本的空间复用与单层\ 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中的一种。结束%设置应用于所有TM的其他模拟参数字段simulationParameters。TotSubframes = 1;%一次生成一个子帧simulationParameters.PDSCH.CSI =“上”%软位由CSI加权
TM4 -基于码本的空间复用

称呼ltermcdl.,生成未指定的默认eNodeB参数模拟参数.这些将需要稍后产生波形使用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之间的延迟,如TS36.101所定义,表8.2.1.4.2-1 [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;%通道种子channel.nrxants = 2;% 2接收天线通道。DelayProfile =“环保署”%延迟概要channel.dopplerfreq = 5;%多普勒频率channel.mimocorrelation =.'低的'%多天线相关性channel.nterms = 16;衰落模型中使用的振荡器通道。ModelType ='gmeds'%瑞利衰落模型类型通道。InitPhase =“随机”%随机初始阶段通道。NormalizePathGains =“上”正规化延迟轮廓功率通道。NormalizeTxAnts =“上”传送天线规格化%使用返回的值设置通道模型的采样率% from OFDMINFO = LTEOFDMINFO(eNB);Channel.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;

处理循环

要确定每个SNR点处的吞吐量,请使用以下步骤在子帧上通过子帧对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),在此函数的输出中可用,用于解码下一个子帧。

  • 更新采购经理人指数。选择PMI并送回eNodeB以供将来使用。该步骤仅适用于TM4和TM6(闭环空间复用和单层闭环空间复用)。

%发射天线数量P从资源网格中获取% 方面。'dims'是m-by-n by-p,其中m是子载波的数量,n%为符号数,P为发射天线数。dims = ltedlresourcegridsize(eNB);p =昏暗(3);%初始化在模拟和分析中使用的变量%阵列存储所有信噪比点的最大吞吐量maxThroughput = 0(长度(SNRIn), 1);%数组存储所有SNR点的模拟吞吐量simthrougupput = zeros(长度(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;letcendstring = [的吞吐量:char (enb.PDSCH.TxScheme)];allRvSeqPtrHistory =细胞(1,元素个数(SNRIn));nFFT = ofdmInfo.Nfft;snrIdx = 1:元素个数(SNRIn)% parfor snrIdx = 1:numel(SNRIn)%要使用并行计算的使用,以增加速度评论%上面的'for'语句并取消下面的'parfor'语句的注释。%这需要并行计算工具箱。如果没有安装%'parcon'默认为正常的'for'语句。如果是'parfor'百分比使用它建议变量'displaysimulationInformation'上面的%设置为false,否则将显示模拟信息%每个SNR点都将重叠。%根据循环变量设置随机数生成器种子%以确保独立的随机流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),但此处的代码是必需的使用时为SNR循环中的变量完全初始化的%%并行计算工具箱。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;数据= HarqProcesses(Harqid).data;%将PMI设置为延迟队列中的适当值如果Strcmpi(eNB.PDSCH.TXScheme,'spatialmux')PMIIDX​​ = MOD(子阵容,PMIDELAY);延迟队列中%PMI索引enb. pdsh . pmiset = txPMIs(:, pmiIdx+1);%设置PMI结束%生成传输波形txWaveform = lteRMCDLTool(enb, data);%加入25个样品填料。这是为了涵盖延迟范围%期望从渠道建模(组合实现延迟和信道延迟扩展%)txwaveform = [txwaveform;零(25,p)];% #好< AGROW >%从'enbOut'获取HARQ ID序列进行HARQ处理harqProcessSequence = enbOut.PDSCH.HARQProcessSequence;%初始化每个子帧的通道时间通道。InitTime = subframeNo / 1000;%通过频道模型传递数据rxwaveform = ltefadingchannel(通道,txwaveform);计算噪声增益,包括下行功率的补偿%分配信噪比= 10 ^ ((SNRdB-enb.PDSCH.Rho) / 20);将噪声功率归一化以考虑采样率,即%是OFDM调制中使用的IFFT大小的函数天线数%n0 = 1 /(SQRT(2.0 * enb.cellrefp * double(nfft))* snr);创建加性高斯白噪声噪声= n0 *复杂(Randn(randn(rxwaveform)),......Randn(尺寸(rxwaveform))));%将AWGN添加到接收的时域波形rxwaveform = rxwaveform +噪声;在子帧0上,每帧计算一次新的同步% 抵消如果(mod(subframeno,10)== 0)offset = ltedlframeoffset(eNB,rxwaveform);如果(offset> 25)offset =偏移(结束);结束偏移= [偏移偏移];%#行结束%同步接收的波形rxwaveform = rxwaveform(1 + offset:结束,:);%对接收到的数据进行OFDM解调,重新创建%资源网格rxSubframe = lteofdm解调器(enb, rx波形);%信道估计数如果(perfectChanEstimator) estChannelGrid = lteDLPerfectChannelEstimate(enb, channel, offset);%#行noiseGrid = lteOFDMDemodulate(enb, noise(1+offset:end,:));噪音= var (noiseGrid (:));其他的[EstchannelGrid,噪声] = LTedLchanneLeStimate(......eNB,eNB.PDSCH,CEC,RXSUBFRAME);结束%获得PDSCH指数pdschindices = ltepdschindices(eNB,enb.pdsch,enb.pdsch.prbset);%从接收的子帧获取PDSCH资源元素。缩放由PDSCH功率因数Rho接收的子帧。PDSCH是的单元格参考符号%信道估计(用于PDSCH解码阶段)不是。[pdschrx,pdschhest] = lteextractresources(pdschindices,......rxsubframe *(10 ^( -  enb.pdsch.rho / 20)),Estchannelgrid);%解码PDSCH.dlschbits = 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;结束结束%计算最大和模拟吞吐量maxthrougpul(snridx)= sum(txedtrblksizes);%最大吞吐量simThroughput (snrIdx) = (bitTput, 2)总和;%模拟吞吐量%在命令窗口中动态显示结果fprintf([[' \ nThroughput (Mbps)的num2str (NFrames)“帧(s)”],......“= % .4f \ n”), 1 e-6 * simThroughput (snrIdx) / (NFrames * 10 e - 3));流([的吞吐量(% %)num2str (NFrames)'帧(s) = %.4f\n'],......Simkrouguppul(Snridx)* 100 / maxthrougpul(snridx));allrvseqptrhistory {snridx} = rvseqptrhistory;结束%绘制所有HARQ进程的RV序列hplotrvsequence(snrin,allrvseqptrhistory,nframes);
模拟信噪比为10.3 dB的2帧(s)子帧: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 index: 1 1, CRC: 0 1 Subframe: 5. HARQ process ID: 6 Block error. RV index: 1 1, CRC: 1 1 Subframe: 6. HARQ process ID: 7 Block error. RV index: 1 1, CRC: 1 1 Subframe: 7. HARQ process ID: 8 Block error. RV index: 1 1, CRC: 1 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: 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的子帧绘制2的值。如果需要进一步重传,则指针值将进一步增加。注意,该曲线不会在连续帧的子帧5中显示任何值。这是因为在这些子帧中没有任何数据。

获得如下所示的图形模拟10帧。注意在某些情况下,需要多达3个重传。

吞吐量结果

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

%绘制吞吐量图绘制(SNRIn simThroughput * 100. / maxThroughput,* - - - - - -。);包含('snr(db)');ylabel ('吞吐量(%)');标题('吞吐量与snr')传说(legendString“位置”“西北”);网格

已经获得了产生的绘制数量较少的帧,因此所示的结果不是代表性的。使用1000帧获得的较长模拟,产生如下所示的结果。

附录

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

选定的参考书目

  1. 3GPP TS 36.16.101“用户设备(UE)无线电传输和接收”