Demodulate using SC-FDMA

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));

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.

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;

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

Introduced in R2014a