文章目录
- PDSCH DMRS(解调参考信号)简述
- 基本问题
- 例子
- 1. 层数和无数据的DMRS CDM组数量
- 资源元素映射
- 用户设备假设
PDSCH DMRS(解调参考信号)简述
- 这是用来做什么的?
这是一个专门用于解码PDSCH的下行无线信道估计的物理信号。- 为什么需要PDSCH DMRS?
在LTE中,始终有一个用于下行的参考信号,称为CRS(小区参考信号),但在NR中没有这样始终存在的参考信号。相反,NR使用为每个物理信道特定的参考信号。- 每个PDSCH都必须至少有一个OFDM符号的DMRS。
- 我们可以配置额外的PDSCH DMRS,除了强制要求的DMRS之外,还可以选择添加一个、两个或三个额外的符号。
- 通常情况下,用户设备(UE)可以通过增加更多的额外DMRS来更可靠地解码PDSCH(即降低误块率BLER),但最大吞吐量会下降,因为DMRS占用了更多的资源单元,导致用于用户数据的资源单元减少。
- 第一个DMRS的OFDM符号可以是2(第三个符号)或3(第四个符号),并由MIB/PBCH进行配置。
基本问题
DMRS的配置有时会令人困惑,除非你有一个大致的了解。如果你经常回顾以下问题,当阅读本页的详细内容时会有所帮助。
资源分配中映射类型A和B有什么区别?
- 类型A只能从符号2或3开始,意味着从符号4或更高开始的SLIV不能使用这种类型的DMRS。
- 类型B总是从调度的SLIV的第一个符号开始。
资源分配中配置类型1和类型2有什么区别?
- 在配置类型1中,频域中的最小资源单元组是1个RE。
- 在配置类型2中,频域中的最小资源单元组是连续的两个RE。请参见资源单元映射中的图片。
天线端口号对DMRS资源单元位置有什么影响?
- 随着天线端口号的变化,DMRS位置在频域中的位置也会改变。详细信息请查阅此说明。
MIB ::= SEQUENCE {
...
dmrs-TypeA-Position ENUMERATED {pos2, pos3},
...
}
PDSCH-TimeDomainResourceAllocation ::= SEQUENCE {
k0 INTEGER (1..32),
mappingType ENUMERATED {typeA, typeB},
startSymbolAndLength INTEGER (1..127)
}
PDSCH-TimeDomainResourceAllocation-r16 ::= SEQUENCE {
k0-r16 INTEGER (0..32) OPTIONAL, -- Need S
mappingType-r16 ENUMERATED {typeA, typeB},
startSymbolAndLength-r16 INTEGER (0..127),
repetitionNumber-r16 ENUMERATED {n2, n3, n4, n5, n6, n7, n8, n16} OPTIONAL, -- Cond Formats1-0and1-1
...
}
-
k0:对应于 L1 参数 ‘K0’。当该字段缺失时,UE 应用值 0。
-
mappingType:PDSCH 映射类型。对应于 L1 参数 ‘Mapping-type’(参见 SLIV 页面)。
-
startSymbolAndLength:在 RAN1 规范中的表格/方程中的索引,捕获符号起始和长度的有效组合(联合编码)。对应于 L1 参数 ‘Index-start-len’(参见 SLIV 页面)。
PDSCH-Config ::= SEQUENCE {
...
dmrs-DownlinkForPDSCH-MappingTypeA SetupRelease { DMRS-DownlinkConfig },
dmrs-DownlinkForPDSCH-MappingTypeB SetupRelease { DMRS-DownlinkConfig },
...
}
DMRS-DownlinkConfig ::= SEQUENCE {
dmrs-Type ENUMERATED { type2 } OPTIONAL, -- Need R
dmrs-AdditionalPosition ENUMERATED { pos0, pos1, pos3 } OPTIONAL, -- Need R
dmrs-group1 BIT STRING (SIZE (12)) OPTIONAL, -- Need R
dmrs-group2 BIT STRING (SIZE (12)) OPTIONAL, -- Need R
maxLength ENUMERATED { len2 } OPTIONAL, -- Need R
scramblingID0 INTEGER (0..65535) OPTIONAL, -- Need S
scramblingID1 INTEGER (0..65535) OPTIONAL, -- Need S
phaseTrackingRS SetupRelease { PTRS-DownlinkConfig } OPTIONAL, -- Need M
...
}
PTRS-DownlinkConfig ::= SEQUENCE {
frequencyDensity SEQUENCE (SIZE (2)) OF INTEGER (1..276) OPTIONAL, -- Need S
timeDensity SEQUENCE (SIZE (3)) OF INTEGER (0..29) OPTIONAL, -- Need S
epre-Ratio INTEGER (0..3) OPTIONAL, -- Need S
resourceElementOffset ENUMERATED { offset01, offset10, offset11 } OPTIONAL, -- Need S
...
}
-
dmrs-Type:用于下行链路(DL)的 DMRS 类型选择。如果该字段缺失,UE 使用 DMRS 类型 1。
-
dmrs-AdditionalPosition:在下行链路(DL)中额外 DM-RS 的位置。四种值分别表示 1+0, 1+1, 1+1+1, 1+1+1+1 的非相邻 OFDM 符号位置。如果该字段缺失,UE 使用
pos2
值。 -
dmrs-group1:QCL(准共线)分组的 DM-RS,第 1 组。
-
dmrs-group2:QCL(准共线)分组的 DM-RS,第 2 组。
-
maxLength:DL 前置加载 DMRS 的 OFDM 符号的最大数量。
len1
对应值 1,len2
对应值 2。如果该字段缺失,UE 使用len1
值。对应于 L1 参数DL-DMRS-max-len
。 -
scramblingID0:下行链路 DMRS 扰频初始化。对应于 L1 参数
n_SCID 0
。当该字段缺失时,UE 使用该小区配置的物理小区 ID(physCellID
)。 -
scramblingID1:下行链路 DMRS 扰频初始化。对应于 L1 参数
n_SCID 0
。当该字段缺失时,UE 使用该小区配置的物理小区 ID(physCellID
)。 -
phaseTrackingRS:配置下行链路 PTRS。如果该字段缺失或已释放,UE 假定下行链路 PTRS 不存在。
仅通过查看规范,你几乎不可能完全理解这些参数的实际含义,除非你是设计该算法的人*或创建了自己的程序来实现该规范并将其绘制为图形。我并不是设计这个算法的人,也没有自己的程序来实现它。因此,对于我来说,很难对这些参数和算法获得直观的理解。幸运的是,我有机会使用 Matlab 5G 库进行尝试。下面是我使用 Matlab 创建的一些图形示例。我在这里发布了 Matlab 代码和更多示例。该示例中使用的子载波间隔为 30 KHz,为了简单起见,我只为 PDSCH 分配了一个 RB。
例子
浏览这些示例,尝试找出一些直观的模式。如果你不容易看到任何模式,请先参考 Resource Element Mapping 部分,然后再返回这些示例。
以下是我为本页面中的所有示例编写的 Matlab 5G 工具箱代码。
% 配置载波,设置当前时隙为0
carrier = nrCarrierConfig('NSlot',0);
% 配置PDSCH(物理下行共享信道)
pdsch = nrPDSCHConfig;
pdsch.NumLayers = 1; % 设置传输层数为1
pdsch.PRBSet = 0:50; % 设置物理资源块(PRB)集合,0到50个PRB
pdsch.MappingType = 'A'; % 映射类型为A类型
pdsch.SymbolAllocation = [0 14]; % 定义PDSCH在OFDM符号中的起始位置和符号长度
% 配置DM-RS(解调参考信号)
dmrs = nrPDSCHDMRSConfig;
dmrs.DMRSConfigurationType = 1; % DMRS配置类型为1
dmrs.DMRSLength = 1; % DMRS的长度为1符号
dmrs.DMRSAdditionalPosition = 0; % 无额外的DMRS符号
dmrs.DMRSTypeAPosition = 2; % 设置DMRS的Type A起始位置为第2个符号
% 根据PDSCH的层数设置DMRS的端口
if pdsch.NumLayers == 1
dmrs.DMRSPortSet = [0]; % 单层时使用端口0
elseif pdsch.NumLayers == 2
dmrs.DMRSPortSet = [0 1]; % 两层时使用端口0和1
elseif pdsch.NumLayers == 3
dmrs.DMRSPortSet = [0 1 2]; % 三层时使用端口0、1和2
elseif pdsch.NumLayers == 4
dmrs.DMRSPortSet = [0 1 2 3]; % 四层时使用端口0、1、2和3
end
dmrs.NumCDMGroupsWithoutData = 1; % 设置无数据的CDM组数为1
dmrs.NIDNSCID = 10; % 配置DMRS的NID为10
dmrs.NSCID = 0; % 设置NSCID为0
% 将DMRS配置赋值给PDSCH
pdsch.DMRS = dmrs;
% 生成DMRS符号
sym_dmrs = nrPDSCHDMRS(carrier,pdsch,'OutputDataType','single');
% 生成DMRS的索引
ind_dmrs = nrPDSCHDMRSIndices(carrier,pdsch,'IndexBase','0based','IndexOrientation','carrier');
% 生成PDSCH的索引
ind_pdsch = nrPDSCHIndices(carrier,pdsch,'IndexBase','0based','IndexOrientation','carrier');
% 初始化PDSCH网格,大小为[子载波数量 x 时隙符号数 x 层数]
grid = complex(zeros([carrier.NSizeGrid*12 carrier.SymbolsPerSlot pdsch.NumLayers]));
% 将DMRS符号填入网格
grid(ind_dmrs+1) = sym_dmrs;
% 将PDSCH数据填入网格,这里用值0.5表示PDSCH数据
grid(ind_pdsch+1) = 0.5;
% 绘制网格
hFig = figure(2);
set(hFig, 'Position', [100 100 900 200]); % 设置绘图窗口大小
set(gcf,'color','w'); % 设置背景颜色为白色
% 为每个传输层绘制子图
for i = 1:pdsch.NumLayers
subplot(1,4,i); % 创建1行4列的子图,当前为第i个子图
hold on;
% 绘制当前层的网格
imagesc(abs(grid(:,:,i)));
% 设置子图标题,显示端口号
title(strcat('Port 100',num2str(dmrs.DMRSPortSet(i))));
% 添加白色的竖线分割符号
for i = 2:14
line([i-0.5 i-0.5],[0 273*12],'Color','white');
end
% 添加白色的横线分割子载波
for j = 1:12
line([0 15],[j+0.5 j+0.5],'Color','white');
end
hold off;
axis xy; % 设定Y轴为正方向
box on; % 显示边框
xlabel('OFDM Symbols'); % X轴标签
ylabel('Subcarriers'); % Y轴标签
xlim([0.5 14.5]); % X轴范围
ylim([0.5 12.5]); % Y轴范围
% 设置X轴的刻度和标签
set(gca,'xtick',[0:14]);
set(gca,'xticklabel',{'','0','1','2','3','4','5','6','7','8','9','10','11','12','13'});
% 设置Y轴的刻度和标签
set(gca,'ytick',[0:12]);
set(gca,'yticklabel',{'','0','1','2','3','4','5','6','7','8','9','10','11'});
end
1. 层数和无数据的DMRS CDM组数量
pdsch.NumLayers = 1;
pdsch.MappingType = 'A';
pdsch.SymbolAllocation = [0 14]; % [startSymbol Length]
dmrs.DMRSConfigurationType = 1;
dmrs.DMRSLength = 1;
dmrs.DMRSAdditionalPosition = 0;
dmrs.DMRSTypeAPosition = 2;
dmrs.NumCDMGroupsWithoutData = 1;
dmrs.NIDNSCID = 10;
dmrs.NSCID = 0;
-
pdsch.NumLayers = 1;
- 设置PDSCH的传输层数为1,即单层传输,只有一个数据流。
-
pdsch.MappingType = 'A';
- 设置PDSCH映射类型为
A
,通常表示从OFDM符号从符号2或3开始映射。
- 设置PDSCH映射类型为
-
pdsch.SymbolAllocation = [0 14]; % [startSymbol Length]
- PDSCH符号分配从符号0开始,长度为14个OFDM符号,覆盖整个时隙。
-
dmrs.DMRSConfigurationType = 1;
- 选择DMRS的配置类型1,每个时域符号中只分配一个资源单元(RE)。
-
dmrs.DMRSLength = 1;
- DMRS符号长度为1个OFDM符号。
-
dmrs.DMRSAdditionalPosition = 0;
- 没有额外的DMRS符号位置分配。
-
dmrs.DMRSTypeAPosition = 2;
- DMRS符号从第2个OFDM符号(索引为2)开始分配。
-
dmrs.NumCDMGroupsWithoutData = 1;
- 使用1个没有数据的CDM(码分复用)组。
-
dmrs.NIDNSCID = 10;
- 伪随机序列生成的ID为10,用于生成唯一的DMRS序列。
-
dmrs.NSCID = 0;
- 选择扰码序列版本0,确保生成特定的DMRS序列。
pdsch.NumLayers = 2;
pdsch.MappingType = 'A';
pdsch.SymbolAllocation = [0 14]; % [startSymbol Length]
dmrs.DMRSConfigurationType = 1;
dmrs.DMRSLength = 1;
dmrs.DMRSAdditionalPosition = 0;
dmrs.DMRSTypeAPosition = 2;
dmrs.NumCDMGroupsWithoutData = 1;
dmrs.NIDNSCID = 10;
dmrs.NSCID = 0;
pdsch.NumLayers = 2;
- 设置PDSCH的传输层数为2,即双层传输,有2个数据流。
pdsch.NumLayers = 3;
pdsch.MappingType = 'A';
pdsch.SymbolAllocation = [0 14]; % [startSymbol Length]
dmrs.DMRSConfigurationType = 1;
dmrs.DMRSLength = 1;
dmrs.DMRSAdditionalPosition = 0;
dmrs.DMRSTypeAPosition = 2;
dmrs.NumCDMGroupsWithoutData = 1;
dmrs.NIDNSCID = 10;
dmrs.NSCID = 0;
pdsch.NumLayers = 3;
- 设置PDSCH的传输层数为3,即三层传输,有3个数据流。
资源元素映射
PDSCH DMRS 的资源映射按以下公式进行。为简单起见,我们只考虑资源元素的位置(即,仅考虑 k k k 和 l l l)。 k k k 代表频域位置, l l l 代表时域位置。
考虑到这一点,首先你可以注意到的是:
-
配置类型改变了频域中的位置模式
-
配置类型 1:DMRS 在一个 OFDM 符号/一个 RB 中分散为 3 对(6 个资源元素:RE),每对的间隔为 4 RE (4n)。每对中的 2 个 RE 在频域中间隔 2 RE (2k’)。简而言之,6 个 DMRS 符号的 RE 以每隔一个 RE 的方式分布在频域中。这支持 8 个 DMRS 端口的双符号 DMRS(端口 1000~1007),以及单符号 DMRS 的 4 个 DMRS 端口(端口 1000~1003)。更多详细信息请参阅 Table 7.4.1.1.2-1 和 Table 7.4.1.1.2-5。
-
配置类型 2:DMRS 在一个 OFDM 符号/一个 RB 中分散为 2 对(4 个资源元素:RE),每对的间隔为 6 RE (6n)。每对中的 2 个 RE 以 1 RE(k’) 的间隔排列,意味着每对中的 2 个 RE 是相邻的。这支持 12 个 DMRS 端口的双符号 DMRS(端口 1000~1011),以及单符号 DMRS 的 8 个 DMRS 端口(端口 1000~1007)。更多详细信息请参阅 Table 7.4.1.1.2-1 和 Table 7.4.1.1.2-5。
-
-
PDSCH 映射类型改变了时域中的位置模式
-
PDSCH 映射类型 A:在此类型中,无论 PDSCH 的起始符号和长度如何,DMRS 符号只能从符号 2 或符号 3 开始。这意味着当 PDSCH 起始符号大于 3 时,无法使用该配置。此类型用于基于时隙的调度,相关信息参见 PDSCH SLIV 表格 中的
Type A
行。 -
PDSCH 映射类型 B:在此类型中,无论 PDSCH 起始符号是什么,DMRS 符号可以从第一个 PDSCH 符号开始。此类型用于小时隙(mini-slot)调度,相关信息参见 PDSCH SLIV 表格 中的
Type B
行。
-
另一个你会注意到的点是:
- 频域位置 k k k 是通过下面显示的公式(方程)来确定的。
- 时域位置 l l l 是通过预定义的表格和预定义的值来确定的。
用户设备假设
用户设备应假设PDSCH DM-RS根据配置类型1或配置类型2映射到物理资源,如高层参数dmrs-Type
所给定。
用户设备应假设序列 r ( m ) r(m) r(m) 被因子 β P D S C H D M R S \beta^{DMRS}_{PDSCH} βPDSCHDMRS 缩放,以符合在文献[6, TS 38.214]中指定的传输功率,并根据下式映射到资源单元 ( k , l ) p , μ (k, l)_{p,\mu} (k,l)p,μ:
a k , l ( p , μ ) = β P D S C H D M R S w f ( k ′ ) w t ( l ′ ) r ( 2 n + k ′ ) a^{(p,\mu)}_{k,l} = \beta^{DMRS}_{PDSCH} w_f(k') w_t(l') r(2n+k') ak,l(p,μ)=βPDSCHDMRSwf(k′)wt(l′)r(2n+k′)
其中:
- 配置类型1:
k = 4 n + 2 k ′ + Δ k = 4n + 2k' + \Delta k=4n+2k′+Δ - 配置类型2:
k = 6 n + k ′ + Δ k = 6n + k' + \Delta k=6n+k′+Δ - k ′ = 0 , 1 k' = 0, 1 k′=0,1
- l = l ˉ + l ′ l = \bar{l} + l' l=lˉ+l′
- n = 0 , 1 , … n = 0, 1, \dots n=0,1,…
其中, w f ( k ′ ) w_f(k') wf(k′)、 w t ( l ′ ) w_t(l') wt(l′) 和 Δ \Delta Δ 由表格7.4.1.1.2-1和7.4.1.1.2-2给出,并满足以下条件:
- 资源单元位于为PDSCH传输分配的公共资源块内。
k k k 的参考点是:
-
如果对应的PDCCH与CORESET 0和Type0-PDCCH公共搜索空间相关联,并且目标是SI-RNTI,则参考点 k k k 为CORESET 0中编号最小的资源块的子载波0。
-
否则,参考点 k k k 为公共资源块0中的子载波0。
l l l 的参考点和第一个DM-RS符号的位置 l 0 l_0 l0 取决于映射类型:
-
对于PDSCH映射类型A:
-
l l l 相对于时隙的起始位置定义。
-
如果高层参数
dmrs-TypeA-Position
等于’pos3’,则 l 0 = 3 l_0 = 3 l0=3,否则 l 0 = 2 l_0 = 2 l0=2。
-
-
对于PDSCH映射类型B:
-
l l l 相对于计划的PDSCH资源的起始位置定义。
-
l 0 = 0 l_0 = 0 l0=0
-
DM-RS符号的位置由 l ˉ \bar{l} lˉ 和持续时间 l d l_d ld 决定,其中:
-
对于PDSCH映射类型A, l d l_d ld 是时隙的第一个OFDM符号与计划的PDSCH资源的最后一个OFDM符号之间的持续时间。
-
对于PDSCH映射类型B, l d l_d ld 是计划的PDSCH资源的持续时间。
并参考 表格7.4.1.1.2-3 和 7.4.1.1.2-4。