Demodulate using SC-FDMA

## Syntax

``grid = lteSCFDMADemodulate(ue,waveform)``
``grid = lteSCFDMADemodulate(ue,waveform,cpfraction)``
``grid = lteSCFDMADemodulate(ue,chs,waveform)``
``grid = lteSCFDMADemodulate(ue,chs,waveform,cpfraction)``

## Description

example

````grid = lteSCFDMADemodulate(ue,waveform)` returns the resource array `grid` by performing single-carrier frequency-division multiple access (SC-FDMA) demodulation of `waveform`, the time-domain waveform, for user-equipment-specific (UE-specific) settings `ue`. You can use this syntax for LTE demodulation or NB-IoT multitone demodulation, depending on the fields you specify in `ue`.The demodulation calculates one fast Fourier transform (FFT) operation per received SC-FDMA symbol. It recovers the received subcarrier values, which are then used to construct each column of `grid`. The FFT is positioned partway through the cyclic prefix to allow for a degree of channel delay spread while avoiding the overlap between adjacent orthogonal frequency-division multiplexing (OFDM) symbols. The input FFT is also shifted by half a subcarrier. The particular position of the FFT chosen here avoids the SC-FDMA symbol overlapping used in the `lteSCFDMAModulate` function. Since the FFT is performed away from the original zero-phase point on the transmitted subcarriers, a phase correction is applied to each subcarrier after the FFT. ```
````grid = lteSCFDMADemodulate(ue,waveform,cpfraction)` performs SC-FDMA demodulation of the input waveform with the specified position of demodulation with respect to cyclic prefix `cpfraction`.```

example

````grid = lteSCFDMADemodulate(ue,chs,waveform)` performs SC-FDMA demodulation of the input waveform and the narrowband PUSCH (NPUSCH) information specified by `chs`. You can use this syntax for LTE, single-tone NB-IoT, and multitone NB-IoT configurations. When you use this syntax without configuring `ue` for NB-IoT, the function ignores `chs`.```

example

````grid = lteSCFDMADemodulate(ue,chs,waveform,cpfraction)` performs SC-FDMA demodulation of the waveform for the specified NPUSCH information and demodulation position. You can use this syntax for LTE, single-tone NB-IoT, and multitone NB-IoT configurations. When you use this syntax without configuring `ue` for NB-IoT, the function ignores `chs`.```

## Examples

collapse all

Perform SC-FDMA demodulation of uplink fixed reference channel (FRC) A3-2.

Initialize UE-specific settings as the fixed reference channel A3-2 by specifying the relevant configuration in the `lteRMCUL` function.

`ue = lteRMCUL('A3-2');`

Specify the waveform to be demodulated by using the `lteRMCULTool` function. Get the resource array by performing SC-FDMA demodulation.

```waveform = lteRMCULTool(ue,randi([0,1],ue.PUSCH.TrBlkSizes(1),1)); grid = lteSCFDMADemodulate(ue,waveform);```

Perform NB-IoT uplink single-tone SC-FDMA demodulation with 3.75-kHz subcarrier spacing.

Specify the number of slots for waveform generation.

`NSlots = 10;`

Initialize the required cell-wide settings by specifying the NB-IoT subcarrier spacing as a field in the structure `ue`.

`ue.NBULSubcarrierSpacing = '3.75kHz';`

Specify the zero-based NB-IoT subcarrier indices field as a scalar, indicating single-tone SC-FDMA demodulation. This configuration requires specification of the modulation type, number of slots per resource unit (RU), number of RUs, and number of repetitions for a codeword.

```chs.NBULSubcarrierSet = 41; % Indicate single-tone demodulation chs.Modulation = 'BPSK'; % Specify modulation type as BPSK chs.NULSlots = 4; % Set four slots per RU chs.NRU = 1; % Specify one RU chs.NRep = 4; % Repeat codeword four times```

Set the input grid to start from the third time slot in an NPUSCH bundle.

`chs.SlotIdx = 2;`

Specify a random array of bits and map the values to BPSK-modulated symbols by using the `lteSymbolModulate` function. Perform uplink precoding on the modulated symbols by using the `lteULPrecode` function.

```bits = randi([0,1],7*NSlots,1); symbols = lteSymbolModulate(bits,chs.Modulation); precodedSymbols = lteULPrecode(symbols,1,'Subcarrier');```

Initialize the resource element (RE) grid using the precoded symbols.

```reGrid = zeros(48,7*NSlots); NSC = length(chs.NBULSubcarrierSet); reGrid(chs.NBULSubcarrierSet+1,:) = reshape(precodedSymbols,NSC,[]);```

Generate the time-domain waveform for demodulation by using the `lteSCFDMAModulate` function.

`[waveform,info] = lteSCFDMAModulate(ue,chs,reGrid);`

Get the resource array by performing SC-FDMA demodulation on the waveform.

`grid = lteSCFDMADemodulate(ue,chs,waveform);`

Perform NB-IoT uplink multitone SC-FDMA demodulation with 15 kHz subcarrier spacing for a chosen cyclic prefix fraction.

Specify the number of slots for waveform generation.

`NSlots = 10;`

Initialize the required cell-wide settings by specifying the NB-IoT subcarrier spacing as a field in the structure `ue`.

`ue.NBULSubcarrierSpacing = '15kHz';`

Specify the zero-based NB-IoT subcarrier indices field as a vector, indicating multitone SC-FDMA demodulation, and the modulation type.

```chs.NBULSubcarrierSet = 0:2; % Indicate multitone demodulation chs.Modulation = 'QPSK'; % Specify modulation type as QPSK```

Specify a random array of bits and map the values to QPSK-modulated symbols by using the `lteSymbolModulate` function. Perform uplink precoding on the modulated symbols by using the `lteULPrecode` function.

```bits = randi([0,1],7*NSlots*2*length(chs.NBULSubcarrierSet),1); symbols = lteSymbolModulate(bits,chs.Modulation); precodedSymbols = lteULPrecode(symbols,length(chs.NBULSubcarrierSet),'Subcarrier');```

Initialize the RE grid using the precoded symbols.

```grid = repmat(lteNBResourceGrid(ue),1,NSlots); NSC = length(chs.NBULSubcarrierSet); grid(chs.NBULSubcarrierSet+1,:) = reshape(precodedSymbols,NSC,[]);```

Generate the time-domain waveform for demodulation by using the `lteSCFDMAModulate` function.

`[waveform,info] = lteSCFDMAModulate(ue,chs,grid);`

Specify the cyclic prefix fraction and get the resource array by performing SC-FDMA demodulation on the waveform.

```cpfraction = 0.3; grid = lteSCFDMADemodulate(ue,chs,waveform,cpfraction);```

## Input Arguments

collapse all

UE-specific settings, specified as a structure. The fields you specify in `ue` and `chs` determine whether the function performs SC-FDMA demodulation for an LTE or NB-IoT configuration. To choose an LTE configuration, specify the `NULRB` field. To choose an NB-IoT configuration, specify the `NBULSubcarrierSpacing` field. The `CyclicPrefixUL` field is optional and is applicable only for an LTE configuration.

Number of uplink resource blocks, ${N}_{\text{RB}}^{\text{UL}}$, specified as an integer in the interval [6, 110]. To return SC-FDMA modulation information for an LTE configuration, you must specify this field.

Data Types: `double`

Cyclic prefix length, specified as `'Normal'` or `'Extended'`. This field is optional.

#### Dependencies

This field applies only when you choose an LTE configuration by specifying the `NULRB` field.

Data Types: `char` | `string`

NB-IoT subcarrier spacing, specified as `'3.75kHz'` or `'15kHz'`. To set a subcarrier spacing of 3.75 kHz, specify `NBULSubcarrierSpacing` as `'3.75kHz'`. To set a subcarrier spacing of 15 kHz, specify `NBULSubcarrierSpacing` as `'15kHz'`.

To use `lteSCFDMADemodulate` for NB-IoT demodulation, you must specify this field. To indicate an LTE configuration, omit this field.

Note

For a subcarrier spacing of 3.75 kHz, `lteSCFDMADemodulate` supports only single-tone NB-IoT configurations.

Data Types: `char` | `string`

Data Types: `struct`

NPUSCH information, specified as a structure. For an NB-IoT configuration, you can set additional uplink-specific parameters by specifying the NB-IoT-specific fields in `chs`. Except for the `NBULSubcarrierSet` field, the fields in `chs` are applicable either when `NBULSubcarrierSpacing` is `'3.75kHz'` or when `ue.NBULSubcarrierSpacing` is `'15kHz'` and `length(chs.NBULSubcarrierSet)` is `1`.

NB-IoT uplink subcarrier indices, specified as a vector of nonnegative integers in the interval [0, 11] or a nonnegative integer in the interval [0, 47]. The indices are in zero-based form. To use `lteSCFDMADemodulate` for single-tone NB-IoT demodulation, you must specify `NBULSubcarrierSet` as a scalar. If you do not specify `NBULSubcarrierSet`, `lteSCFDMADemodulate` performs multi-tone NB-IoT demodulation by default. If you specify the `NBULSubcarrierSpacing` field as `'15kHz'`, this field is required.

Data Types: `double`

Modulation type, specified as `'BPSK'` or `'QPSK'`. For binary phase shift keying (BPSK), specify `Modulation` as `'BPSK'`. For quadrature phase shift keying (QPSK), specify `Modulation` as `'QPSK'`.

Data Types: `char` | `string`

Number of slots per resource unit (RU), specified as a positive integer. To use `lteSCFDMADemodulate` for single-tone NB-IoT demodulation, you must specify this field.

Data Types: `double`

Number of RUs, specified as a positive integer. To use `lteSCFDMADemodulate` for single-tone NB-IoT demodulation, you must specify this field.

Data Types: `double`

Number of repetitions for a codeword, specified as a nonnegative integer. To use `lteSCFDMADemodulate` for single-tone NB-IoT demodulation, you must specify this field.

Data Types: `double`

Relative slot index in an NPUSCH bundle, specified as a nonnegative integer. This field determines the zero-based relative slot index in a bundle of time slots for transmission of a transport block or control information bit.

Data Types: `double`

Data Types: `struct`

Time-domain waveform, specified as a complex-valued matrix. The sampling rate of `waveform` must be the same as used in the `lteSCFDMAModulate` modulator function for the number of resource blocks specified in the `NULRB` field of `ue`. The waveform must be time-aligned such that the first sample is the first sample of the cyclic prefix of the first SC-FDMA symbol in a subframe.

Data Types: `double`
Complex Number Support: Yes

Cyclic prefix fraction, specified as a scalar in the interval [0, 1]. This argument specifies the position of the demodulation with respect to the cyclic prefix. A value of `0` represents the start of the cyclic prefix. A value of `1` represents the end of the cyclic prefix.

• For LTE demodulation, the default value is `0.55`.

• For NB-IoT demodulation with 3.75-kHz subcarrier spacing, the default value is `0.18`.

• For NB-IoT demodulation with 15-kHz subcarrier spacing, the default value is `0.22`.

The default value allows for the default level of windowing in the `lteSCFDMAModulate` function.

Data Types: `double`

## Output Arguments

collapse all

Output resource array, returned as a complex-valued matrix.

Data Types: `double`
Complex Number Support: Yes

## Version History

Introduced in R2014a