基于非码本的预编码方案的PDSCH吞吐量:端口5 (TM7),端口7或8或端口7-8 (TM8),端口7-14 (TM9和TM10)
本示例演示如何使用LTE Toolbox™测量以下非基于码本的预编码传输模式(TM)的物理下行共享信道(PDSCH)吞吐量性能:
TM7:基于非码本的单层预编码(端口5)
TM8:基于非码本的最多两层预编码(双层端口7-8,或单天线端口,端口7或8)
TM9和TM10:无码本预编码,最多8层。接口7-14或单天线接口,端口7或8
支持FDD和TDD双工方案。金宝app该示例还展示了如何参数化和自定义不同传输模式的设置。它还支持使用并行金宝app计算工具箱™,以减少有效的仿真时间。
简介
这个例子测量了一些SNR点的吞吐量。所提供的代码可以在多种传输模式下运行:TM7、TM8、TM9和TM10。支持FDD和TDD双工方案。金宝app有关如何建模TM1、TM2、TM3、TM4和TM6的信息,请查看以下示例:PDSCH对单天线(TM1)、发射分集(TM2)、开环(TM3)和闭环(TM4/6)空间复用的吞吐量一致性测试
由于考虑了基于非码本的TMs,因此必须计算预编码(波束形成)矩阵。这是使用奇异值分解(SVD)方法实现的。假设完全了解通道。
对于每个考虑的信噪比点,在一个子帧一个子帧的基础上操作:
预编码(波束形成)矩阵由一个完美的信道估计计算。
生成一个填充的资源网格,并对OFDM进行调制以创建要传输的波形。
生成的波形通过一个有噪声的衰落信道传递。
接收机操作(信道估计、均衡、解调和解码)被执行。
PDSCH的吞吐量性能是通过通道解码器输出端的块CRC结果来确定的。
一个parfor
循环可以用来代替为
循环进行信噪比计算。这在示例中说明了。的parfor
语句是并行计算工具箱的一部分,并并行执行信噪比循环,以减少总仿真时间。
模拟配置
执行该示例的模拟长度为NFrames
= 2帧的数量信噪比点。大量的NFrames
应该用于产生有意义的吞吐量结果。SNRIn
可以是值的数组或标量。一些tm和某些调制方案对噪声和信道损伤的鲁棒性比其他方案更强,因此不同的参数集可能必须使用不同的信噪比值。
NFrames = 2;帧数%SNRIn = [-4 1];%信噪比范围,单位为dB
最初为所有tm指定了一组公共参数,这些参数包括带宽、期望的码率、调制方案和分配的资源块集。不指定RMC号可确保调度所有下行子帧。如果指定RMC(例如:'R.0'),子帧调度如TS 36.101 [1]。
的变量txMode
通过switch语句选择TM。对于每个TM,都指定了所需的参数。此示例不执行DCI格式解码,因此DCIFormat
字段不是必须的。但是,由于DCI格式与TM紧密相连,因此为了完整性起见,将其包括在内。
对于本例,TM9和TM10是相同的,除了DCI格式,但是为了完整性,它们在switch语句中是分开的。
一旦指定了基本参数集,将调用lteRMCDL
是否需要完全填充下行链路参数结构enb
.
simulationParameters = [];%清除模拟参数simulationParameters。NDLRB = 50;simulationParameters.PDSCH.TargetCodeRate = 0.5;simulationparameters . pdsch .调制= {16 qam的};simulationParameters.PDSCH.PRBSet = (0:9)';txMode =“TM8”;% tm7, tm8, tm9, tm10DuplexMode =“TDD”;% ' fdd ', ' tdd '开关txMode情况下“TM7”%单层(端口5)simulationParameters.PDSCH.DCIFormat =“Format1”;simulationParameters.PDSCH.TxScheme =“Port5”;simulationParameters.PDSCH.NLayers = 1;Ntxants = 4;情况下“TM8”最多可达两层(双层端口7-8,或单天线%端口,端口7或8)simulationParameters.PDSCH.DCIFormat =“Format2B”;simulationParameters.PDSCH.TxScheme =“Port7-8”;%’Port7-8”、“Port8”simulationParameters.PDSCH.NLayers = 2;Ntxants = 4;simulationParameters.PDSCH.NSCID = 0;情况下“TM9”%最多8层(最多8层端口7-14或单个%天线端口,端口7或8)simulationParameters.PDSCH.DCIFormat =“Format2C”;simulationParameters.PDSCH.TxScheme =“Port7-14”;simulationParameters.PDSCH.NLayers = 4;Ntxants = 8;simulationParameters。CSIRefP = ntxants;情况下“TM10”%最多八层(最多八层)端口7-14或%单天线端口,端口7或8)simulationParameters.PDSCH.DCIFormat =“Format2D”;simulationParameters.PDSCH.TxScheme =“Port7-14”;simulationParameters.PDSCH.NLayers = 4;Ntxants = 8;simulationParameters。CSIRefP = ntxants;否则错误(“传输模式应该是TM7、TM8、TM9或TM10中的一种。”)结束对于2个码字(超过4层),调制字段需要两个值,每个码字一个值如果(simulationParameters.PDSCH。NLayers> 4) && (length(simulationParameters.PDSCH.Modulation)<2) simulationParameters.PDSCH.Modulation = repmat(simulationParameters.PDSCH.Modulation,1,2);结束
预编码矩阵的大小W
(波束形成矩阵)为NLayers
——- - - - - -ntxants
.发射天线的数量取自W
在随后的工具箱函数调用中。接收天线的数量稍后作为传播信道的一部分指定。
将W初始化为零simulationParameters.PDSCH. w = 0NLayers ntxants);
设置双工模式,并指定子帧数为1。代码每次重复生成一个子帧,直到总共生成NFrames
生成。
simulationParameters。DuplexMode =DuplexMode; simulationParameters.TotSubframes = 1;
调用lteRMCDL
中未指定的默认eNodeB参数simulationParameters
.稍后将需要使用这些参数来生成波形lteRMCDLTool
.
enb = lteRMCDL(simulationParameters);
输出enb
结构包含传输块大小和帧内每个码字子帧的冗余版本序列等字段。这些将在稍后的模拟中使用。
trBlkSizes = enb.PDSCH.TrBlkSizes;rvSequence = enb.PDSCH.RVSeq;
码字的数量,作战飞机
的表项个数enb.PDSCH.Modulation
字段。
ncw = length(字符串(enb. pdsch .调制));
打印一些更相关的模拟参数的摘要。确认参数设置与预期值一致。在手动指定传输块大小时,所显示的报告码率对于检测问题很有用。典型值为1/3、1/2和3/4。
hDisplayENBParameterSummary (enb txMode);
——参数摘要:--------------------------------------------双工模式:TDD传输模式:TM8传输方案:Port7-8下行资源块数量:50分配资源块数量:10小区专用参考信号端口:1发射天线数量:4传输层数:2码字数量:1调制码字1:16QAM传输块大小码字1:4584 4008 00 4584 4584 4008 00 4584码率码字1:0.5053 - 0.4941 0 0 0.5053 0.5053 0.4941 0 0 0.5053 ------------------------------------------------------------------
传播信道和信道估计器配置
结构通道
包含通道模型配置参数。
通道= struct;通道配置结构通道。种子= 6;%沟道种子通道。NRxAnts = 8;%接收天线个数通道。DelayProfile =“环保署”;%延迟配置文件通道。DopplerFreq = 5;%多普勒频率通道。MIMOCorrelation =“低”;%多天线相关性通道。NTerms = 16;衰落模型中使用的振荡器通道。ModelType =“GMEDS”;瑞利衰落模型类型通道。InitPhase =“随机”;%随机初始相通道。NormalizePathGains =“上”;正常化延迟配置文件功率通道。NormalizeTxAnts =“上”;用于发射天线归一化信道采样率取决于OFDM中使用的FFT大小%调制器。这可以使用函数lteOFDMInfo来获得。ofdmInfo = lteOFDMInfo(enb);通道。SamplingRate = ofdmInfo.SamplingRate;最大信道延迟(多路径和信道滤波)通道。InitTime = 0;[~,chInfo] = lteFadingChannel(channel,0);获取频道信息maxChDelay = ceil(max(chinfo . pathsampledelayed)) + chInfo.ChannelFilterDelay;
定义信道估计器配置结构。由于使用非码本的TMs,所以将DMRS设置为信道估计的参考信号。
Cec = struct;通道估计配置结构cec。PilotAverage =“UserDefined”;导频符号平均的类型cec。FreqWindow = 41;%频率窗口大小cec。TimeWindow = 27;%时间窗口大小cec。InterpType =“立方”;% 2D插值类型cec。InterpWindow =“中心”;插补窗口类型cec。InterpWinSize = 1;插值窗口大小%cec。参考=dmr的;%以DMRS为参考信号
显示仿真信息
的变量displaySimulationInformation
控制模拟信息的显示,例如用于每个子帧的HARQ进程ID。如果出现CRC错误,还会显示RV序列的索引值。
displaySimulationInformation = true;
处理链
为了确定每个信噪比点的吞吐量,子帧逐子帧PDSCH处理链包括:
计算预编码矩阵-采用完美信道估计方法计算预编码矩阵。FDD和TDD的计算过程略有不同。下一节将详细解释此步骤。
更新当前HARQ流程-HARQ流程要么携带新的传输数据,要么重新传输先前发送的传输数据,这取决于基于CRC结果的确认(ACK)或否定确认(NACK)。所有这些都由HARQ调度器处理,hHARQScheduling.m.根据HARQ状态更新PDSCH数据。
创建发射波形-将HARQ进程生成的数据传递给
lteRMCDLTool
函数,以产生OFDM调制波形,包含物理通道和信号。
噪声信道建模-将波形通过衰落信道并添加噪声(AWGN)。
执行同步和OFDM解调-偏移接收到的符号,以考虑实现延迟和信道延迟扩展的组合。OFDM解调符号。
执行信道估计-估计信道响应和噪声水平。使用这些估计来解码PDSCH。
解码PDSCH -使用获得接收码字的估计值
ltePDSCHDecode
为所有发射和接收天线对解调和解编恢复的PDSCH符号。
HARQ进程的下行共享信道(DL-SCH)解码和块CRC错误存储-将已解码软位的向量传递给
lteDLSCHDecode
,它解码码字并返回用于确定系统吞吐量的块CRC错误。新的软缓冲区的内容,harqProc .decState (harqID)
,在该函数的输出处可用,用于解码下一个子帧。
预编码矩阵计算
由于基于非码本的tm是建模的,因此必须计算基于信道估计的预编码(波束形成)矩阵。为简单起见,假设完全了解通道。
图中显示了与信道估计相关的时序,预编码矩阵W
FDD和TDD模式的计算和预编码操作。
对于TDD(上行-下行配置1帧结构),信道估计在DL子帧之前的最后一个UL子帧中。该信道估计用于计算预编码矩阵W
.所有后续DL子帧(包括特殊子帧)直到下一个UL子帧都用这个矩阵预编码W
.
对于FDD,在预编码矩阵的计算之间有一个子帧的延迟W
和使用它的子帧。例如,子帧中使用的预编码矩阵n
已经计算了子帧中获得的信道估计n - 1
,如图所示。
这个函数hCalculatePrecodingMatrix计算W
由:
为所考虑的子帧获得一个完美的信道估计
对所有分配的RBs的通道估计求平均值
计算奇异值分解,提取第一奇异值
NLayers
列来获得预编码向量。
如果需要,不同的计算或值W
可以用在这里代替调用hCalculatePrecodingMatrix.m.
该图显示了信道估计的平均过程和W
计算。
所描述的过程显示了单通道矩阵如何估计,H
,是通过对整个已分配资源块集按时间和频率求平均得到的。使用这个通道估计,H
,预编码矩阵,W
,通过奇异值分解得到。
注意,对于单个资源块的分配,预编码矩阵W
通常会很好地匹配信道条件,与最佳预编码的偏差很小。但随着分配规模的增加,预编码矩阵考虑了整个分配的信道条件的平均值。这种平均会导致与最佳预编码矩阵的偏差。因此,随着资源分配规模的增加,您可以预期性能会下降。
处理循环
信噪比点处理的“for”循环包含在下面。为了提高并行计算的速度,在循环中使用'parfor'而不是'for'。这需要并行计算工具箱。如果没有安装,'parfor'将默认为普通的'for'语句。如果使用'parfor',建议将变量displaySimulationInformation
以上设置为false,否则各信噪比点的仿真信息显示将重叠。
初始化模拟和分析中使用的变量数组来存储所有信噪比点的最大吞吐量maxThroughput = 0(长度(SNRIn),1);数组来存储所有信噪比点的模拟吞吐量simThroughput = 0(长度(SNRIn),1);用于存储RV序列索引历史的%数组allRvSeqIdxHistory = cell(1, number (SNRIn));用于优化并行处理的通道结构副本(仅当%使用并行计算工具箱运行示例)channelInit = channel;在模拟过程中,enb的某些字段将被更新,请复制到%在模拟每个信噪比点时重新初始化它enbInit = enb;对于TDD,预先计算子帧类型的向量:下行链路的D, S和U,% special和uplink分别如果strcmpi (DuplexMode“TDD”) subframeType = char(10,1);initialSubframeNo = enb.NSubframe;为sNo = 0:9%表示一个帧中的所有子帧enb。NSubframe = sNo;duplexInfo = lteDuplexingInfo(enb);subframeType(sNo+1) = duplexInfo.SubframeType(1);第一个字符:D, S或U结束enb。NSubframe = initialSubframeNo;结束% CFI可以是标量或向量,创建CFI的本地副本作为向量%(每个子帧一个值)如果CFI = repmat(enb.CFI,1,10);其他的CFI = en .CFI;结束获取HARQ处理的HARQ ID序列。这是一个索引列表%用于HARQ进程调度。[~,~,enbOut] = lteRMCDLTool(enb, []);harqProcessSequenceInit = en布特. pdsh . harqprocesssequence;为snrIdx = 1:数字(SNRIn)%注释用于并行计算%parfor snrIdx = 1:数值(SNRIn) % uncomment用于并行计算根据循环变量设置随机数生成器种子%,确保独立的随机流rng (snrIdx“combRecursive”);重新初始化变量(它们在每个信噪比点被修改%模拟)enb = enbInit;channel = channelInit;harqProcessSequence = harqProcessSequenceInit;初始化所有HARQ进程的状态harqProcesses = hNewHARQProcess(enb);为主循环设置变量lastOffset = 7;初始化整体帧定时偏移量%(设置为通道实现延迟)frameOffset = 7;初始化帧定时偏移量%(设置为通道实现延迟)blkCRC = [];所有考虑的子帧的块CRCbitTput = [];每个子帧成功接收的比特数txedTrBlkSizes = [];%每子帧传输的比特数precodingMatrix = [];预编码矩阵rxSymbols = [];星座图的% DL-SCH符号(码字1)rxSymbols2 = [];星座图的% DL-SCH符号(码字2)变量rvSeqIdxHistory存储了% RV索引序列用于所有HARQ进程rvSeqIdxHistory = nan(ncw, NFrames*10);%标记,指示预编码矩阵W是否可用。这很有用%,如果在模拟开始时没有计算W。isWready = false;%标志,表示要处理的子帧。设置为true,如果%有要处理的数据在子帧中,即DL子帧或%非零传输块大小。processSubframe = false;主for循环:用于所有子帧为subframeNo = 0 (NFrames*10-1)更新子帧号enb。NSubframe = subframeNo;加载当前子帧的CFIenb。CFI = CFI(mod(subframeNo,length(CFI))+1);当前子帧的通道时间通道。InitTime = subframeNo/1000;从HARQ进程序列中获取子帧的HARQ进程IDharqID = harqProcessSequence(mod(subframeNo, length(harqProcessSequence))+1);提取当前子帧传输块大小(秒)trBlk = trBlkSizes(:, mod(subframeNo, 10)+1).';加载前一个子帧计算的预编码矩阵%存在,如果有数据要传输。将标志设置为触发器%子帧处理。如果isWready && any(trBlk) harqProcesses(harqID). txconfig。W = precodingMatrix;processSubframe = true;其他的processSubframe = false;结束预编码矩阵计算如果strcmpi (DuplexMode“TDD”)估计UL子帧中的信道如果比较字符串(subframeType (mod (subframeNo, 10) + 1),“U”processSubframe = false;% UL子帧,没有DL数据仅当下一个子帧为DL时进行信道估计如果比较字符串(subframeType (mod ((subframeNo + 1), 10) + 1),' D ') precodingMatrix = hCalculatePrecodingMatrix(enb, channel);isWready = true;结束结束其他的% FDD获取下一个子帧的传输块trBlkNext = trBlkSizes(:, mod(subframeNo+ 1,10)+1).';计算下一个子帧的预编码矩阵%携带数据(即非零trBlkNext)如果any(trBlkNext) precodingMatrix = hCalculatePrecodingMatrix(enb, channel);isWready = true;其他的isWready = false;结束结束子帧处理如果processSubframe更新当前HARQ流程harqProcesses(harqID) = hHARQScheduling(...harqProcesses(harqID), subframeNo, rvSequence);显示运行时信息如果displaySimulationInformation && any(trBlk)' ');disp ([的子帧:num2str (subframeNo)”。HARQ过程索引:'num2str (harqID)]);结束更新RV序列索引表rvSeqIdxHistory (:, subframeNo + 1) =...harqProcesses harqID .txConfig.RVIdx。';使用HARQ更新PDSCH传输配置%进程状态enb。PDSCH = harqProcesses(harqID).txConfig;单元有效负载%dlschTransportBlk = harqProcesses(harqID).data;%创建发送波形tx波形= lteRMCDLTool(enb, dlschTransportBlk);添加maxChDelay示例填充。这是为了覆盖延迟的范围%的预期从通道建模(组合%实现延迟和信道延迟扩展)tx波形= [tx波形;0 (maxChDelay ntxants)];% #好< AGROW >通过通道模型传递数据rxnoiseless波形= lteFadingChannel(通道,tx波形);计算噪声增益,包括下行链路的补偿功率分配百分比信噪比= 10^(SNRIn(snrIdx)-enb.PDSCH.Rho)/20);将噪声功率归一化以考虑采样率,%,这是OFDM中使用的IFFT大小的函数%调制,天线数N0 = 1/(根号(2.0*ntxants*double(ofdmInfo.Nfft))*信噪比);创建加性高斯白噪声噪声= N0*complex(randn(size(rxnoiseless波形)),...randn(大小(rxNoiselessWaveform)));在接收到的时域波形和标度中添加AWGN所需功率%rx波形= rxnoiseless波形+噪声;%接收每一帧,在子帧0上,计算一个新的%同步偏移量。范围内的偏移量%来自信道建模的预期延迟(一个组合实现延迟和信道延迟扩散%)%表示成功如果(mod(subframamo,10)==0) frameOffset = lteDLFrameOffset(enb, rx波形);如果(frameOffset = lastOffset;结束lastOffset = frameOffset;结束rx波形= rx波形(1+frameOffset:end,:);对接收到的数据进行OFDM解调得到%资源网格rxSubframe = lteOFDMDemodulate(enb, rx波形);%信道估计[estChannelGrid,噪音]=...lteDLChannelEstimate (enb.PDSCH, enb cec rxSubframe);%执行均衡,解预编码,层反映射,%的解调和解扰对接收数据使用%通道估计。%获取PDSCH指数pdschIndices = ltePDSCHIndices(enb,enb. pdsch,enb. pdsch . prbset);获取PDSCH资源元素。缩放接收的子帧由PDSCH功率因数Rho。PDSCH按% Rho,而单元格参考符号用于通道%估计(用于PDSCH解码阶段)则不是。[pdschRx, pdschHest] = lteExtractResources(pdschIndices, pdschIndices,...rxSubframe * (10 ^ (-enb.PDSCH.Rho / 20)), estChannelGrid);解码PDSCH[dlschBits,dlschSymbols] = ltePDSCHDecode(enb,enb.)PDSCH,...pdschRx pdschHest,噪音);存储星座解码后的DLSCH符号%绘制rxSymbols = [rxSymbols;dlschSymbols {1} (:));% #好< AGROW >如果ncw>1 rxSymbols2 = [rxSymbols2;dlschSymbols {2} (:));% #好< AGROW >结束解码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 >结束结束结束%图接收符号星座如果displaySimulationInformation图;情节(rxSymbols,“r”);标题([的星座。信噪比的...num2str (SNRIn (snrIdx))dB。码字1 '])包含(“同相振幅”);ylabel (“正交振幅”);如果作战飞机> 1图;情节(rxSymbols2“r”);标题([的星座。信噪比的...num2str (SNRIn (snrIdx))dB。码字2》])包含(“同相振幅”);ylabel (“正交振幅”);结束结束计算最大吞吐量和模拟吞吐量maxThroughput(snrIdx) = sum(txedTrBlkSizes);最大可能吞吐量simThroughput(snrIdx) = sum(bitTput,2);%模拟吞吐量在命令窗口中动态显示结果流('\nSNR = %。2 f dB。%d帧的吞吐量= %。4 f Mbps \ n”,...SNRIn (snrIdx) NFrames 1 e-6 * simThroughput (snrIdx) / (NFrames * 10 e - 3));流(' snr = %。2 f dB。%d帧的吞吐量(%%)= %。4 f % % \ n”,...SNRIn (snrIdx)、NFrames simThroughput (snrIdx) * 100 / maxThroughput (snrIdx));allRvSeqIdxHistory{snrIdx} = rvSeqIdxHistory;结束
子帧:4。HARQ进程索引:3块错误。RV索引:1,CRC: 1子帧:5。HARQ进程索引:4 Block error。RV索引:1,CRC: 1子帧:6。HARQ进程索引:5 Block error。RV索引:1,CRC: 1子帧:9。HARQ进程索引:6 Block error。RV索引:1,CRC: 1子帧:10。HARQ进程索引:7块错误。 RV index: 1, CRC: 1 Subframe: 11. HARQ process index: 2 Block error. RV index: 1, CRC: 1 Subframe: 14. HARQ process index: 1 Block error. RV index: 1, CRC: 1 Subframe: 15. HARQ process index: 3 No error. RV index: 2, CRC: 0 Subframe: 16. HARQ process index: 5 No error. RV index: 2, CRC: 0 Subframe: 19. HARQ process index: 4 No error. RV index: 2, CRC: 0 SNR = -4.00 dB. Throughput for 2 Frame(s) = 0.6588 Mbps SNR = -4.00 dB. Throughput(%) for 2 Frame(s) = 29.8694 % Subframe: 4. HARQ process index: 3 No error. RV index: 1, CRC: 0 Subframe: 5. HARQ process index: 4 No error. RV index: 1, CRC: 0 Subframe: 6. HARQ process index: 5 No error. RV index: 1, CRC: 0 Subframe: 9. HARQ process index: 6 No error. RV index: 1, CRC: 0 Subframe: 10. HARQ process index: 7 No error. RV index: 1, CRC: 0 Subframe: 11. HARQ process index: 2 No error. RV index: 1, CRC: 0 Subframe: 14. HARQ process index: 1 No error. RV index: 1, CRC: 0 Subframe: 15. HARQ process index: 3 No error. RV index: 1, CRC: 0 Subframe: 16. HARQ process index: 5 No error. RV index: 1, CRC: 0 Subframe: 19. HARQ process index: 4 No error. RV index: 1, CRC: 0 SNR = 1.00 dB. Throughput for 2 Frame(s) = 2.2056 Mbps SNR = 1.00 dB. Throughput(%) for 2 Frame(s) = 100.0000 %
RV序列索引图
下面的代码为模拟的子帧生成带有RV序列中元素的索引值的图形。这提供了所需重传的概念。绘制索引而不是RV值的原因是RV值可能不是按升序组织的。例如,在某些情况下RV序列可以是[0,2,3,1]。在使用时绘制这些值并不能提供所需重传数量的清晰概念。
当传输一个新的传输块时,使用RV序列的第一个元素,并为该子帧显示值1。这是模拟开始时的情况。如果需要重传,则选择RV序列中的下一个元素并增加索引。将为重传发生的子帧绘制值2。如果需要进一步重传,则索引值将进一步增加。图在连续帧的子帧5中不显示任何值。这是因为对于本例中使用的设置,没有数据在这些子帧中传输。
hPlotRVSequence (SNRIn allRvSeqIdxHistory NFrames);
吞吐量结果
吞吐量结果在每个信噪比点完成后显示在MATLAB®命令窗口中。它们也在输出数组中被捕获simThroughput
而且maxThroughput
.simThroughput
将所有模拟信噪比点的测量吞吐量以比特数存储。maxThroughput
为每个模拟信噪比点存储最大可能吞吐量的比特数。
地块吞吐量figure legendString = [char(txMode)“:”num2str (simulationParameters.PDSCH.NLayers)...'层(s), 'num2str (ntxants)“蚁(s)”];情节(SNRIn simThroughput * 100. / maxThroughput,* - - - - - -。);包含(“信噪比(dB)”);ylabel (的吞吐量(%));标题(“吞吐量vs信噪比”);传奇(legendString“位置”,“西北”);网格在;
为了获得统计上有效的结果,应该对更多的帧运行模拟。下图比较了模拟1000帧时TDD和FDD的吞吐量结果。
附录
本例使用了以下helper函数:
选定的参考书目
3GPP TS 36.101《用户设备(UE)无线电发射和接收》