主要内容

TDD Reciprocity-Based PDSCH MU-MIMO使用SRS

这个例子实现下行多用户多输入多输出(MU-MIMO)利用通道互惠在时分双工(TDD)的情况下。的例子显示了如何确定物理下行波束形成加权共享通道(PDSCH)传输通过通道估计基于上行探测参考信号(SRS)传播为每个用户,以及如何安排PDSCHs为多个用户在同一时间和频率资源。

介绍

TDD系统使用相同的频率区间上行(UL)和下行(DL)传输。收音机频道是互惠的,因为它有相同的特征在UL和DL的方向。利用这种互惠,您可以使用一个UL传播获得信道的估计,然后使用这个通道估计计算参数,包括波束形成,DL传播。这种方法被称为reciprocity-based波束形成。

这个例子实现下行MU-MIMO通过计算信道估计为多个用户根据SRS传输。假设互惠,然后使用这些例子通道估计选择一组用户定于PDSCH传输和计算DL波束形成加权PDSCH传输这些用户。当基站足够数量的天线,可以beamform PDSCH传输一组用户在同一时间和频率资源,这样用户会互相干扰。

这个例子时间表SRS传输所有问题UL的一部分特殊的槽,和时间表PDSCH传输的问题选择的用户选择算法在DL槽和DL特殊时段的一部分。

的例子提供了一个选择MU-MIMO预编码算法和允许层数安排在同一时间和频率资源配置。最后,例子措施整个细胞的能力相对于单层的用户,显示可以通过调度能力高于单个用户。

仿真假设

这个示例使用这些假设。

  • SRS配置允许16问题。

  • 层的数量分配到一个给定的问题是随机的(1、2或4)和模拟的持续时间是固定的。

  • SRS天线端口的数量等于层分配的数量。

  • SRS天线端口的数量等于物理天线的数量,也就是说,没有空间滤波的SRS港口到一组更大的物理天线。

  • 问题发射天线的数量等于SRS天线端口的数量,也就是说,使用全频道测深。

  • 预编码资源块组(PRG)包大小是相同的所有问题。

  • PDSCH不是安排在第一帧的下行槽发生之前第一个特殊的位置,因为没有可用的信道估计。

  • Demodulaton参考信号(DM-RS)配置类型是类型1和DM-RS长度是2,即8正交DM-RS港口可以安排。安排更多的用户,这个例子使用非正交的DM-RSs通过改变身份。

  • 不支持HARQ。金宝app

  • 循环前缀长度内的所有问题都是同步的,通过最初的获得和传播时间调整程序,参见TS 38.213部分8和4.2 (1更多信息)。时间偏移量在循环前缀长度表现为在频域相移补偿信道估计和equalizaton。

仿真参数

指定数量的问题,模拟的帧数,和信噪比下行和上行,假设所有用户的信噪比是一样的。一个解释信噪比的定义,这个示例使用看看信噪比的定义中使用链接模拟

numUEs = 12;%的问题总数由基站提供服务numFrames = 1;%的帧总数来模拟SNRdBDL = 25;在dB %下行信噪比SNRdBUL = 20;在dB %向上传输的信噪比

基站配置

载波配置

51集载波参数,指定资源块30千赫副载波间距,这对应于20 MHz的信道带宽。

载体= nrCarrierConfig;母舰。N大小Grid = 51; carrier.SubcarrierSpacing = 30;

TDD的配置

认为TDD的示例配置组成的下行插槽(D),紧随其后的是一个特殊的槽(S),紧随其后的是上行插槽(U)。特殊的槽位代表一个开关点下行和上行传输,因此包含下行符号,其次是空符号,其次是上行符号。dowlink或上行符号的特殊槽可以是零。这个例子时间表SRS上行传输的特殊位置的一部分,和时间表PDSCH传输下行槽和下行的一部分特殊的槽。

代表了TDD槽模式由一个字符串数组指定槽类型。

tddPattern = [“D”“D”“D”“D”“D”“D”“D”“S”“U”“U”];disp (“循环槽模式:“)
循环槽模式:
disp (“槽”+字符串((0:长度(tddPattern) 1)”) +”:“+ tddPattern (:))
“槽0:D”“插槽1:D”“槽2:D”“槽3:D”“槽4:D”“槽5:D”“槽6:D”“槽7:S”“槽8:U”“槽9:U”

代表了特殊的槽配置三元素向量指定数量的下行符号,后卫上行符号,符号,特殊的槽。

specialSlot = (6 4 4);

特殊符号的插槽配置总数必须匹配的符号一个槽carrier.SymbolsPerSlot

如果(和(specialSlot) ~ = carrier.SymbolsPerSlot)错误([“specialSlot必须包含”num2str (carrier.SymbolsPerSlot)“符号”。]);结束

天线阵列的大小

指定的天线阵列大小基站(BS)。假设一个矩形数组。天线阵列的大小是一个矢量[M N P],在那里的行数,N列的数量和吗P是天线阵的偏振。

bsAntSize = (2 8 2);

问题的配置

层数和天线阵大小

随机选择每个问题的层数(1、2或4)。

%重置随机发生器再现性rng (“默认”);%每个问题的层数numLayers = pow2 (randi ([0 2], [1 numUEs]))
numLayers =1×124 4 1 4 2 1 1 2 4 1 4

层的数量决定了天线阵列的大小根据此表为每一个问题。

数量 问题 天线 数组 大小 1 ( 1 1 1 ] 2 ( 1 1 2 ] 4 ( 1 2 2 ] 表显示天线阵大小为每个问题之间的关系和数量的层。

%的行数,列和偏振矩形数组中每个问题ueAntSizes = 1 + (numLayers。“> [4 2 1])
ueAntSizes =12×31 2 2 1 2 2 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2⋮

SRS配置

配置SRS参数为每个问题。所有问题的srs传输配置在一个特殊的位置,或在一个上行插槽,如果没有特殊的槽(或如果它不包含上行符号)。srs的例子执行时分多路复用(TDM)通过使用不同的OFDM符号数字和频分多路(FDM)通过使用不同的梳补偿。对于每个问题,SRS端口配置的数量等于该问题的层数。

srs = hMultiUserSRS (tddPattern specialSlot,载体,numLayers);

有关SRS参数化的更多信息,请参阅NR SRS配置的例子。

PDSCH和DL-SCH配置

配置PDSCH和DL-SCH参数为每个问题与这些参数。

  • 率3/4编码和正交调幅64点(64 - qam)

  • DM-RS配置类型1和DM-RS长度2,它提供了8正交DM-RS港口,看到TS 38.211表7.4.1.1.2-1 [5]

  • PRG包的大小2,看到TS 38.214节5.1.2.3 [6]

配置适当的层数为每个问题并设置RNTI等于问题号码(1……numUEs)。

PDSCHs = hMultiUserPDSCH (numLayers);

您可以配置进一步PDSCH参数为每个传输用户选择过程中使用hMultiUserSelection函数。

有关PDSCH参数化的更多信息,请参阅NR PDSCH资源分配和DM-RS PT-RS参考信号的例子。

算法参数

MU-MIMO预编码方法

这个例子支持这些预编码方金宝app法。

  • “BD”:块对角化

  • “ZF”:零迫使

  • “RZF”:正规化零迫使

预编码方法用于确定在用户选择每个PDSCH的波束形成的权值。块对角化方法的更多信息,见blkdiagbfweights功能和(2]。有关zero-forcing和正规化zero-forcing方法的更多信息,参见[3]。

algParameters =结构;algParameters。PrecodingMethod =“RZF”;

配置层数,用户选择算法在每个在每个槽PRG时间表。这是总层数将在所有用户在任何给定PRG槽。

algParameters.ScheduledLayers= 8;

信道估计配置

逻辑变量PerfectChannelEstimator控制信道估计行为。当您设置这个变量真正的,SRS的例子使用完美的信道估计和PDSCH接待。否则,该示例使用实际的信道估计基于接收SRS的值和PDSCH DM-RS。

algParameters。PerfectChannelEstimator = false;

CDL信道模型

配置每个问题的传播通道模型。的hMultiUserChannels函数使用nrCDLChannel对象配置集群延迟线(CDL)通道。使用这个函数创建一个初始信道对象与CDL-A延迟,100 ns延迟扩展,5赫兹多普勒频移。然后功能配置不同的渠道问题通过修改初始对象:

  • 随机选择一个azmiuth和天顶角和偏移量的角度出发为每个集群这些角度,模拟不同议题的影响在不同的位置在基站周围的环境。

  • 配置问题根据天线阵列天线阵大小选择层数和天线阵大小

  • 设置一个不同的值种子财产。这确保了每一个问题都有独立的快衰落的信道。

delayProfile =“CDL-A”;delaySpread = 100 e-9;maximumDopplerShift = 5;渠道= hMultiUserChannels (delayProfile delaySpread、maximumDopplerShift bsAntSize, ueAntSizes);

可视化的配置CDL频道,看到可视化CDL通道模型特征的例子。创建CDL信道模型参数通过使用射线追踪分析的输出,看到CDL通道模型定制与射线追踪的例子。

MU-MIMO吞吐量仿真使用Reciprocity-Based波束形成

这个图表显示了吞吐量仿真的结构。

定于SRS槽:

  • UL传输:为每个问题生成SRS波形。

  • CDL渠道情况下:对于每个问题,通过通道发送波形,结合基站信道输出,并添加噪声。

  • UL接收:对于每个问题,执行SRS-based信道和噪声估计。有关更多信息,请参见使用SRS NR上行信道状态信息估计的例子。

  • 更新CSI:纪录频道和噪声估计用于随后的插槽。

定于PDSCH槽:

  • 用户选择:考虑所有问题的最近的CSI,确定哪些问题安排PDSCH和配置PDSCH参数(分配的苏格兰皇家银行、波束形成、DM-RS港口,匆忙身份)。

  • DL传输:对于每个问题,执行DL-SCH编码的数据和生成和beamform PDSCH。求和beamformed PDSCHs形成传输信号。

  • CDL渠道情况下:发送信号通过传输通道为每个问题和添加噪声为每个问题创建接收到的波形。

  • DL接收:对于每个问题,解调接收到的波形,解调DL-SCH PDSCH和解码。

  • 更新数据传输:记录传输块大小(TBS)和循环冗余校验(CRC)对于每一个问题,这个例子使用吞吐量计算最终结果。

diagnosticsOn国旗在模拟控制诊断信息的显示。当设置为真正的显示这些信息的例子:

  • 当前槽槽的数量和类型(D S或U)

  • 对于包含SRS的插槽,SRS的问题的列表发送和接收

  • 对于包含PDSCH的插槽,一个列表的问题PDSCH计划,分配资源块的数量(NPRB),每一层的维生素,CRC DL-SCH解码的结果

%建立数据传输和CSI的记录dataState = setupDataTransfer(载体,numFrames numLayers);csi = setupCSI(载体,bsAntSize ueAntSizes);diagnosticsOn = true;%为每个槽nSlot = 0 (carrier.SlotsPerFrame * numFrames): 1%更新插槽数量母舰。NSlot = nSlot;%显示槽数量和类型(如果启用了诊断)如果(diagnosticsOn) disp (“槽”字符串(carrier.NSlot) + +”:“+ tddPattern (mod (carrier.NSlot元素个数(tddPattern)) + 1));结束%安排数据传输的问题(时间表,PDSCHs) = hMultiUserSelection (csi, tddPattern specialSlot,载体,PDSCHs, bsAntSize, algParameters);% PDSCH定于数据传输所有问题[txDL, txSymbols singleLayerTBS] = hMultiDLTransmit(载体,PDSCHs (schedule.PDSCH) bsAntSize);定于SRS % SRS传输的所有问题[txUL时间表。SRS] = hMultiULTransmit(载体,SRS);%应用衰落信道(通道、rxDL rxUL) = hApplyMultiUserChannels (tddPattern specialSlot,载体,时间表,渠道,txDL, txUL);%应用情况rxDL = hApplyMultiUserAWGN(载体,rxDL、SNRdBDL CombineWaveforms = false);rxUL = hApplyMultiUserAWGN(载体,rxUL、SNRdBUL CombineWaveforms = true);%为所有问题定于SRS,估计CSI和记录[H,据nVar] = hMultiULReceive(载体,srs (schedule.SRS) rxUL, algParameters);csi = updateCSI (csi,载体,schedule.SRS, H,据nVar);%为所有问题安排数据,执行PDSCH接待并记录结果[TBS, CRC, eqSymbols] = hMultiDLReceive(载体,PDSCHs (schedule.PDSCH) rxDL, algParameters);dataState = updateDataTransfer (dataState载体、singleLayerTBS schedule.PDSCH, TBS, CRC);%显示预定的srs和PDSCHs, PDSCH维生素,和DL-SCH CRC(如果启用了诊断)如果(diagnosticsOn) displayDiagnostics(时间表,PDSCHs, txSymbols eqSymbols, CRC);结束结束
槽0:D槽1:D槽2:D槽3:D槽4:D槽5:D槽6:D槽7:S
SRS传输
槽8:U槽9:U槽10:D
PDSCH: 1 2 3 4 5 6 7 8 9 10 11 12 NPRB: 7 8 43 6 43 41 24 10 8 6 30 6维生素:19日5 5 4 2 6 6 14 11 8 7 11 14 5 5 3 8 7 6 9 12 5 13 7 6 6 15 5 8 6 6 8 CRC: 1 0 0 0 0 0 0 0 0 0 0 0
槽11:D
PDSCH: 1 2 3 4 5 6 7 8 9 10 11 12 NPRB: 7 8 43 6 43 41 24 10 8 6 30 6维生素:19日5 5 4 2 6 6 15 11 8 7 11 15 5 3 8 7 5 8 12 5 13 7 6 7 15 6 8 6 6 8 CRC: 1 0 0 0 0 0 0 0 0 0 0 0
槽12:D
PDSCH: 1 2 3 4 5 6 7 8 9 10 11 12 NPRB: 7 8 43 6 43 41 24 10 8 6 30 6维生素:19日5 5 4 2 6 6 14 10 8 7 11 15 5 3 8 7 6 9 11 5 13 7 6 7 15 5 8 6 6 8 CRC: 1 0 0 0 0 0 0 0 0 0 0 0
插槽13:D
PDSCH: 1 2 3 4 5 6 7 8 9 10 11 12 NPRB: 7 8 43 6 43 41 24 10 8 6 30 6维生素:18 5 5 4 2 6 6 13 10 7 7 11 15 5 5 5 3 9 7 5 9 11 13 7 6 6 14 5 8 6 6 7 CRC: 1 0 0 0 0 0 0 0 0 0 0 0
槽14:D
PDSCH: 1 2 3 4 5 6 7 8 9 10 11 12 NPRB: 7 8 43 6 43 41 24 10 8 6 30 6维生素:17 5 5 4 2 6 6 14 11 8 8 12 13 5 5 5 3 9 7 5 9 11 13 7 6 7 14 5 8 6 6 8 CRC: 0 0 0 0 0 0 0 0 0 0 0 0
槽15:D
PDSCH: 1 2 3 4 5 6 7 8 9 10 11 12 NPRB: 7 8 43 6 43 41 24 10 8 6 30 6维生素:16 6 5 4 2 6 6 14 11 7 8 12 13 5 5 5 5 3 9 7 8 11 13 7 6 7 14 5 7 6 6 8 CRC: 0 0 0 0 0 0 0 0 0 0 0 0
槽16:D
PDSCH: 1 2 3 4 5 6 7 8 9 10 11 12 NPRB: 7 8 43 6 43 41 24 10 8 6 30 6维生素:18 5 6 4 2 6 6 13 10 8 9 12 14 5 5 5 3 9 7 5 8 11 13 7 6 7 15 5 8 6 6 8 CRC: 1 0 0 0 0 0 0 0 0 0 0 0
槽17:年代
PDSCH: 1 2 3 4 5 6 7 8 9 10 11 12 NPRB: 7 8 43 6 43 41 24 10 8 6 30 6维生素:17 6 6 4 2 6 6 13 11 7 9 13 14 5 5 5 3 10 7 5 9 11 13 7 6 8 14 6 8 6 6 9 CRC: 0 0 0 0 0 0 0 0 0 0 0 0 SRS传播
槽18:U槽19:U

吞吐量结果

显示一个汇总表的吞吐量结果,显示了块错误率(提单)和总吞吐量为每个用户。

结果= summarizeResults (dataState);disp(结果);
用户提单吞吐量(比特)___ _____ _________________ 42880 2 0 1.5391 0.625 2.064 e + e + 05年3 0 05年4 0 1.1462 e + 05年5 0 4.1301 1.9539 e + e + 05年6 0 05年7 0 1.1462 e + 05年8 0 95800 9 0 1.5391 1.1462 e + e + 05年10 0 05年11 0 1.4278 1.1462 e + e + 05年12 0 05

显示所有用户的总吞吐量。

totalThroughput =总和(结果。(“吞吐量(比特)”));dataRate = totalThroughput / (numFrames * 0.01) / 1 e6;disp ([所有用户的总吞吐量:num2str (dataRate' % 0.3 f ')“Mbps”]);
所有用户的总吞吐量:186.254 Mbps

显示所有用户平均提单。

disp ([在所有用户的平均提单:num2str(平均(results.BLER“omitnan”),' % 0.3 f ')));
一般提单所有用户:0.052

显示的能力相对于单层用户分配给整个载波带宽。最大可能的容量等于计划层的数量,由algParameters.ScheduledLayers

singleLayerThroughput =总和(dataState .SingleLayerTBS (1),“omitnan”);= totalThroughput / singleLayerThroughput能力;disp ([的能力相对于单层的用户:num2str(能力,' % 0.2 f ')“x”]);
能力相对于单层用户:7.75 x

的能力超过配置的层数问题(平均4最大,~ 2.6),表明MU-MIMO调度和预编码可以成功地增加细胞的能力相比,单用户传输。

引用

1。3 gpp TS 38.213。“NR;物理层控制程序”。第三代合作伙伴项目;技术规范集团无线接入网络。

2。斯宾塞,Q.H.,等。“Zero-Forcing下行种在MIMO信道的空间复用的方法。”IEEE信号处理52卷2号,2004年2月,页461 - 471。

3所示。皮,C.B.,等。“极限Multiantenna Vector-Perturbation技术多用户通信部分我:通道反演和正则化”。IEEE信号处理53卷1号,2005年2月,页195 - 202。

4所示。3 gpp TS 38.101 - 4。“NR;用户设备(UE)无线电发射和接受;第4部分:性能要求。”第三代合作伙伴项目;技术规范集团无线接入网络

5。3 gpp TS 38.211。“NR;物理渠道和调制。”第三代合作伙伴项目;技术规范集团无线接入网络。

6。3 gpp TS 38.214。“NR;物理层数据程序。”第三代合作伙伴项目;技术规范集团无线接入网络。

本地函数

函数csi = setupCSI(载体,bsAntSize ueAntSizes)%建立获得通过CSI SRS的记录NCRB =载体。N大小Grid + carrier.NStartGrid; numUEs = size(ueAntSizes,1); csi = repmat(struct(“H”[],据nVar”[],“NSlot”[])1、numUEs);P = prod (bsAntSize);问题= 1:numUEs R = prod (ueAntSizes(问题:));csi(问题)。H =南([NCRB 1 P R]);csi(问题)。据nVar =南([NCRB 1 R]);csi(问题)。NSlot = NaN([NCRB 1]);结束结束函数dataState = setupDataTransfer(载体,numFrames numLayers)%建立PDSCH数据传输的记录nSlots =载体。SlotsPerFrame * numFrames;TBS =南(1、nSlots);CRC =南(1、nSlots);tput = 0 (1、nSlots);numUEs =元素个数(numLayers);dataState = repmat(结构体(TBS的TBS,“SingleLayerTBS”TBS,“儿童权利公约”CRC,的吞吐量tput) 1、numUEs);结束函数csi = updateCSI (csi,载体,SRS, H,据nVar)%更新获得通过CSI SRS的记录问题= SRS H_ue = H{问题= = SRS};nVar_ue =据nVar{问题= = SRS};idx =找到(所有(~ isnan (nVar_ue), 3));csi(问题). h (idx、::,:) = H_ue (idx、::,:);csi(问题).nVar (idx,:,) = nVar_ue (idx,:,);csi(问题).NSlot (idx) = carrier.NSlot;结束结束函数dataState = updateDataTransfer (dataState载体、singleLayerTBS PDSCH, TBS, CRC)%更新PDSCH数据传输的记录nSlot = carrier.NSlot;问题= PDSCH TBS_ue = TBS{问题= = PDSCH};CRC_ue = CRC{问题= = PDSCH};dataState(问题)。SingleLayerTBS (nSlot + 1) = SingleLayerTBS;dataState(问题)。TBS (nSlot + 1) = TBS_ue;dataState(问题)。CRC (nSlot + 1) = CRC_ue;dataState(问题)。吞吐量(nSlot + 1) = TBS_ue。* (1 - CRC_ue);结束结束函数结果= summarizeResults (dataState)%总结模拟结果numUEs =元素个数(dataState);提单= 0 (numUEs, 1);吞吐量= 0 (numUEs, 1);问题= 1:numUEs CRC = dataState .CRC(问题);CRC = CRC (~ isnan (CRC));提单(问题)= (CRC) /元素个数之和(CRC);吞吐量(问题)=总和(dataState(问题).Throughput);结束用户= (1:numUEs)。';结果=表(用户、提单吞吐量);results.Properties。VariableNames {3} =吞吐量(位)的;结束函数displayDiagnostics(时间表,PDSCHs txSymbols eqSymbols, CRC)%显示诊断信息dispfn = @ (x, y) disp ([sprintf (% 5年代:,x) sprintf (' % 2 d ',y)]);如果(~ isempty (schedule.PDSCH) numUEs =元素个数(schedule.PDSCH);maxLayers = 4;维生素与=南(maxLayers numUEs);numUEs NPRB = 0 (1);i = 1: numUEs问题= schedule.PDSCH(我);pdsch = PDSCHs config(问题);NPRB (i) =元素个数(pdsch.PRBSet);维生素与= comm.EVM;维生素与挣值管理(1:pdsch.NumLayers, i) =都(txSymbols {}, eqSymbols{我});结束dispfn (“PDSCH”,schedule.PDSCH);dispfn (“NPRB”,NPRB);evmlabel =的维生素:;我= 1:maxLayers如果(> 1)evmlabel: =' ';结束如果(~ (isnan(维生素(我,:))))disp ([evmlabel strrep (sprintf (' % 2 d '轮(维生素(我,:))),“南”,' ')));结束结束dispfn (“儿童权利公约”,(CRC {:}));结束如果(~ isempty (schedule.SRS) disp (“SRS传播”);结束结束

另请参阅

功能

对象

相关的话题