lteULPrecode

SC-FDMA precoding

Description

out = lteULPrecode(...) performs SC-FDMA precoding of the complex modulation symbols for PUSCH or NPUSCH configuration.

example

out = lteULPrecode(in,nrb) performs SC-FDMA precoding of the complex modulation symbols in for PUSCH or NPUSCH configuration with a bandwidth of nrb resource blocks.

out = lteULPrecode(in,n,resourcetype) performs SC-FDMA precoding of the complex modulation symbols in for PUSCH or NPUSCH configuration with a bandwidth of n resource blocks or subcarriers.

Examples

collapse all

UL precoding is a step in the PUSCH processing chain. The chain includes scrambling, symbol mapping, UL precoding, RE mapping, and SC-FDMA modulation.

Create a UE-specific configuration structure, get PUSCH indices, and generate a bit stream sized according to configuration structure.

ue = lteRMCUL('A3-2');
[puschInd, info] = ltePUSCHIndices(ue,ue.PUSCH);
ueDim = lteULResourceGridSize(ue);
bits = randi([0,1],info.G,ue.PUSCH.NLayers);

Perform scrambling, symbol modulation, and UL precoding.

scrBits = lteULScramble(ue,bits);
symbols = lteSymbolModulate(scrBits,ue.PUSCH.Modulation);
precodedSymbols = lteULPrecode(symbols,ue.NULRB);

Generate resource mapping grid, populate the grid with the precoded symbols, and perform SC-FDMA modulation.

grid = lteULResourceGrid(ue);
grid(puschInd) = precodedSymbols;
[timeDomainSig,infoScfdma] = lteSCFDMAModulate(ue,grid);

Three-tone NB-IoT uplink SC-FDMA processing chain: symbol mapping, UL precoding, and SC-FDMA modulation.

NSlots = 10; % Number of slots in the generated waveform
ue.NBULSubcarrierSpacing = '15kHz'; % NB-IoT with subcarrier spacing 15kHz
chs.NBULSubcarrierSet = 0:2; % Subcarrier locations
bits = randi([0,1],7*NSlots*length(chs.NBULSubcarrierSet)*2,1);
symbols = lteSymbolModulate(bits,'QPSK');
precodedSymbols = lteULPrecode(symbols,length(chs.NBULSubcarrierSet),'Subcarrier');
reGrid = zeros([12 7*NSlots]); % Initialize the grid
reGrid(chs.NBULSubcarrierSet+1,:) = reshape(precodedSymbols,length(chs.NBULSubcarrierSet),7*NSlots);
waveform = lteSCFDMAModulate(ue,chs,reGrid);
waveform = waveform(1:5)
waveform = 5×1 complex

   0.0138 + 0.0017i
   0.0137 - 0.0017i
   0.0128 - 0.0050i
   0.0112 - 0.0079i
   0.0089 - 0.0104i

Single-tone NB-IoT uplink SC-FDMA processing chain: symbol mapping, UL precoding, and SC-FDMA modulation.

NSlots = 16; % Number of slots in the generated waveform
ue.NBULSubcarrierSpacing = '3.75kHz'; % NB-IoT with subcarrier spacing 3.75kHz
chs.NULSlots = 4;
chs.NRU = 1;
chs.NRep = 4;
chs.SlotIdx = 0;
chs.Modulation = 'BPSK';
chs.NBULSubcarrierSet = 41; % Subcarrier location, should be within range 0...47
bits = randi([0,1],7*NSlots*length(chs.NBULSubcarrierSet),1);
symbols = lteSymbolModulate(bits,chs.Modulation);
precodedSymbols = lteULPrecode(symbols,length(chs.NBULSubcarrierSet),'Subcarrier');
reGrid = zeros([48 7*NSlots]); % Initialize the grid
reGrid(chs.NBULSubcarrierSet+1,:) = reshape(precodedSymbols,length(chs.NBULSubcarrierSet),7*NSlots);
waveform = lteSCFDMAModulate(ue,chs,reGrid);
waveform = waveform(1:5) 
waveform = 5×1 complex

   0.0017 + 0.0009i
   0.0015 + 0.0013i
   0.0012 + 0.0016i
   0.0008 + 0.0018i
   0.0004 + 0.0019i

Input Arguments

collapse all

Complex modulation symbols, specified as an NSym-by-NL matrix of complex symbols. NSym is the number of symbols and NL is the number of layers.

Data Types: double
Complex Number Support: Yes

Number of resource blocks, specified as a nonnegative integer.

Data Types: double

Number of resource blocks or subcarriers, specified as a nonnegative integer.

Dependencies

If the resourcetype is 'PRB', then n is the number of resource blocks. If the resourcetype is 'Subcarrier', then n is the number of subcarriers.

Data Types: double

Resource type, specified as 'PRB' or 'Subcarrier'.

Data Types: char | string

Output Arguments

collapse all

Precoded PUSCH output symbols, returned as an NSym-by-NL matrix of complex symbols. NSym is the number of symbols, and NL is the number of layers.

The dimension and size of the input and output symbol matrices are the same.

Introduced in R2014a