主要内容

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

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

  • TM1:单天线(端口0)

  • TM2:发射分集

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

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

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

该示例还展示了如何为不同的tm参数化和自定义设置。它还支持使用并行金宝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结果来确定的。

预编码矩阵指示(Precoder Matrix Indication, PMI)反馈用于需要预编码矩阵(TM4和TM6)反馈的tm。

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

模拟配置

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

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

eNodeB配置

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

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

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

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

simulationParameters = [];%清除模拟参数simulationParameters。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 .调制= {16 qam的};发射分集模式(TM2)情况下“TM2”流(\nTM2 -发送分集\n);simulationParameters.PDSCH.TxScheme =“TxDiversity”;simulationParameters.PDSCH.DCIFormat =“Format1”;simulationParameters。CellRefP = 2;simulationparameters . pdsch .调制= {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 .调制= {16 qam的16 qam的};simulationParameters.PDSCH.NLayers = 2;空间多路复用模式(TM4)情况下“TM4”流(\nTM4 -基于码本的空间多路复用\n);simulationParameters。CellRefP = 2;simulationparameters . pdsch .调制= {16 qam的16 qam的};simulationParameters.PDSCH.DCIFormat =“Format2”;simulationParameters.PDSCH.TxScheme =“SpatialMux”;simulationParameters.PDSCH.NLayers = 2;%无码本限制simulationParameters.PDSCH.CodebookSubset =单层空间多路复用模式(TM6)情况下“TM6”流(...\nTM6 -基于码本的单层空间多路复用\n);simulationParameters。CellRefP = 4;simulationparameters . pdsch .调制= {“正交相移编码”};simulationParameters.PDSCH.DCIFormat =“Format2”;simulationParameters.PDSCH.TxScheme =“SpatialMux”;simulationParameters.PDSCH.NLayers = 1;%无码本限制simulationParameters.PDSCH.CodebookSubset =否则错误(“传输模式应该是TM1、TM2、TM3、TM4或TM6中的一种。”结束%设置适用于所有tm的其他simulationParameters字段simulationParameters。TotSubframes = 1;每次生成一个子帧simulationParameters.PDSCH.CSI =“上”%软位由CSI加权
基于码本的空间多路复用

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

enb = lteRMCDL(simulationParameters);

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

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

码字的数量,作战飞机的表项个数enb.PDSCH.Modulation字段。

ncw = length(字符串(enb. pdsch .调制));

设置闭环TM4和TM6的巡检延迟时间。这是在TS 36.101,表8.2.1.4.2-1中定义的一个PMI从UE传递到eNodeB之间的延迟。

pmiddelay = 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 0.48 0.48调制码字2:16QAM传输块大小码字2:11448 11448 11448 11448 11448 11448 11448码率码字2:0.515 0.48 0.48 0.48 0.48 11448 11448 11448 11448 ------------------------------------------------------------------

传播信道模型配置

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

通道。种子= 6;%沟道种子通道。NRxAnts = 2;% 2接收天线通道。DelayProfile =“环保署”%延迟配置文件通道。DopplerFreq = 5;%多普勒频率通道。MIMOCorrelation =“低”%多天线相关性通道。NTerms = 16;衰落模型中使用的振荡器通道。ModelType =“GMEDS”瑞利衰落模型类型通道。InitPhase =“随机”%随机初始相通道。NormalizePathGains =“上”正常化延迟配置文件功率通道。NormalizeTxAnts =“上”用于发射天线归一化

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

ofdmInfo = lteOFDMInfo(enb);通道。SamplingRate = ofdmInfo.SamplingRate;最大信道延迟(多路径和信道滤波)通道。InitTime = 0;[~,chInfo] = lteFadingChannel(channel,0);获取频道信息maxChDelay = ceil(max(chinfo . pathsampledelayed)) + chInfo.ChannelFilterDelay;

信道估计器配置

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

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

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

配置信道估计器cec。PilotAverage =“UserDefined”导频符号平均的类型cec。FreqWindow = 41;%频率窗口大小在REscec。TimeWindow = 27;%时间窗口大小在REscec。InterpType =“立方”% 2D插值类型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用于选择预编码矩阵。终端推荐的PMI用于eNodeB进行数据传输。有延误pmiDelayUE推荐PMI和eNodeB使用它选择预编码矩阵之间的子帧。最初是一组pmiDelay采用随机pmi。

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

  • 噪声信道建模。波形通过衰落信道,并添加噪声(AWGN)。

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

  • 执行信道估计。估计了信道响应和噪声水平。这些估计值用于解码PDSCH。

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

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

  • 更新采购经理人指数。选中的PMI反馈给eNodeB供将来使用。该步骤仅适用于TM4和TM6(闭环空间复用和单层闭环空间复用)。

%从资源网格中获取发射天线个数P%的维度。'dims'是M乘N乘p其中M是子载波数N%为符号数,P为发射天线数。dims = lteDLResourceGridSize(enb);P = dims(3);初始化模拟和分析中使用的变量数组来存储所有信噪比点的最大吞吐量maxThroughput = 0(长度(SNRIn),1);数组来存储所有信噪比点的模拟吞吐量simThroughput = 0(长度(SNRIn),1);获取HARQ处理的HARQ ID序列。这是一个索引列表%用于HARQ进程调度。[~,~,enbOut] = lteRMCDLTool(enb, []);harqProcessSequence = en布特. pdsch . harqProcessSequence;临时变量“enb_init”,“channel_init”和'harqProcessSequence_init'用于优化并行处理(仅%如果使用并行计算工具箱运行示例)Enb_init = enb;Channel_init = channel;harqProcessSequence_init = harqProcessSequence;legendString = [的吞吐量:char (enb.PDSCH.TxScheme)];allRvSeqPtrHistory = cell(1, number (SNRIn));nFFT = ofdmInfo.Nfft;snrIdx = 1:数字(SNRIn)% parfor snrIdx = 1:数值(SNRIn)允许使用并行计算,以提高注释输出的速度%上面的'for'语句,并取消下面的'parfor'语句的注释。这需要并行计算工具箱。如果没有安装% 'parfor'将默认为普通的'for'语句。如果'parfor'是建议变量'displaySimulationInformation'%以上设置为false,否则模拟信息显示为%每个信噪比点都会重叠。根据循环变量设置随机数生成器种子%,确保独立的随机流rng (snrIdx“combRecursive”);SNRdB = SNRIn(snrIdx);流(在%g dB信噪比下模拟%d帧(s)\n'、SNRdB NFrames);初始化模拟和分析中使用的变量偏移量= 0;初始化帧偏移值偏移量= 0;初始化无线电帧的帧偏移值blkCRC = [];所有考虑的子帧的块CRCbitTput = [];每个子帧成功接收的比特数txedTrBlkSizes = [];%每子帧传输的比特数Enb = enb_init;初始化RMC配置Channel = channel_init;初始化通道配置harqProcessSequence = harqProcessSequence_init;初始化HARQ进程序列pmiIdx = 0;延迟队列中的PMI索引变量harqPtrTable存储的历史值%指针指向所有HARQ进程的RV序列值。%由于有些子帧没有数据,所以预分配给nanrvSeqPtrHistory = NaN(ncw, NFrames*10);初始化所有HARQ进程的状态harqProcesses = hNewHARQProcess(enb);使用随机pmi的第一' pmiddelay '子帧,直到反馈UE可用百分比;请注意,PMI反馈仅适用于%空间多路复用tm (TM4和TM6),但是这里的代码是必需的%用于信噪比循环中变量的完全初始化并行计算工具箱。pmidims = ltePMIInfo(enb,enb. pdsch);txPMIs = randi([0 pmidims.]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, pmiddelay);延迟队列中的PMI索引enb.PDSCH.PMISet = txPMIs(:, pmiIdx+1);%设置PMI结束生成发射波形tx波形= lteRMCDLTool(enb, data);添加maxChDelay示例填充。这是覆盖的范围%的信道建模预期延迟(组合为%实现延迟和信道延迟扩展)tx波形= [tx波形;0 (maxChDelay P));% #好< AGROW >从'enbOut'获取HARQ ID序列用于HARQ处理harqProcessSequence = en布特. pdsch . harqProcessSequence;初始化每个子帧的通道时间通道。InitTime = subframeNo/1000;通过通道模型传递数据rx波形= lteFadingChannel(通道,tx波形);计算噪声增益,包括下行功率补偿%分配信噪比= 10^((SNRdB-enb.PDSCH.Rho)/20);将噪声功率归一化以考虑采样率,即%是OFDM调制中使用的IFFT大小的函数天线数%N0 = 1/(√(2.0*enb.CellRefP*double(nFFT))*信噪比);创建加性高斯白噪声噪声= N0*complex(randn(size(rx波形)),...randn(大小(rxWaveform)));将AWGN添加到接收的时域波形中rx波形= rx波形+噪声;每一帧,在子帧0上计算一次新的同步%抵消如果(mod(subframameno,10) == 0) offset = lteDLFrameOffset(enb, rx波形);如果(offset > maxChDelay) offset = offset (end);结束offset = [offset offset];% #好吧结束同步接收到的波形rx波形= rx波形(1+offset:end,:);对接收到的数据进行OFDM解调以重建数据%资源网格rxSubframe = lteOFDMDemodulate(enb, rx波形);%信道估计如果(perfectChanEstimator) estChannelGrid = lteDLPerfectChannelEstimate(enb, channel, offset);% #好吧noiseGrid = lteOFDMDemodulate(enb, noise(1+offset:end,:));noiseEst = 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, pdschIndices,...rxSubframe * (10 ^ (-enb.PDSCH.Rho / 20)), estChannelGrid);解码PDSCHdlschBits = ltePDSCHDecode(...enb, enb。PDSCH, pdschRx, pdschest, 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)])结束结束存储用于计算吞吐量的值仅适用于有数据的子帧如果any(trBlk) blkCRC = [blkCRC harqProcesses(harqID).blkerr];% #好< AGROW >bitTput = [bitTput trBlk.*(1- . ....harqProcesses (harqID) .blkerr)];% #好< AGROW >txedTrBlkSizes = [txedTrBlkSizes trBlk];% #好< AGROW >结束向eNodeB提供PMI反馈如果strcmpi (enb.PDSCH.TxScheme“SpatialMux”) PMI = ltePMISelect(enb, enb.)PDSCH, estChannelGrid, noiseEst);txpmi (:, pmiIdx+1) = PMI;结束结束计算最大吞吐量和模拟吞吐量maxThroughput(snrIdx) = sum(txedTrBlkSizes);最大可能吞吐量simThroughput(snrIdx) = sum(bitTput,2);%模拟吞吐量在命令窗口中动态显示结果流([[\ n吞吐量(Mbps)num2str (NFrames)“帧”],...“= % .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信噪比为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,CRC: 0子帧: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: 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 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: 1 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 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 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) = 14.3100 Throughput(%) for 2 Frame(s) = 62.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 No error. RV index: 1 2, CRC: 0 0 Subframe: 10. HARQ process ID: 3 No error. RV index: 1 2, CRC: 0 0 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 Block error. RV index: 1 1, CRC: 0 1 Subframe: 18. HARQ process ID: 3 Block error. RV index: 1 1, CRC: 0 1 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®命令窗口中。它们也被捕获在simThroughput而且maxThroughputsimThroughput是所有模拟信噪比点的测量吞吐量(以比特数表示)的数组。maxThroughput为每个模拟信噪比点存储最大可能吞吐量的比特数。

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

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

附录

本例使用这些helper函数。

选定的参考书目

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