NR Downlink Control Information Formats
This example introduces the NR downlink control information (DCI) formats and their definitions, and shows how to use MATLAB® classes to represent DCI formats and encode and decode DCI information bit payloads.
Introduction
NR and LTE use downlink control information (DCI) to send dynamic physical layer control messages from the network to each UE. This information can be system-wide or user-equipment-specific (UE-specific), and contains aspects of uplink and downlink data scheduling, HARQ management, power control, and other signalling. The sidelink uses sidelink control information (SCI) to carry PHY control messages between UEs via a similar mechanism.
NR defines a number of different DCI formats, each serving a different usage, for example, scheduling of PUSCH or PDSCH. Each format specifies an ordered set of bit fields, where each field conveys distinct transmission information, such the frequency resource assignment, time resource assignment, redundancy version, and modulation and coding. The number of bits associated with a field may be fixed, or be dependent on other protocol state, for example, the active BWP size. All the fields map, in order of the format definition, onto a set of information bits, which are then encoded and carried on the physical downlink control channel (PDCCH). The mapping is such that the most significant bit of each field is mapped to the lowest-order information bit for that field. For NR DCI, both padding of zero bits and truncation may be applied to align the payload sizes according to different DCI formats. This size alignment simplifies the blind decoding process and reduces the number of unique payload sizes that have to be searched for.
The fields defined in a format may also depend on the type of RNTI associated with the control information, for example, system information, paging, power control, and user scheduling. This RNTI value scrambles the CRC attached to the information bit payload sent on the PDCCH.
The DCI formats supported by NR Release 16 are:
Representing DCI Formats with MATLAB Classes
MATLAB classes can be used to model DCI formats and fields, where a separate class definition represents each format, and the fields of each format are ordered properties of the class.
In this example, the MATLAB class BitField
represents a single DCI field. Each field object has properties to store the field value, current bit size, and a set of possible sizes, which may depend on the protocol state. This class also defines methods to map the field value to and from information bits.
The MATLAB class MessageFormat
provides a base class from which to derive specific format classes. Each derived format class defines a set of properties of type BitField
for all DCI fields, in the order that they appear for that format. The MessageFormat
base class also defines methods to map all derived class DCI fields to and from information bits. Additionally, the MessageFormat
class overloads the display, property assignment, and reference functionality to provide easy, direct access to the field values. This class supports optional zero-padding for width alignment, but does not support automatic alignment truncation.
DCI Format 1_0 with CRC Scrambled by SI-RNTI
NR DCI formats often have a large number of fields whose sizes depend on the semi-static UE RRC protocol state. This example uses DCI format 1_0 scrambled by SI-RNTI due to its simple field sequence.
This table describes the ordered fields and bitwidths associated with DCI format 1_0 when the CRC is scrambled by SI-RNTI.
Define a DCIFormat1_0_SIRNTI
class for the format by deriving from MessageFormat
and specifying a BitField
property for each format field. In this format, the first and last fields have bitwidths that depend on protocol state parameters (CORESET 0 size and whether the cell has shared spectrum access) and therefore the field widths are set in the class constructor. This ensures that the bitwidths are sized correctly before using DCIFormat1_0_SIRNTI
.
% DCI format 1_0 with CRC scrambled by SI-RNTI classdef DCIFormat1_0_SIRNTI < MessageFormat properties FrequencyDomainResources = BitField(); % Field size depends on CORESET 0 size provided to the constructor TimeDomainResources = BitField(4); % 4 bits VRBToPRBMapping = BitField(1); % 1 bit ModulationCoding = BitField(5); % 5 bit MCS RedundancyVersion = BitField(2); % 2 bit RV SystemInformationIndicator = BitField(1); % 1 bit ReservedBits = BitField(15); % 15 bits reserved (17 bits if Release 16 shared spectrum is enabled in constructor) end methods function obj = DCIFormat1_0_SIRNTI(NDLRB,sharedspectrum) % Class constructor ... end end end
DCI Format 1_0 with CRC Scrambled by SI-RNTI
Use DCIFormat1_0_SIRNTI
objects to map field values to information bit payloads for this format, and to parse information bits back into field values.
% Create DCI format 1_0 object for SI-RNTI and the given cell configuration parameters CORESET0NRB = 24; Rel16SharedSpectrum = 0; dciformat1_0 = DCIFormat1_0_SIRNTI(CORESET0NRB,Rel16SharedSpectrum); % The display customization prints the BitField property values directly % along with the format padding and alignment related properties display(dciformat1_0)
dciformat1_0 = DCIFormat1_0_SIRNTI with field values: FrequencyDomainResources: 0 TimeDomainResources: 0 VRBToPRBMapping: 0 ModulationCoding: 0 RedundancyVersion: 0 SystemInformationIndicator: 0 ReservedBits: 0 Writeable properties: AlignedWidth: [] Read-only properties: Width: 37
% Use the info function to get the individual field sizes info(dciformat1_0,'fieldsizes')
ans = struct with fields:
FrequencyDomainResources: 9
TimeDomainResources: 4
VRBToPRBMapping: 1
ModulationCoding: 5
RedundancyVersion: 2
SystemInformationIndicator: 1
ReservedBits: 15
% Get the non-padded bitwidth for this format and configuration % % Without any further alignment padding, the number of information bits % is given by the Width property dciformat1_0.Width
ans = 37
% Set the aligned width if the information bit payload should % be padded to a specific size dciformat1_0.AlignedWidth = 40
dciformat1_0 = DCIFormat1_0_SIRNTI with field values: FrequencyDomainResources: 0 TimeDomainResources: 0 VRBToPRBMapping: 0 ModulationCoding: 0 RedundancyVersion: 0 SystemInformationIndicator: 0 ReservedBits: 0 Writeable properties: AlignedWidth: 40 Read-only properties: Width: 40 PaddingWidth: 3
% Create a DCI message for transmission on PDCCH txdci = dciformat1_0; % Set the DCI field values % % The assignment customization allows the BitField property values to be set directly txdci.FrequencyDomainResources = 10; txdci.TimeDomainResources = 3; txdci.ModulationCoding = 3; txdci.RedundancyVersion = 3; display(txdci);
txdci = DCIFormat1_0_SIRNTI with field values: FrequencyDomainResources: 10 TimeDomainResources: 3 VRBToPRBMapping: 0 ModulationCoding: 3 RedundancyVersion: 3 SystemInformationIndicator: 0 ReservedBits: 0 Writeable properties: AlignedWidth: 40 Read-only properties: Width: 40 PaddingWidth: 3
% Map the DCI format fields into information payload bits
dciinfobits = toBits(txdci)
dciinfobits = 40x1 int8 column vector
0
0
0
0
0
1
0
1
0
0
⋮
% Map DCI format fields from information bits
rxdci = fromBits(dciformat1_0,dciinfobits)
rxdci = DCIFormat1_0_SIRNTI with field values: FrequencyDomainResources: 10 TimeDomainResources: 3 VRBToPRBMapping: 0 ModulationCoding: 3 RedundancyVersion: 3 SystemInformationIndicator: 0 ReservedBits: 0 Writeable properties: AlignedWidth: 40 Read-only properties: Width: 40 PaddingWidth: 3
isequal(txdci,rxdci)
ans = logical
1
% Encode the DCI information bits and send on PDCCH ncellid = 1; % NCellID si_rnti = hex2dec('FFFF'); % SI-RNTI for PDCCH in a UE-specific search space K = dciformat1_0.Width; % Number of DCI message bits E = 2*288; % Number of bits for PDCCH candidate % Encode DCI dciCW = nrDCIEncode(dciinfobits,si_rnti,E); % Create PDCCH QPSK symbols sym = nrPDCCH(dciCW,ncellid,0); % Add noise to PDCCH symbols EbNo = 3; % EbNo in dB bps = 2; % Bits per symbol, 2 for QPSK EsNo = EbNo + 10*log10(bps); snrdB = EsNo + 10*log10(K/E); rxSym = awgn(sym,snrdB,'measured'); % Recover softbits from PDCCH symbols noiseVar = 10.^(-snrdB/10); % Assumes unit signal power rxCW = nrPDCCHDecode(rxSym,ncellid,0,noiseVar); % Decode DCI information bits listLen = 8; % Polar decoding list length decDCIBits = nrDCIDecode(rxCW,K,listLen,si_rnti); % Map DCI format field from info bits rxdci = fromBits(dciformat1_0,decDCIBits)
rxdci = DCIFormat1_0_SIRNTI with field values: FrequencyDomainResources: 10 TimeDomainResources: 3 VRBToPRBMapping: 0 ModulationCoding: 3 RedundancyVersion: 3 SystemInformationIndicator: 0 ReservedBits: 0 Writeable properties: AlignedWidth: 40 Read-only properties: Width: 40 PaddingWidth: 3
isequal(rxdci,txdci)
ans = logical
1
For more information about the NR downlink control channel, see Modeling Downlink Control Information and Downlink Control Processing and Procedures. For more information about applying MATLAB classes, see Representing Structured Data with Classes.
References
3GPP TS 38.212. "NR; Multiplexing and channel coding (Release 16)." 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.