lteSCFDMAModulate
Modulate using SC-FDMA
Syntax
Description
[
performs single-carrier frequency-division multiple access (SC-FDMA) modulation
for user-equipment-specific (UE-specific) settings waveform
,info
]
= lteSCFDMAModulate(ue
,grid
)ue
. The
function returns waveform
, an SC-FDMA-modulated waveform,
and its corresponding information info
. You can use this
syntax for LTE and multitone narrowband Internet of Things (NB-IoT)
configurations.
The function calculates the inverse fast Fourier transform (IFFT),
half-subcarrier shifts, and cyclic prefix insertions. The function also
optionally performs raised-cosine windowing and overlapping of adjacent SC-FDMA
symbols in resource array grid
. For a block diagram that
illustrates the steps in SC-FDMA modulation, see Algorithms.
[
performs SC-FDMA modulation for the chosen number of windowed and overlapped
samples, waveform
,info
]
= lteSCFDMAModulate(ue
,grid
,windowing
)windowing
, used in the time-domain windowing. If
you specify the Windowing
field in ue
, the function ignores
it, and the output Windowing
field of info
is as specified in
windowing
. You can use this syntax for LTE and
multitone NB-IoT configurations.
[
performs SC-FDMA modulation for the specified channel transmission configuration
and number of windowed and overlapped samples. You can use this syntax for LTE,
single-tone NB-IoT, and multitone NB-IoT configurations. When you use this
syntax without configuring waveform
,info
]
= lteSCFDMAModulate(ue
,chs
,grid
,windowing
)ue
for NB-IoT, the function
ignores chs
.
Examples
Perform SC-FDMA Modulation
Perform SC-FDMA modulation of one subframe of random uniformly distributed noise.
Initialize UE-specific settings for the specified number of resource blocks.
ue = struct('NULRB',50);
Obtain the size of the resource array.
d = lteULResourceGridSize(ue);
Get the resource grid by mapping a randomly generated vector of bits to the relevant modulation symbols, specifying QPSK modulation.
grid = reshape(lteSymbolModulate(randi([0,1],prod(d)*2,1),'QPSK'),d);
Perform SC-FDMA modulation for the specified UE-specific settings and resource grid.
waveform = lteSCFDMAModulate(ue,grid);
Perform SC-FDMA Modulation for Multitone NB-IoT with Windowing
Perform SC-FDMA modulation of ten time slots of uniformly distributed noise, specifying a multitone NB-IoT downlink configuration and a windowing value.
Initialize the UE-specific settings by specifying the NB-IoT uplink subcarrier spacing.
ue.NBULSubcarrierSpacing = '15kHz';
Get the resource grid for the specified number of time slots.
NSlots = 10; % Number of slots in the generated waveform dims = [12 7*NSlots]; grid = reshape(lteSymbolModulate(randi([0,1],prod(dims)*2,1),'QPSK'),dims);
Specify a windowing value of 6.
windowing = 6;
Perform SC-FDMA modulation and display the first five symbols of the modulated waveform.
waveform = lteSCFDMAModulate(ue,grid,windowing); disp(waveform(1:5));
0.0152 + 0.0178i 0.0126 + 0.0159i 0.0092 + 0.0130i 0.0052 + 0.0092i 0.0006 + 0.0047i
Perform SC-FDMA Modulation for Multitone NB-IoT Configuration
Perform SC-FDMA modulation of ten time slots of uniformly distributed noise, specifying a multitone NB-IoT downlink configuration.
Initialize the UE-specific settings by specifying the NB-IoT uplink subcarrier spacing.
ue.NBULSubcarrierSpacing = '15kHz';
Get the resource grid for the specified number of time slots.
NSlots = 10; % Number of slots in the generated waveform dims = [12 7*NSlots]; grid = reshape(lteSymbolModulate(randi([0,1],prod(dims)*2,1),'QPSK'),dims);
Perform SC-FDMA modulation and display the first five symbols of the modulated waveform.
waveform = lteSCFDMAModulate(ue,grid); disp(waveform(1:5));
0.0152 + 0.0178i 0.0126 + 0.0159i 0.0092 + 0.0130i 0.0052 + 0.0092i 0.0006 + 0.0047i
Perform SC-FDMA Modulation for Single-Tone NB-IoT Configuration
Perform SC-FDMA modulation for 20 time slots of uniformly distributed noise, specifying a single-tone NB-IoT configuration with 15 kHz subcarrier spacing.
Initialize UE-specific settings, specifying an NB-IoT configuration with a subcarrier spacing of 15 kHz.
ue.NBULSubcarrierSpacing = '15kHz';
Set the channel transmission configuration, specifying the fields required for the chosen NB-IoT configuration.
chs = struct('NULSlots',16,'NRU',2,'NRep',4,'SlotIdx',120, ... 'NBULSubcarrierSet',0,'Modulation','QPSK');
Get the narrowband resource grid for the 20 time slots.
NSlots = 20;
grid = repmat(lteNBResourceGrid(ue),1,NSlots);
grid(chs.NBULSubcarrierSet+1,:) = lteSymbolModulate(randi([0,1],size(grid,2)*2,1),'QPSK').';
Perform SC-FDMA modulation and display the first five symbols in the modulated time-domain waveform.
waveform = lteSCFDMAModulate(ue,chs,grid); disp(waveform(1:5));
0.0074 + 0.0026i 0.0078 + 0.0006i 0.0077 - 0.0015i 0.0070 - 0.0035i 0.0058 - 0.0052i
Input Arguments
ue
— UE-specific settings
structure
UE-specific settings, specified as a structure. The fields you specify in
ue
and chs
determine whether
the function performs SC-FDMA modulation for an LTE or NB-IoT configuration.
To choose an NB-IoT configuration, specify the
NBULSubcarrierSpacing
field. To choose an LTE
configuration, omit the NBULSubcarrierSpacing
field.
The Windowing
field is optional, and you can specify it
for either an LTE or NB-IoT configuration. The
CyclicPrefixUL
field is optional and is applicable
only for an LTE configuration..
Windowing
— Number of windowing samples
nonnegative integer
Number of time-domain samples over which the function applies windowing and overlapping of SC-FDMA symbols, specified as a nonnegative integer. This field is optional.
Note
If you do not specify Windowing
,
lteSCFDMAModulate
returns the Windowing
field of info
as a default value chosen as a function of
NULRB
(for LTE uplink
configurations) or
NBULSubcarrierSpacing
(for NB-IoT
uplink configurations). This behavior compromises between
the effective duration of the cyclic prefix (and therefore
the channel delay spread tolerance) and the spectral
characteristics of the transmitted signal (not considering
any additional FIR filtering). If
Windowing
is zero, issues
identified in the description of grid
concerning concatenation of slots before SC-FDMA modulation
do not apply.
The number of samples used for windowing depends on the
cyclic prefix length (normal or extended) and the number of
resource blocks. The default is chosen in accordance with
the maximum values implied in TS 36.104, Tables E.5.1-1 and
E.5.1-2 [1]. For a larger
value of Windowing
, the effective
duration of the cyclic prefix is reduced but the transmitted
signal spectrum has smaller out-of-band emissions.
Number of Resource Blocks
| Windowing Samples for Normal Cyclic Prefix | Windowing Samples for Extended Cyclic Prefix |
---|---|---|
6 | 4 | 4 |
15 | 6 | 6 |
25 | 4 | 4 |
50 | 6 | 6 |
75 | 8 | 8 |
100 | 8 | 8 |
Data Types: double
CyclicPrefixUL
— Cyclic prefix length
'Normal'
(default) | 'Extended'
Cyclic prefix length, specified as 'Normal'
or 'Extended'
. This field is optional.
Dependencies
This field applies only when you choose an LTE
configuration by omitting the NBULSubcarrierSpacing
field.
Data Types: char
| string
NBULSubcarrierSpacing
— NB-IoT subcarrier spacing
'3.75kHz'
| '15kHz'
NB-IoT subcarrier spacing, specified as
'3.75kHz'
or '15kHz'
.
To set a subcarrier spacing of 3.75 kHz, specify this field as
'3.75kHz'
. To set a subcarrier spacing of
15 kHz, specify this field as '15kHz'
.
To use lteSCFDMAModulate
for NB-IoT modulation,
you must specify this field. To indicate an LTE configuration,
omit this field.
Note
For a subcarrier spacing of 3.75 kHz,
lteSCFDMAModulate
supports only
single-tone NB-IoT configurations.
Data Types: char
| string
grid
— Resource grid
numeric array
Resource grid, specified as a numeric array of size M-by-N-by-P, where:
M is the number of subcarriers.
N is the number of SC-FDMA symbols.
P is the number of transmission antennas.
You can specify grid
to contain REs for
various time slots across all configured antenna ports, as described in
Represent Resource Grids. Alternatively, you
can specify grid
to contain multiple such matrices
concatenated across the second dimension to give multiple slots. The antenna
planes in grid
are each OFDM modulated to give the
columns of the waveform
output.
For an LTE uplink configuration, M must be a multiple
of 12, since the number of resource blocks is N_{RB} =
M/12, up to a maximum of 2048. For an NB-IoT downlink or uplink
configuration with the NBULSubcarrierSpacing
field of ue
set
to '15kHz'
, M = 12. For an NB-IoT uplink configuration with
NBULSubcarrierSpacing
set to
'3.75kHz'
, M = 48. Specify N as a multiple of the number
of symbols in a slot L, where L = 14 for normal cyclic prefix and L = 12 for extended cyclic prefix. You can specify
P as 1, 2, or 4.
The grid can span multiple time slots. Windowing and overlapping are
applied between all adjacent SC-FDMA symbols, including the last of one slot
and the first of the next. Therefore, a different result is obtained than
when lteSCFDMAModulate
is called on individual slots and
those time-domain waveforms are concatenated. The resulting waveform in the
latter case has discontinuities at the start and end of each slot. It is
recommended that all slots for SC-FDMA modulation first be concatenated
before calling lteSCFDMAModulate
on the resulting multislot
array. However, you can perform OFDM modulation on individual slots and
create the resulting multislot time-domain waveform by manually
overlapping.
Data Types: double
Complex Number Support: Yes
chs
— Channel transmission configuration
structure
Channel transmission configuration, 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 the
NBULSubcarrierSpacing
field of
ue
is '3.75kHz'
or when
NBULSubcarrierSpacing
is '15kHz'
and length(chs.NBULSubcarrierSet)
is
1
.
NBULSubcarrierSet
— NB-IoT uplink subcarrier indices
vector of nonnegative integers (default) | nonnegative integer
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 lteSCFDMAModulate
for
single-tone NB-IoT modulation, you must specify
NBULSubcarrierSet
as a scalar. If you
do not specify NBULSubcarrierSet
,
lteSCFDMAModulate
performs multitone NB-IoT
modulation by default. If you specify the
NBULSubcarrierSpacing
field of
ue
as '15kHz'
, this
field is required.
Data Types: double
Modulation
— Modulation type
'BPSK'
| 'QPSK'
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
NULSlots
— Number of slots per RU
positive integer
Number of slots per resource unit (RU), specified as a
positive integer. To use lteSCFDMAModulate
for
single-tone NB-IoT modulation, you must specify this
field.
Data Types: double
NRU
— Number of RUs
positive integer
Number of RUs, specified as a positive integer. To use
lteSCFDMAModulate
for single-tone NB-IoT
modulation, you must specify this field.
Data Types: double
NRep
— Number of repetitions for codeword
nonnegative integer
Number of repetitions for a codeword, specified as a
nonnegative integer. To use
lteSCFDMAModulate
for single-tone
NB-IoT modulation, you must specify this field.
Data Types: double
SlotIdx
— Relative slot index in NPUSCH bundle
0
(default) | nonnegative integer
Relative slot index in a narrowband physical uplink shared channel (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
windowing
— Number of windowed and overlapped samples
nonnegative integer
Number of windowed and overlapped samples, specified as a nonnegative
integer. This argument controls the number of windowed and overlapped
samples used in time-domain windowing. If you specify this input, the
function uses the value you specify for SC-FMDA modulation (instead of the
Windowing
field of the ue
input) and
returns it as the value of the Windowing
field in the info
output.
Data Types: double
Output Arguments
waveform
— SC-FDMA-modulated waveform
complex-valued matrix
SC-FDMA-modulated waveform, returned as a complex-valued matrix. The
dimensions of waveform
are
T-by-P, where T
is the number of time-domain samples, and P is the number
of transmission antennas. The dimension T is given by T =
15K/N_{FFT}, where N_{FFT} is
the IFFT size, and K is the number of time slots in the
grid
input. When M ≥ 72, N_{FFT} is a
function of the number of resource blocks
(N_{RB}), and N_{RB} =
M/12.
N_{RB} | N _{FFT} |
---|---|
6 | 128 |
15 | 256 |
25 | 512 |
50 | 1024 |
75 | 2048 |
100 | 2048 |
When M = 12 or the
NBULSubcarrierSpacing
field is
'15kHz'
(NB-IoT downlink or NB-IoT uplink with 15-kHz
subcarrier spacing), N_{FFT} =
128. When the NBULSubcarrierSpacing
field
is '3.75kHz'
(NB-IoT uplink with 3.75-kHz subcarrier
spacing), N_{FFT} =
512. When M ≥ 72, N_{FFT} is the
smallest power of 2 greater than or equal to 12N_{RB}/0.85. This value is the smallest FFT that spans all subcarriers
and results in a bandwidth occupancy (12N_{RB}/N_{FFT}) of no more than 85%.
Data Types: double
Complex Number Support: Yes
info
— Information about SC-FDMA modulated waveform
structure
Information about SC-FDMA modulated waveform, returned as a structure containing these fields.
NBULGapSamples
— Number of padded gap samples
positive integer
Number of padded gap samples at the end of each time slot, returned as a positive
integer. When the NBULSubcarrierSpacing
field is
'3.75kHz'
, NBULGapSamples
is
144
. Otherwise, NBULGapSamples
is
0
.
Dependencies
This argument is returned only when the
NBULSubcarrierSpacing
field of ue
is specified.
Data Types: double
CyclicPrefixLengths
— Cyclic prefix length
vector of positive integers
Cyclic prefix length, in number of time-domain samples, returned as a vector of
positive integers. Each entry represents the cyclic prefix length of the
corresponding orthogonal frequency-division multiplexing (OFDM) symbol in a time
slot. The function returns CyclicPrefixLengths
in accordance
with the specified input fields shown in these tables.
LTE Configuration
Nfft | CyclicPrefixLengths when
CyclicPrefixUL is set to
'Normal' | CyclicPrefixLengths when
CyclicPrefixUL is set to
'Extended' ) |
---|---|---|
128 | [10 9 9 9 9 9 9 10 9 9 9 9 9 9] | [32 32 32 32 32 32 32 32 32 32 32 32] |
256 | [20 18 18 18 18 18 18 20 18 18 18 18 18 18] | [64 64 64 64 64 64 64 64 64 64 64 64] |
512 | [40 36 36 36 36 36 36 40 36 36 36 36 36 36] | [128 128 128 128 128 128 128 128 128 128 128 128] |
1024 | [80 72 72 72 72 72 72 80 72 72 72 72 72 72] | [256 256 256 256 256 256 256 256 256 256 256 256] |
2048 | [160 144 144 144 144 144 144 160 144 144 144 144 144 144] | [512 512 512 512 512 512 512 512 512 512 512 512] |
NB-IoT Configuration
Nfft | NBULSubcarrierSpacing | CyclicPrefixLengths |
---|---|---|
128 | '15kHz' | [10 9 9 9 9 9 9 10 9 9 9 9 9 9] |
512 | '3.75kHz' | [16 16 16 16 16 16 16 16 16 16 16 16 16 16] |
Note
As shown in the tables, for values of Nfft
less than
2048, the entries of CyclicPrefixLengths
are given by
multiplying the cyclic prefix lengths when Nfft
is 2048 by
Nfft
/2048.
Data Types: int32
Windowing
— Number of time-domain samples
nonnegative integer
Number of time-domain samples over which the function applies windowing and overlapping of SC-FDMA symbols, returned as a nonnegative integer.
Data Types: double
Nfft
— Number of FFT points
positive integer
Number of FFT points, N_{FFT}, returned as a positive integer.
Data Types: double
SamplingRate
— Sampling rate of time-domain waveform
positive scalar
Sampling rate of time-domain waveform, returned as a positive scalar. When the
NBULSubcarrierSpacing
field is '15kHz'
or unspecified, the sampling rate of the waveform is (30.72 MHz / 2048) ×
N_{FFT}, where N_{FFT} is the
number of fast Fourier transform (FFT) points. When you indicate an NB-IoT
configuration by specifying ue.NBULSubcarrierSpacing
, the
sampling rate is 1.92 MHz.
Data Types: double
Data Types: struct
Algorithms
SC-FDMA Modulation Processing
This diagram shows the processing performed by SC-FDMA modulation.
References
[1] 3GPP TS 36.104. “Base Station (BS) radio transmission and reception.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network; Evolved Universal Terrestrial Radio Access (E-UTRA). URL: https://www.3gpp.org.
Version History
Open Example
You have a modified version of this example. Do you want to open this example with your edits?
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)