主要内容

DL-SCH PDSCH传输和接收处理链

这个例子展示了如何使用5 g工具箱™特性模型5 g NR物理下行共享信道(PDSCH)链接,包括传输块的所有步骤一代在接收端解码。

介绍

这个图表显示了下行共享信道(DL-SCH)和PDSCH传输和接收处理链。

这个例子展示了如何建模这些元素链路级别的仿真。

  • DL-SCH编码

  • 混合ARQ (HARQ)管理

  • PDSCH编码

  • 多输入多输出(MIMO)预编码

  • OFDM调制

  • 传播渠道和噪音

  • 时间同步

  • OFDM解调

  • 信道估计和均衡

  • PDSCH解码

  • DL-SCH解码

链路级别的例子如何使用模拟测量吞吐量,明白了NR PDSCH吞吐量

仿真参数

指定信噪比(信噪比),槽数模拟,完美的信道估计的旗帜。更多地了解在这个示例中,使用的信噪比的定义信噪比的定义中使用链接模拟

SNRdB = 10;在dB %信噪比totalNoSlots = 20;%槽数来模拟perfectEstimation = false;%完美的同步和信道估计rng (“默认”);%设置默认随机数字生成器可重复性

载波配置

创建一个载波配置对象。这个对象控制数字命理学,比如,副载波间距,带宽和循环前缀(CP)的长度。这个示例使用默认设置的属性。

载体= nrCarrierConfig
载体= nrCarrierConfig属性:NCellID: 1 SubcarrierSpacing: 15 CyclicPrefix:“正常”NSizeGrid: 52 NStartGrid: 0 NSlot: 0 NFrame: 0只读属性:SymbolsPerSlot: 14 SlotsPerSubframe: 1 SlotsPerFrame: 10

PDSCH和DM-RS配置

创建一个PDSCH配置对象。指定调制方案(16-QAM)和层(2)的数量。所有资源块分配(苏格兰皇家银行)PDSCH(全频带分配)。您还可以指定其他时间分配参数和解调参考信号(DM-RS)设置在这个对象。

pdsch = nrPDSCHConfig;pdsch。调制=“16 qam”;pdsch。NumLayers = 2; pdsch.PRBSet = 0:carrier.NSizeGrid-1;%全频带分配

显示PDSCH参数。

pdsch
pdsch = nrPDSCHConfig属性:NSizeBWP: [] NStartBWP: [] ReservedPRB: {[1 x1 nrPDSCHReservedConfig]} ReservedRE:[]调制:16 qam的NumLayers: 2 MappingType: A SymbolAllocation: 14 [0] PRBSet: [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17…]VRBToPRBInterleaving: 0 VRBBundleSize:: 2国家免疫日[]RNTI: 1 dmr: [1 x1 nrPDSCHDMRSConfig] EnablePTRS: 0 ptr: [1 x1 nrPDSCHPTRSConfig]只读属性:NumCodewords: 1

设置DM-RS参数。为了提高信道估计,添加一个额外的DM-RS位置。

pdsch.DMRS。DMRSAdditionalPosition = 1;

设置DM-RS配置类型和DM-RS长度,确定正交DM-RS序列的数量或DM-RS港口。

  • DMRSConfigurationType = 1金宝app最多支持4 DM-RS港口时DMRSLength = 1

  • DMRSConfigurationType = 1金宝app支持多达8 DM-RS港口时DMRSLength = 2

  • DMRSConfigurationType = 2金宝app支持多达6 DM-RS港口时DMRSLength = 1。这是设计针对多用户MIMO (MU-MIMO)。

  • DMRSConfigurationType = 2金宝app支持多达12 DM-RS港口时DMRSLength = 2。这是为MU-MIMO而设计的。

的最大层数必须小于或等于DM-RS端口的数量。

pdsch.DMRS。DMRSConfigurationType = 1;pdsch.DMRS。DMRSLength = 2;pdsch.DMRS%显示DM-RS属性
ans = nrPDSCHDMRSConfig属性:DMRSConfigurationType: 1 DMRSReferencePoint:“CRB0”DMRSTypeAPosition: 2 DMRSAdditionalPosition: 1 DMRSLength: 2 CustomSymbolSet: [] DMRSPortSet: [] NIDNSCID: [] NSCID: 0 NumCDMGroupsWithoutData: 2只读属性:CDMGroups: [0 0] DeltaShifts: [0 0] FrequencyWeights: [2 x2双]TimeWeights: [2 x2双]DMRSSubcarrierLocations: [6 x2双]CDMLengths: [2 1]

DL-SCH配置

指定编码速率,HARQ进程的数量,和冗余版本(RV)序列值。这个序列控制RV重发的错误。禁用HARQ重发,你可以设置rvSeq一个固定的值(例如,0)。为更多的信息关于如何模型和HARQ传输通道,看到的模型5 g NR和HARQ传输通道

NHARQProcesses = 16;%的平行HARQ进程rvSeq = [0 2 3 1];

考虑码字的数量当指定的编码率。码字的数量是一个只读属性的PDSCH配置对象的数量取决于层。

  • 1码字为4层

  • 2码字超过4层

%的编码率如果pdsch。NumCodewords == 1 codeRate = 490/1024;其他的codeRate = (490 - 490) / 1024;结束

创建DL-SCH编码器和译码器对象。使用多个进程,设置MultipleHARQProcesses财产真正的两个对象。你不需要指定HARQ进程的数量。DL-SCH编码器和解码器对象模型16 HARQ进程。来识别活跃HARQ过程DL-SCH编码器和解码器对象执行操作时,使用HARQprocessIDHARQ实体对象的属性,在下一节中定义的。

%创建DL-SCH编码器对象encodeDLSCH = nrDLSCH;encodeDLSCH。MultipleHARQProcesses = true;encodeDLSCH。TargetCodeRate = codeRate;%创建DLSCH解码器对象decodeDLSCH = nrDLSCHDecoder;decodeDLSCH。MultipleHARQProcesses = true;decodeDLSCH。TargetCodeRate = codeRate;decodeDLSCH。LDPCDecodingAlgorithm =“规范化min-sum”;decodeDLSCH。MaximumLDPCIterationCount = 6;

HARQ管理

创建一个HARQ实体对象来管理HARQ过程和DL-SCH编码器和解码器缓冲区。对于每个HARQ进程,HARQ实体商店这些元素:

  • HARQ ID号码。

  • 房车。

  • 传输数字,这表明一定的传输块多少次被传播。

  • 标志指示是否需要新的数据。新的数据传输块时需要获得成功或者一个序列发生超时(所有房车传输都失败了)。

  • 标志表明序列是否发生了超时(所有房车传输都失败了)。

harqEntity = harqEntity (0: NHARQProcesses-1、rvSeq pdsch.NumCodewords);

通道配置

指定数量的传输和接收天线。

nTxAnts = 8;nRxAnts = 8;%的层数是有效的检查天线的数量如果pdsch。NumLayers > min(nTxAnts,nRxAnts) error(”层的数量(“字符串(pdsch.NumLayers) + +”)必须小于最小值(nTxAnts nRxAnts) (“+字符串(min (nTxAnts nRxAnts) +“)”)结束

创建一个通道对象。

频道= nrTDLChannel;通道。DelayProfile =“TDL-C”;通道。NumTransmitAntennas = nTxAnts; channel.NumReceiveAntennas = nRxAnts;

设置通道采样率的OFDM信号。获得OFDM信号的采样率,使用nrOFDMInfo函数。

ofdmInfo = nrOFDMInfo(载体);通道。SampleRate = ofdmInfo.SampleRate;

传输和接收

建立一个循环槽的模拟发射和接受。创建一个comm.ConstellationDiagram显示平衡的信号的星座。

constPlot = comm.ConstellationDiagram;%星座图对象constPlot。ReferenceConstellation = getConstellationRefPoints (pdsch.Modulation);%参考星座值constPlot。EnableMeasurements = 1;%使维生素与测量%初始时间偏移抵消= 0;estChannelGrid = getInitialChannelEstimate(渠道、载体);newPrecodingWeight = getPrecodingMatrix (pdsch.PRBSet pdsch.NumLayers estChannelGrid);nSlot = 0: totalNoSlots-1%的新位置母舰。NSlot = nSlot;

计算传输块大小

传输块大小是碎片的数量发送到信道编码阶段。这个值取决于PDSCH的容量。计算传输块大小,使用nrTBS函数。

%生成PDSCH指标信息,需要计算运输%的块大小[pdschIndices, pdschInfo] = nrPDSCHIndices(载体,pdsch);%计算传输块大小Xoh_PDSCH = 0;trBlkSizes = nrTBS (pdsch.Modulation、pdsch.NumLayers元素个数(pdsch.PRBSet) pdschInfo.NREPerPRB, codeRate, Xoh_PDSCH);

HARQ处理(缓冲区管理)

本节解释了在编码器和解码器缓冲区管理。

  • DL-SCH编码器缓冲区:生成一个新的运输如果新数据块需要活跃的HARQ进程。传输块存储在相应的缓冲。如果不需要新的数据,DL-SCH编码器使用的缓冲部分重新传输。

  • DL-SCH解码器缓冲区:接收机中的软缓冲存储先前收到的版本相同的码字。这些缓冲区自动清除成功接待(没有CRC错误)。然而,如果RV序列结束时没有成功解码,通过手动刷新缓冲区resetSoftBuffer对象的功能。

%获得新的传输块和冲洗解码器柔软的缓冲,是必需的cwIdx = 1: pdsch.NumCodewords如果harqEntity.NewData (cwIdx)%创建和存储的新传输块的传播trBlk =兰迪([0,1],trBlkSizes (cwIdx), 1);setTransportBlock (encodeDLSCH trBlk、cwIdx-1 harqEntity.HARQProcessID);%如果前面房车序列结束时没有成功%解码,冲软缓冲如果harqEntity.SequenceTimeout (cwIdx) resetSoftBuffer (decodeDLSCH, cwIdx-1 harqEntity.HARQProcessID);结束结束结束

DL-SCH编码

编码传输块。交通阻塞已经存储在一个内部软DL-SCH编码器对象的缓冲区。

codedTrBlock = encodeDLSCH (pdsch.Modulation pdsch.NumLayers、pdschInfo.G harqEntity.RedundancyVersion, harqEntity.HARQProcessID);

PDSCH调制和天线系统预编码

从编码生成PDSCH符号传输块。

pdschSymbols = nrPDSCH(载体,pdsch codedTrBlock);

预编码的重量。这个例子假定信道预编码的知识。(一个例子如何使用接收器的信道估计来计算权值用于传输在下一个槽,明白了NR PDSCH吞吐量。)

precodingWeights = newPrecodingWeight;

Precode PDSCH符号。

pdschSymbolsPrecoded = pdschSymbols * precodingWeights;

PDSCH DM-RS代

生成DM-RS符号和指数。

dmrsSymbols = nrPDSCHDMRS(载体、pdsch);dmrsIndices = nrPDSCHDMRSIndices(载体、pdsch);

映射到网格资源

生成一个空的网格资源。这个网格代表一个插槽。

pdschGrid = nrResourceGrid(载体、nTxAnts);

nrPDSCHIndices函数生成指数参考层,而不是天线。这种格式直接映射PDSCH符号层时是有用的。在这种情况下,生成的网格资源并不将。这个图显示了PDSCH符号的映射过程尽可能多的资源网格层。

因为这个例子适用于MIMO预编码之前PDSCH符号映射到资源网格的MIMO-precoded PDSCH符号指天线而不是层。将天线指标层指标,使用nrExtractResources函数。此图显示了MIMO-precoded符号的映射过程尽可能多的资源网格传输天线。

[~,pdschAntIndices] = nrExtractResources (pdschIndices pdschGrid);pdschGrid (pdschAntIndices) = pdschSymbolsPrecoded;

MIMO-precode和DM-RS符号映射到资源网格。类似于PDSCH指标,DM-RS指数参考层。将这些天线指标层指标,使用nrExtractResources函数了。

% PDSCH DM-RS预编码和映射p = 1:尺寸(dmrsSymbols, 2) [~, dmrsAntIndices] = nrExtractResources (dmrsIndices (: p), pdschGrid);pdschGrid (dmrsAntIndices) = pdschGrid (dmrsAntIndices) + dmrsSymbols (: p) * precodingWeights (p:);结束

OFDM调制

OFDM-modulate资源网格。

[txWaveform, waveformInfo] = nrOFDMModulate(载体,pdschGrid);

传播渠道

传播渠道生成N对于一个输入输出样本N样本。然而,块N输出样本包括通道滤波器暂态(K样本)。因为删除这个初始瞬态同步阶段,如果一个槽通道输出N样品,n - k样品后保持同步。n - k样品是不够的解码slot-worth的数据。槽的一部分样品通道滤波器延迟线和还没有刷新。冲洗所有相关样本的通道滤波器,用0填充输入信号。通道的最大延迟滤波器介绍影响衬垫的大小。延迟的填充占所有引入的多路径组件和通道滤波器实现延迟。这图显示了需要补零在波形输入通道。

垫的输入信号有足够的零,以确保生成的信号的排出通道的过滤器。

chInfo =信息(渠道);maxChDelay =装天花板(max (chInfo.PathDelays * channel.SampleRate)) + chInfo.ChannelFilterDelay;txWaveform = [txWaveform;0 (maxChDelay、尺寸(txWaveform 2)));

发送信号通过信道和添加噪声。

[rxWaveform, pathGains sampleTimes] =通道(txWaveform);噪音= generateAWGN (SNRdB nRxAnts waveformInfo.Nfft,大小(rxWaveform));rxWaveform = rxWaveform +噪声;

时间同步

您可以执行完美的或实际的同步。

  • 完美的同步假设信道知识(nrPerfectTimingEstimate)。通道返回路径收益和路径信息过滤器脉冲响应。您可以使用此信息来确定偏移量与最强的多路径组件相关联的所有频道快照和所有发送和接收天线。

  • 实际执行同步接收信号的互相关的PDSCH DM-RS符号在时间域(nrTimingEstimate)。在某些不利的情况下,这种互相关可以弱由于衰减或噪音,导致一个错误的时间偏移量。这个函数hSkipWeakTimingOffset检查互关联的大小玛格。如果弱,互相关函数忽略了当前时间估计,而是使用先前的估计(抵消)。

执行完美的或实际的时间估计和同步。

如果perfectEstimation%获得完美的定时估计的路径过滤器pathFilters = getPathFilters(渠道);(抵消,mag) = nrPerfectTimingEstimate (pathGains pathFilters);其他的(t, mag) = nrTimingEstimate(载体、rxWaveform dmrsIndices, dmrsSymbols);抵消= hSkipWeakTimingOffset(抵消t杂志);结束rxWaveform = rxWaveform(1 +抵消:最终,);

OFDM解调

OFDM-demodulate同步信号。

rxGrid = nrOFDMDemodulate(载体、rxWaveform);

信道估计

信道的信道估计提供了一种表示每个资源元素(重新)影响。均衡器使用这些信息来补偿信道引入的失真。

您可以执行完美的或实际的信道估计。

  • 完美的信道估计假定信道知识(nrPerfectChannelEstimate)。完美的通道估计代表通道传输和接收天线之间的条件。因为之间的平衡需要信道知识传输层和接收天线,你必须预编码应用于完美的信道估计。

  • 实际信道估计使用PDSCH DM-RS估计信道条件和使用噪声平均和插值获得估计所有REs插槽。因为DM-RSs指定每层,由此产生的实际通道估计代表通道传输层和接收天线之间的条件。实际的信道估计包括MIMO预编码操作的影响。

这图显示了参考点下行信道估计的处理链。

执行完美的或实际的信道估计。

如果perfectEstimation%在发射和接收之间执行完美的信道估计%的天线。estChGridAnts = nrPerfectChannelEstimate(载体,pathGains pathFilters,抵消,sampleTimes);%得到完美的噪声估计(从噪声实现)noiseGrid = nrOFDMDemodulate(载体、噪音(1 +抵消:最终,));噪音= var (noiseGrid (:));下槽%得到预编码矩阵newPrecodingWeight = getPrecodingMatrix (pdsch.PRBSet pdsch.NumLayers estChGridAnts);%对estChGridAnts应用预编码。由此产生的预计%层和接收天线之间的信道估计。estChGridLayers = precodeChannelEstimate (estChGridAnts precodingWeights。');其他的%执行实际的层之间的信道估计和接收%的天线。[estChGridLayers,噪音]= nrChannelEstimate(载体、rxGrid dmrsIndices, dmrsSymbols,“CDMLengths”,pdsch.DMRS.CDMLengths);预编码之前%去除estChannelGrid预编码%矩阵计算estChGridAnts = precodeChannelEstimate (estChGridLayers连词(precodingWeights));下槽%得到预编码矩阵newPrecodingWeight = getPrecodingMatrix (pdsch.PRBSet pdsch.NumLayers estChGridAnts);结束

情节第一层之间的信道估计和第一个接收天线。

网格(abs (estChGridLayers (:,:, 1, 1)));

图包含一个坐标轴对象。信道估计坐标轴对象与标题包含一个类型的对象的表面。”width=

标题(信道估计的);包含(OFDM符号的);ylabel (“副载波”);zlabel (“级”);

在这一点上,您可以使用信道估计得到的预编码矩阵传播下一个槽。因为这个例子假设信道知识发射机,您不需要在接收端计算预编码矩阵。如何计算预编码矩阵的例子基于信道估计的数据传输接收器,明白了NR PDSCH吞吐量

均衡

均衡器采用信道估计补偿引入的失真通道。

从收到网格中提取PDSCH符号和相关的信道估计。的csi输出信道状态信息(CSI)的平衡的PDSCH符号。CSI是为每个PDSCH符号测量通道的条件。使用CSI重量软解码比特PDSCH解码后,有效地提高符号经历更好的信道条件的重要性。

[pdschRx, pdschHest] = nrExtractResources (pdschIndices、rxGrid estChGridLayers);[pdschEq, csi] = nrEqualizeMMSE (pdschRx pdschHest,噪音);

情节使相等的星座符号。故事情节包括所有层的星座图。

constPlot。ChannelNames =“层”+ (pdsch.NumLayers: 1:1);constPlot。ShowLegend = true;%星座第一层比,信噪比更高%的最后一层。抛层,星座不面具%。constPlot (fliplr (pdschEq));

PDSCH解码

解码使相等PDSCH符号和获得柔软的密语。

[dlschLLRs, rxSymbols] = nrPDSCHDecode(载体、pdsch pdschEq,噪音);

规模软比特或对数似比CSI (llr)。这个比例更大重量适用于符号在REs更好的信道条件。

%规模llr CSIcsi = nrLayerDemap (csi);% CSI层demappingcwIdx = 1: pdsch.NumCodewordsQm = length(dlschLLRs{cwIdx})/length(rxSymbols{cwIdx});%每个符号位csi {cwIdx} = repmat (csi {cwIdx}。”、Qm 1);%增加每个每个符号dlschLLRs {cwIdx} = dlschLLRs {cwIdx}。* csi {cwIdx} (:);%的规模结束

DL-SCH解码

解码llr和检查错误。

decodeDLSCH。TransportBlockLength = trBlkSizes;[decbits, blkerr] = decodeDLSCH (dlschLLRs、pdsch.Modulation pdsch.NumLayers,harqEntity.RedundancyVersion harqEntity.HARQProcessID);

HARQ进程更新

更新当前HARQ过程产生的错误状态,然后前进到下一个过程。这一步更新相关信息主动HARQ进程HARQ实体。

statusReport = updateAndAdvance (harqEntity blkerr、trBlkSizes pdschInfo.G);

总结目前槽HARQ和解码信息。

disp (“槽”+ (nSlot) +”。”+ statusReport);
槽0。HARQ Proc 0: CW0:初始传播通过(RV = 0, CR = 0.482212)。槽位1。HARQ Proc 1: CW0:初始传播通过(RV = 0, CR = 0.482212)。槽2。HARQ Proc 2: CW0:初始传播通过(RV = 0, CR = 0.482212)。位置3。HARQ Proc 3: CW0:初始传播通过(RV = 0, CR = 0.482212)。槽4。HARQ Proc 4: CW0:初始传播通过(RV = 0, CR = 0.482212)。 Slot 5. HARQ Proc 5: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 6. HARQ Proc 6: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 7. HARQ Proc 7: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 8. HARQ Proc 8: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 9. HARQ Proc 9: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 10. HARQ Proc 10: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 11. HARQ Proc 11: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 12. HARQ Proc 12: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 13. HARQ Proc 13: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 14. HARQ Proc 14: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 15. HARQ Proc 15: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 16. HARQ Proc 0: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 17. HARQ Proc 1: CW0: Initial transmission passed (RV=0,CR=0.482212). Slot 18. HARQ Proc 2: CW0: Initial transmission passed (RV=0,CR=0.482212).
槽19。HARQ Proc 3: CW0:初始传播通过(RV = 0, CR = 0.482212)。
结束% nSlot = 0: totalNoSlots

本地函数

函数噪音= generateAWGN (SNRdB nRxAnts、Nfft sizeRxWaveform)%为给定值的生成情况下信噪比在dB (SNRDB),这是%每再保险和天线接收信噪比,假设信道%不影响信号的力量。NRXANTS是收到的数量%的天线。NFFT FFT大小用于OFDM解调。SIZERXWAVEFORM%接收波形的大小用来计算的大小%噪声矩阵。%正常化传输线噪声功率的大小用于OFDM调制%这个正常化OFDM调制器应用传播%波形。也正常化接收天线的数量%通道模型适用于这个正常化所接收到的波形%违约。信噪比被定义为每个接收天线(TS / RE% 38.101 - 4)。信噪比= 10 ^ (SNRdB / 10);%计算线性噪声增益N0 = 1 /√(2.0 * nRxAnts *双(Nfft) *信噪比);噪音= N0 *复杂(randn (sizeRxWaveform) randn (sizeRxWaveform));结束函数wtx = getPrecodingMatrix (PRBSet NLayers hestGrid)%计算预编码矩阵分配和信道估计%副载波分配指标allocSc = (1:12) + 12 * PRBSet (:)。”;allocSc = allocSc (:);%的平均信道估计(~,~,R, P) = (hestGrid)大小;estAllocGrid = hestGrid (allocSc、::,:);命令=排列(意思是(重塑(estAllocGrid, [], R, P)), (1 2 3));%计算分解[~ ~ V] =圣言(命令);wtx = V (:, 1: NLayers)。”;wtx = mtx /√(NLayers);%由NLayers正常化结束函数estChannelGrid = getInitialChannelEstimate(渠道、载体)%获得初始信道估计计算预编码矩阵。%这个函数假设一个完美的信道估计%的克隆通道chClone = channel.clone ();chClone.release ();%不需要过滤通道路径收益chClone。ChannelFiltering = false;%得到通道路径收益[pathGains, sampleTimes] = chClone ();%的时间同步pathFilters = getPathFilters (chClone);抵消= nrPerfectTimingEstimate (pathGains pathFilters);%完美的信道估计estChannelGrid = nrPerfectChannelEstimate(载体,pathGains pathFilters,抵消,sampleTimes);结束函数refPoints = getConstellationRefPoints (mod)%计算参考给定调制星座点%的计划。开关国防部情况下“正交相移编码”《不扩散核武器条约》= 4;情况下“16 qam”《不扩散核武器条约》= 16;情况下“64 qam”《不扩散核武器条约》= 64;情况下“256 qam”《不扩散核武器条约》= 256;结束binaryValues = int2bit (0: nPts-1 log2 (npt));refPoints = nrSymbolModulate (binaryValues (:), mod);结束函数estChannelGrid = precodeChannelEstimate (estChannelGrid W)%申请预编码矩阵W的最后尺寸信道估计。%线性化4 - d矩阵和重塑后的乘法K =大小(estChannelGrid, 1);L =大小(estChannelGrid, 2);R =大小(estChannelGrid 3);estChannelGrid =重塑(estChannelGrid K * L * R, []);estChannelGrid = estChannelGrid * W;estChannelGrid =重塑(estChannelGrid K, L, R, []);结束

相关的话题