# nrDCIDecode

## Syntax

``dcibits = nrDCIDecode(softbits,K,L)``
``[dcibits,mask] = nrDCIDecode(softbits,K,L)``
``[dcibits,mask] = nrDCIDecode(softbits,K,L,rnti)``

## Description

````dcibits = nrDCIDecode(softbits,K,L)` decodes the input `softbits` and returns the decoded DCI bits of length `K`. The function implements the inverse of the features specified in TS 38.212 Sections 7.3.4, 7.3.3, and 7.3.2 [1], such as rate recovery, polar decoding, and cyclic redundancy check (CRC) decoding. `L` specifies the list length used for polar decoding. ```
````[dcibits,mask] = nrDCIDecode(softbits,K,L)` also looks for a cyclic redundancy check (CRC) error in the DCI decoding. If `mask` is not equal to 0, either an error has occurred or the input CRC has been masked. When there are no CRC errors, `mask` is the actual value used for masking the CRC bits.```

example

````[dcibits,mask] = nrDCIDecode(softbits,K,L,rnti)` specifies a radio network temporary identifier (RNTI). You can use this syntax when the value of `rnti` masks the CRC parity bits at the transmit end. When you specify `rnti` and there are no CRC errors, `mask` equals to 0.```

## Examples

collapse all

Create a random sequence of binary values corresponding to a DCI message of 32 bits. Encode the message based on the specified RNTI and rate-matched DCI codeword length. The RNTI masks the CRC parity bits.

```K = 32; rnti = 100; E = 240; dciBits = randi([0 1],K,1); dcicw = nrDCIEncode(dciBits,rnti,E);```

Decode the soft bits representing the DCI codeword `dcicw` by specifying the RNTI used for the CRC masking. Set the length of the polar decoding list to `8`.

```L = 8; [recBits,mask] = nrDCIDecode(1-2*dcicw,K,L,rnti)```
```recBits = 32x1 int8 column vector 1 1 0 1 1 0 0 1 1 1 ⋮ ```
```mask = uint32 0 ```

Verify that the transmitted and received message bits are identical.

`isequal(recBits,dciBits)`
```ans = logical 1 ```

Verify that the decoding is without error. As the decoding specified the RNTI used for masking, a mask value of 0 indicates no error.

`mask`
```mask = uint32 0 ```

## Input Arguments

collapse all

Coded block of soft bits, specified as a column vector of real numbers.

Data Types: `double` | `single`

Length of decoded output in bits, specified as an integer from 12 to 140.

Data Types: `double`

Length of polar decoding list, specified as a power of two.

Data Types: `double`

RNTI of the UE, specified as an integer from 0 to 65,535.

Data Types: `double`

## Output Arguments

collapse all

Decoded DCI message bits, returned as a `K`-by-1 column vector of binary values. The message bits were transmitted on a single physical downlink control channel (PDCCH).

Data Types: `int8`

Result of CRC decoding, returned as a nonnegative integer less than or equal to 216–1. If `mask` is not equal to 0, either an error has occurred or the CRC has been masked. When there are no errors, `mask` is the actual value used for masking the CRC bits.

Data Types: `uint32`

## References

[1] 3GPP TS 38.212. “NR; Multiplexing and channel coding.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

## Version History

Introduced in R2018b

expand all