Main Content

nrPUCCHIndices

Generate PUCCH resource element indices

Since R2021a

Description

[ind,info] = nrPUCCHIndices(carrier,pucch) generates ind, which contains 1-based physical uplink control channel (PUCCH) resource element (RE) indices, as defined in TS 38.211 Section 6.3.2 [1] for all PUCCH formats. carrier specifies the carrier configuration. pucch specifies the PUCCH configuration. The function also generates info, which contains information about the bit capacity and symbol capacity of the uplink control information (UCI) on the PUCCH.

example

[ind,info] = nrPUCCHIndices(carrier,pucch,Name,Value) specifies output formatting options using one or more name-value arguments.

example

Examples

collapse all

Create a default carrier configuration object. This object corresponds to a 10 MHz carrier with 15 kHz subcarrier spacing.

carrier = nrCarrierConfig;

Create a default PUCCH format 0 configuration object.

pucch0 = nrPUCCH0Config;

Specify the size of the bandwidth part (BWP) as 35 and the starting PRB index of the BWP relative to CRB 0 as 12. Specify the first symbol index in the PUCCH transmission slot as 3 and the number of allocated PUCCH symbols as 2. Set the PRB allocated for the PUCCH to 20, enable intraslot frequency hopping, and set the starting PRB index of the second hop to 10.

pucch0.NSizeBWP = 35;
pucch0.NStartBWP = 12;
pucch0.SymbolAllocation = [3 2];
pucch0.PRBSet = 20;
pucch0.FrequencyHopping = 'intraSlot';
pucch0.SecondHopStartPRB = 10;

Generate PUCCH format 0 RE indices, setting the index orientation with respect to the carrier grid.

[ind,info] = nrPUCCHIndices(carrier,pucch0,'IndexOrientation','carrier')
ind = 24x1 uint32 column vector

   2257
   2258
   2259
   2260
   2261
   2262
   2263
   2264
   2265
   2266
      ⋮

info = struct with fields:
                G: 24
               Gd: 24
        NREPerPRB: 24
    DMRSSymbolSet: [1x0 double]
           PRBSet: 20

Plot the generated REs for PUCCH format 0 in the carrier resource grid.

resGrid = nrResourceGrid(carrier);
resGrid(ind) = 1;
imagesc(resGrid)
axis xy
xlabel('OFDM Symbols')
ylabel('Subcarriers')
title('Carrier Grid Containing PUCCH Format 0')

Figure contains an axes object. The axes object with title Carrier Grid Containing PUCCH Format 0, xlabel OFDM Symbols, ylabel Subcarriers contains an object of type image.

Create a default carrier configuration object.

carrier = nrCarrierConfig;

Specify a 60 kHz carrier with extended cyclic prefix. Set the number of RBs in the carrier resource grid to 55 and the slot number to 12.

carrier.SubcarrierSpacing = 60;
carrier.CyclicPrefix = 'extended';
carrier.NSizeGrid = 55;
carrier.NSlot = 12;

Create a default PUCCH format 1 configuration object.

pucch1 = nrPUCCH1Config;

Specify the first symbol index in the PUCCH transmission slot as 3 and the number of allocated PUCCH symbols as 8. Enable intraslot frequency hopping and set the starting PRB index of the second hop to 35.

pucch1.NSizeBWP = [];                  % Set NSizeBWP equal to the NSizeGrid property of carrier
pucch1.NStartBWP = [];                 % Set NStartBWP equal to the NStartGrid property of carrier
pucch1.SymbolAllocation = [3 8];
pucch1.FrequencyHopping = 'intraSlot';
pucch1.SecondHopStartPRB = 35;

Generate PUCCH format 1 RE indices.

[ind,info] = nrPUCCHIndices(carrier,pucch1)
ind = 48x1 uint32 column vector

   2641
   2642
   2643
   2644
   2645
   2646
   2647
   2648
   2649
   2650
      ⋮

info = struct with fields:
                G: 48
               Gd: 48
        NREPerPRB: 48
    DMRSSymbolSet: [3 5 7 9]
           PRBSet: 0

Plot the generated REs for PUCCH format 1 in the carrier resource grid.

resGrid = nrResourceGrid(carrier);
resGrid(ind) = 1;
imagesc(resGrid)
axis xy
xlabel('OFDM Symbols')
ylabel('Subcarriers')
title('Carrier Grid Containing PUCCH Format 1')

Figure contains an axes object. The axes object with title Carrier Grid Containing PUCCH Format 1, xlabel OFDM Symbols, ylabel Subcarriers contains an object of type image.

Create a default carrier configuration object.

carrier = nrCarrierConfig;

Specify the number of RBs in the carrier resource grid as 24, the start of the carrier resource grid relative to CRB 0 as 20, and the slot number as 43.

carrier.NSizeGrid = 24;
carrier.NStartGrid = 20;
carrier.NSlot = 43;

Create a default PUCCH format 2 configuration object.

pucch2 = nrPUCCH2Config;

Specify the first symbol index in the PUCCH transmission slot as 5 and the number of allocated PUCCH symbols as 2. Set the PRBs allocated for the PUCCH to range from 0 to 15 and enable intraslot frequency hopping. Set the starting PRB index of the second hop to 7.

pucch2.SymbolAllocation = [5 2];
pucch2.PRBSet = 0:15;
pucch2.FrequencyHopping = 'intraSlot';
pucch2.SecondHopStartPRB = 7;

Generate PUCCH format 2 RE indices.

[ind,info] = nrPUCCHIndices(carrier,pucch2)
ind = 256x1 uint32 column vector

   1441
   1443
   1444
   1446
   1447
   1449
   1450
   1452
   1453
   1455
      ⋮

info = struct with fields:
                G: 512
               Gd: 256
        NREPerPRB: 16
    DMRSSymbolSet: [5 6]
           PRBSet: [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]

Plot the generated REs for PUCCH format 2 in the carrier resource grid.

resGrid = nrResourceGrid(carrier);
resGrid(ind) = 1;
imagesc(resGrid)
axis xy
xlabel('OFDM Symbols')
ylabel('Subcarriers')
title('Carrier Grid Containing PUCCH Format 2')

Figure contains an axes object. The axes object with title Carrier Grid Containing PUCCH Format 2, xlabel OFDM Symbols, ylabel Subcarriers contains an object of type image.

Create a default carrier configuration object.

carrier = nrCarrierConfig;

Create a default PUCCH format 3 configuration object.

pucch3 = nrPUCCH3Config;

Specify the PRB allocation of the PUCCH to range from 0 to 11. Set the first symbol index in the PUCCH transmission slot to 2 and the number of allocated PUCCH symbols to 12. Enable the additional DM-RS configuration flag.

pucch3.NSizeBWP = [];
pucch3.NStartBWP = [];
pucch3.PRBSet = 0:11;
pucch3.SymbolAllocation = [2 12];
pucch3.AdditionalDMRS = 1;

Generate PUCCH format 3 RE indices, setting the index orientation with respect to the carrier grid.

[ind,info] = nrPUCCHIndices(carrier,pucch3,'IndexOrientation','carrier')
ind = 1152x1 uint32 column vector

   1249
   1250
   1251
   1252
   1253
   1254
   1255
   1256
   1257
   1258
      ⋮

info = struct with fields:
                G: 2304
               Gd: 1152
        NREPerPRB: 96
    DMRSSymbolSet: [3 6 9 12]
           PRBSet: [0 1 2 3 4 5 6 7 8 9 10 11]

Plot the generated REs for PUCCH format 3 in the carrier resource grid.

resGrid = nrResourceGrid(carrier);
resGrid(ind) = 1;
imagesc(resGrid)
axis xy
xlabel('OFDM Symbols')
ylabel('Subcarriers')
title('Carrier Grid Containing PUCCH Format 3')

Figure contains an axes object. The axes object with title Carrier Grid Containing PUCCH Format 3, xlabel OFDM Symbols, ylabel Subcarriers contains an object of type image.

Create a default carrier configuration object.

carrier = nrCarrierConfig;

Create a default PUCCH format 4 configuration object.

pucch4 = nrPUCCH4Config;

Specify the modulation scheme as pi/2-BPSK and the allocated PRB for the PUCCH as 50. Set the first symbol index in the PUCCH transmission slot to 2 and the number of allocated PUCCH symbols to 10. Enable intraslot frequency hopping and the additional DM-RS configuration flag. Set the starting PRB index of the second hop to 10.

pucch4.Modulation = 'pi/2-BPSK';
pucch4.PRBSet = 50;
pucch4.SymbolAllocation = [2 10];
pucch4.FrequencyHopping = 'intraSlot';
pucch4.SecondHopStartPRB = 10;
pucch4.AdditionalDMRS = 1;

Generate the PUCCH format 4 RE indices.

[ind,info] = nrPUCCHIndices(carrier,pucch4)
ind = 72x1 uint32 column vector

   1849
   1850
   1851
   1852
   1853
   1854
   1855
   1856
   1857
   1858
      ⋮

info = struct with fields:
                G: 36
               Gd: 36
        NREPerPRB: 72
    DMRSSymbolSet: [3 5 8 10]
           PRBSet: 50

Plot the generated REs for PUCCH format 4 in the carrier resource grid.

resGrid = nrResourceGrid(carrier);
resGrid(ind) = 1;
imagesc(resGrid)
axis xy
xlabel('OFDM Symbols')
ylabel('Subcarriers')
title('Carrier Grid Containing PUCCH Format 4')

Figure contains an axes object. The axes object with title Carrier Grid Containing PUCCH Format 4, xlabel OFDM Symbols, ylabel Subcarriers contains an object of type image.

Input Arguments

collapse all

Carrier configuration parameters for a specific OFDM numerology, specified as an nrCarrierConfig object. This function only uses these nrCarrierConfig object properties.

PUCCH configuration parameters, specified as one of these options.

For PUCCH formats 0 to 3 and operation with shared spectrum channel access for frequency range 1 (FR1), set the corresponding Interlacing property to true, and use the RBSetIndex and InterlaceIndex object properties to specify the allocated frequency resources. In addition, for PUCCH formats 2 and 3, you can use the SpreadingFactor and OCCI properties to specify single-interlace configurations. (since R2023b)

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

Example: 'IndexStyle','subscript' specifies the RE indexing form of the output.

RE indexing form, specified as one of these values:

  • 'index' — The indices are in linear index form.

  • 'subscript' — The indices are in [subcarrier, symbol, antenna] subscript row form.

Data Types: char | string

RE indexing base, specified as one of these values:

  • '1based' — The index counting starts from 1.

  • '0based' — The index counting starts from 0.

Data Types: char | string

RE indexing orientation, specified as one of these values:

  • 'carrier' — Indices are referenced with respect to the carrier grid.

  • 'bwp' — Indices are referenced with respect to the BWP.

Data Types: char | string

Output Arguments

collapse all

PUCCH RE indices, returned as one of these values:

  • Column vector — The function returns this type of value when you set the IndexStyle name-value argument to 'index'.

  • M-by-3 matrix — The function returns this type of value when you set the IndexStyle name-value argument to 'subscript'. The matrix rows correspond to the [subcarrier, symbol, antenna] subscripts based on the number of subcarriers, OFDM symbols, and number of antennas, respectively.

Depending on the value of IndexBase, the function returns either 1-based or 0-based indices. Depending on the value of IndexOrientation, the function returns either carrier-oriented indices or BWP-oriented indices.

Data Types: uint32

PUCCH resource information, returned as a structure containing these fields. The output data type of each field is double.

FieldDescription
G

Bit capacity of the PUCCH, returned as a value that is equal to the length of the UCI encoded codeword for formats 2, 3, and 4.

Gd

Symbol capacity of the PUCCH

NREPerPRB

Number of REs per PRB allocated to the PUCCH (including the spreading factor)

DMRSSymbolSet

Set of 0-based OFDM symbol locations in a slot containing the demodulation reference signal (DM-RS)

PRBSet (since R2023b)

PRBs allocated for PUCCH within the BWP

References

[1] 3GPP TS 38.211. “NR; Physical channels and modulation.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2021a

expand all