dvbs2xWaveformGenerator
Description
The dvbs2xWaveformGenerator
System object™ generates a Digital Video Broadcasting Satellite Second Generation extended
(DVB-S2X) time-domain waveform consisting of a single or multiple physical layer (PL) frames.
The object implements the waveform generation aspects of ETSI EN 302 307-2 V1.1.1 (2015-11)
[2].
To generate a DVB-S2X waveform:
Create the
dvbs2xWaveformGenerator
object and set its properties.Call the object with arguments, as if it were a function.
To learn more about how System objects work, see What Are System Objects?
Creation
Description
creates
a default DVB-S2X waveform generator System object.s2xWaveGen
= dvbs2xWaveformGenerator
sets properties using one or more name-value pairs. Enclose each property name in quotes.
For example, s2xWaveGen
= dvbs2xWaveformGenerator(Name,Value
)dvbs2xWaveformGenerator('NumInputStreams',4,'UPL',100)
specifies four input streams, each with a user packet length of 100 bits.
Properties
Unless otherwise indicated, properties are nontunable, which means you cannot change their
values after calling the object. Objects lock when you call them, and the
release
function unlocks them.
If a property is tunable, you can change its value at any time.
For more information on changing property values, see System Design in MATLAB Using System Objects.
StreamFormat
— Input stream format
"TS"
(default) | "GS"
Input stream format, specified as one of these values.
"TS"
— For transport stream format"GS"
— For generic stream format
Data Types: char
| string
HasTimeSlicing
— Time slicing indicator
0
or false
(default) | 1
or true
Time slicing indicator, specified as a logical value of 0
(false
) or 1
(true
). To
indicate that time slicing transmission format is used, set this value to
1
(true
).
If you set this property to 1
(true
), you can
set the NumInputStreams
property to a maximum value of
8
.
Data Types: logical
NumInputStreams
— Number of input streams
1
(default) | integer in the range [1, 256]
Number of input streams, specified as an integer in the range [1, 256].
When you set the HasTImeSlicing
property to
true
, NumInputStreams
property can be
specified to a maximum value of 8
.
Data Types: double
UPL
— User packet length
0
(default) | nonnegative integer | vector of nonnegative integers
User packet (UP) length in bits, specified as one of these options.
Nonnegative integer — Use this option with single-input and multi-input streams. If you set the
NumInputStreams
property to a value greater than 1, the UP in each stream must be equal to the integer value of theUPL
property.Vector of nonnegative integers — Use this option with multi-input streams only. If you set the
NumInputStreams
property to a value greater than 1, the UP in each stream must be the size of the corresponding element in this vector. The length of this vector must be equal toNumInputStreams
.Note
When you specify
UPL
as a multi-input stream, all UPs must be either packetized or in a continuous stream. Mixing stream types is not supported.
The maximum value of UPL
as an integer scalar or an integer element in the row vector must be less than or equal to the corresponding DFL
property value.
For a generic continuous stream, set UPL
to 0
.
Dependencies
To enable this property, set the StreamFormat
property to "GS"
. If you set the StreamFormat
property to "TS"
, the UPL is fixed to 1504 bits.
Data Types: double
PLSDecimalCode
— PL signalling code information
132
(default) | integer in the range [4, 249] | vector of integers in the range [4, 249]
PL signalling code information, in decimal format, specified as one of these options (as described in ETSI EN 302 307-1 Section 5.5.2.2 [1] and ETSI EN 302 307-2 Section 5.5.2.2 Table 17a [2]).
Integer in the range [4, 249] — Use this option with single-input and multi-input streams. If you set the
NumInputStreams
property to a value greater than 1, each stream has the same modulation scheme and coding rate.Vector of integers in the range [4, 249] — Use this option with multi-input streams only. If you set the
NumInputStreams
property to a value greater than 1, each stream has a modulation scheme and coding rate equal to the corresponding element in this vector. The length of this vector must be equal toNumInputStreams
.
All odd integer values are considered to include pilots in PL frames.
Note
Few PLSDecimalCode
values are invalid in this specified value
range. Invalid values include {46, 47, 70, 71, 94, 95, 114, 128, 130, 176, 177, 188,
189, 192, 193, 196, and 197}.
To calculate the PLSDecimalCode
property value for a DVB-S2X
system configuration, use this formula.
MODCOD
*4 + (0 - for normal FECFrame
/1 - for
short FECFrame
)*2 + (0 - if HasPilots
property
value is false
/1 - if HasPilots
property value
is true
)
For example, if MODCOD
= 18 (16APSK 2/3) with short FEC frame
and pilots disabled, the value of PLSDecimalCode
calculated by
using this formula is:
PLSDecimalCode
= 18*4 + 1*2 + 0 = 74
Note
For very low signal to noise ratio (VL-SNR) frames, you must set the
PLSDecimalCode
property to either 129
or
131
, which indicates the VL-SNR set 1 or 2, respectively.
VL-SNR frames must not be combined with regular frames.
Tunable: Yes
Data Types: double
CanonicalMODCODName
— Canonical modulation scheme and code rate name
"QPSK 2/9"
(default) | character vector | string scalar | cell array | string array
Canonical modulation scheme and code rate name for VL-SNR frame transmission, specified as one of these options (as described in ETSI EN 302 307-2 Section 5.5.2.2 Table 18a [2]).
Character vector or string scalar — Use this option with single-input and multi-input streams. If you set the
NumInputStreams
property to a value greater than 1, each stream has the same modulation scheme and coding rate.Cell array or string array — Use this option with multi-input streams only. If you set the
NumInputStreams
property to a value greater than 1, each input stream has a modulation scheme and coding rate equal to the corresponding value in this array. The length of this array must be equal toNumInputStreams
.
Valid CanonicalMODCODName
values include these options.
"QPSK 2/9"
,"BPSK 1/5"
,"BPSK 11/45"
,"BPSK-S 1/5"
,"BPSK-S 11/45"
, and"BPSK 1/3"
— Applicable for VL-SNR set 1"BPSK 1/5"
,"BPSK 4/15"
, and"BPSK 1/3"
— Applicable for VL-SNR set 2
Tunable: Yes
Dependencies
To enable this property, set the PLSDecimalCode
property to
either 129
(for VL-SNR set 1) or 131
(for VL-SNR
set 2). This property applies for only VL-SNR frame transmissions.
Data Types: char
| string
DFL
— Data field length
18,448
(default) | integer in the range [1,
(KBCH−80)] | vector of integers in the range [1,
(KBCH−80)]
Data field (DF) length in bits, specified as one of these options. KBCH is the uncoded BCH block length, as specified in ETSI EN 302 307-2 Section 5.3 Table 4, 5, and 6 [2].
Integer in the range [1, (KBCH−80)] — Use this option with single-input and multi-input streams. If you set the
NumInputStreams
property to a value greater than 1, the length of the DF in baseband frame of each stream is the same value.Vector of integers in the range [1, (KBCH−80)] — Use this option with multi-input streams only. If you set the
NumInputStreams
property to a value greater than 1, the length of the data field in the baseband frame of each stream must be the size of the corresponding element in this vector. The length of this vector must be equal toNumInputStreams
.
Tunable: Yes
Data Types: double
ScalingMethod
— Constellation amplitude scaling method
"outer radius as 1"
(default) | "unit average power"
Constellation amplitude scaling method, specified as "outer radius as
1"
or "unit average power"
.
Dependencies
To enable this property, set the PLSDecimalCode
property to a
value corresponding to APSK modulation, with the following as exception: {164, 165,
158, 159, 206, 207, 212, and 213}. The other exceptions are QPSK and 8 PSK values: {4
to 69, inclusive; 129; 131; 132 to 137, inclusive; 142 to 147, inclusive; 216 to 235,
inclusive}.
Data Types: char
| string
PLScramblingIndex
— PL scrambling sequence index
integer in the range [0, 7] | vector of integers in the range [0, 7]
PL scrambling sequence index, specified as one of these options (as described in ETSI EN 302 307-2 Section 5.5.4 Table 19e [2]).
Integer in the range [0, 7] — Use this option with single-input and multi-input streams.
If you set the
NumInputStreams
property to a value greater than 1, each stream has the same value of PL scrambling index.Vector of integers in the range [0, 7] — Use this option when you set the
HasTimeSlicing
property totrue
for multi-input streams.If you set the
NumInputStreams
property to a value greater than 1, the PL scrambling index value of each stream must be equal to the corresponding element in this vector. The length of this vector must be equal toNumInputStreams
.
To generate the PL scrambling sequence, the actual index used is
PLScramblingIndex
*10949.
Data Types: double
RolloffFactor
— Transmit filter roll-off factor
0.35
(default) | 0.05
| 0.1
| 0.15
| 0.2
| 0.25
Transmit filter roll-off factor for baseband pulse shaping, specified as
0.35
, 0.05
, 0.1
,
0.15
, 0.2
, or 0.25
.
Data Types: double
FilterSpanInSymbols
— Filter span in symbols
10
(default) | positive integer
Filter span in symbols, specified as a positive integer.
The ideal impulse response of the raised cosine filter is truncated to a length that spans the number of symbols specified in this property.
Data Types: double
SamplesPerSymbol
— Number of samples per symbol
4
(default) | positive integer
Number of samples per symbol, specified as a positive integer.
Data Types: double
ISSYI
— Input stream synchronization indicator
0
or false
(default) | 1
or true
Input stream synchronization (ISSY) indicator, specified as a logical value of 0
(false
) or 1
(true
). To indicate that input stream synchronization is used, set this value to 1
(true
).
Dependencies
To enable this property, set the NumInputStreams
property to a value greater than 1 and set the UPL
property to a nonzero value.
Data Types: logical
ISCRFormat
— Input stream clock reference format
"short"
(default) | "long"
Input stream clock reference format, specified as one of these options.
"short"
— Indicates the length of ISSY as 2 bytes"long"
— Indicates the length of ISSY as 3 bytes
When you set the StreamFormat
property to "GS"
, NumInputStreams
property to a value greater than 1, UPL
property to a nonzero value, and ISSYI
to 1
(true
), only the "short"
option of this ISCRFormat
property is applicable.
Dependencies
To enable this property, set the StreamFormat
property to "TS"
, the NumInputStreams
property to a value greater than 1, and the ISSYI
property to 1
(true
).
Data Types: char
| string
MinNumPackets
— Minimum number of packets required to create DF
integer in the range [1, 58,112] | row vector of integers
This property is read-only.
Minimum number of packets required to create a DF, returned as one of these options.
Integer in the range [1, 58,112] — This option applies with single-input streams only.
Row vector of integers in the range [1, 58,112] — This option applies with multi-input streams only. If you set the
NumInputStreams
property to a value greater than 1, the minimum number of packets required for each stream is equal to the corresponding element in this vector. The length of this vector must be equal toNumInputStreams
.
The value of MinNumPackets
is computed based of values of DFL
and UPL
properties.
Dependencies
To enable this property, set the UPL
property to a nonzero value.
Data Types: double
Usage
Description
generates a DVB-S2X time-domain waveform from the input information bits.txWaveform
= s2xWaveGen(data
)
Input Arguments
data
— Input information bits
[ ]
| binary-valued column vector | cell array of binary-valued column vectors
Input information bits, specified as one of these options. Each element of the
column vector or cell array can be of the data type double
,
int8
, or logical
.
Binary-valued column vector – Use this option with single-input stream.
To generate a dummy physical layer (PL) frame, specify
data
as an empty column vector.Cell array of binary-valued column vectors – Use this option with multi-input streams. Each element of the array represents the corresponding input stream. The length of the cell array must be equal to the value of the
NumInputStreams
property.To generate a dummy frame for a particular input stream, specify the corresponding element of the
data
cell array as an empty column vector.
data
, either single stream or multi-stream, can be input in
one of these forms.
Packetized stream – The number of packets in each stream must be an integer multiple of the
MinNumPackets
property.For a packetized stream, an 8-bit sync field must be included at the beginning of each packet. The combined length of a packet and its sync bits must be equal to the corresponding value of the
UPL
property.Continuous Stream – The number of bits for each stream must be an integer multiple of the
DFL
property.
Note
When you set the StreamFormat
property to
"TS"
, the sync byte is fixed as 47 hex.
Data Types: double
| int8
| logical
| cell
Output Arguments
txWaveform
— Generated time-domain DVB-S2X waveform
column vector
Generated time-domain DVB-S2X waveform, returned as a column vector. The waveform is generated in the form of complex in-phase quadrature (IQ) samples and can consist of a single physical layer frame or multiple physical layer frames.
When you set the NumInputStreams
property to a value greater
than 1, the data fields generated from different input streams are merged using the
round-robin technique.
Data Types: double
Complex Number Support: Yes
Object Functions
To use an object function, specify the
System object as the first input argument. For
example, to release system resources of a System object named obj
, use
this syntax:
release(obj)
Specific to dvbs2xWaveformGenerator
info | Characteristic information about object |
flushFilter | Flush transmit filter |
Examples
Generate DVB-S2X Waveform for Single-Input Stream
Generate a Digital Video Broadcasting Satellite Second Generation extended (DVB-S2X) time-domain waveform for a single-input transport stream (TS) with a single physical layer (PL) frame per stream.
This example uses MAT-files with LDPC parity matrices. If the MAT-files are not available on the path, download and unzip the MAT-files by entering this code at the MATLAB command prompt.
if ~exist('dvbs2xLDPCParityMatrices.mat','file') if ~exist('s2xLDPCParityMatrices.zip','file') url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip'; websave('s2xLDPCParityMatrices.zip',url); unzip('s2xLDPCParityMatrices.zip'); end addpath('s2xLDPCParityMatrices'); end
Specify the number of PL frames per stream.
numFrames = 1;
Create a DVB-S2X System object with pilot-aided PL.
s2xWaveGen = dvbs2xWaveformGenerator; s2xWaveGen.PLSDecimalCode = 133; % QPSK 13/45 % All odd PLSDecimalCode values are pilot aided disp(s2xWaveGen)
dvbs2xWaveformGenerator with properties: StreamFormat: "TS" HasTimeSlicing: false NumInputStreams: 1 PLSDecimalCode: 133 DFL: 18448 PLScramblingIndex: 0 RolloffFactor: 0.3500 FilterSpanInSymbols: 10 SamplesPerSymbol: 4 Show all properties
Create the bit vector of information bits, data
, of concatenated TS user packets.
syncBits = [0 1 0 0 0 1 1 1]'; % Sync byte for TS packet is 47 Hex pktLen = 1496; % UP length without sync bits is 1496 numPkts = s2xWaveGen.MinNumPackets*numFrames; txRawPkts = randi([0 1],pktLen,numPkts); txPkts = [repmat(syncBits,1,numPkts); txRawPkts]; data = txPkts(:);
Generate a DVB-S2X time-domain waveform using the information bits, data
.
txWaveform = s2xWaveGen(data);
Generate DVB-S2X Waveform Consisting of VL-SNR Frame
Generate a Digital Video Broadcasting Satellite Second Generation extended (DVB-S2X) time-domain waveform for a single-input generic stream (GS) with multiple physical layer (PL) frames per stream.
The DVB-S2X waveform generated in this example consists of a very low signal to noise ratio (VL-SNR) frame of set 2.
This example uses MAT-files with LDPC parity matrices. If the MAT-files are not available on the path, download and unzip the MAT-files by entering this code at the MATLAB command prompt.
if ~exist('dvbs2xLDPCParityMatrices.mat','file') if ~exist('s2xLDPCParityMatrices.zip','file') url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip'; websave('s2xLDPCParityMatrices.zip',url); unzip('s2xLDPCParityMatrices.zip'); end addpath('s2xLDPCParityMatrices'); end
Specify the number of PL frames per stream.
numFrames = 2;
Create a DVB-S2X System object and specify its properties.
s2xWaveGen = dvbs2xWaveformGenerator; s2xWaveGen.StreamFormat = "GS"; s2xWaveGen.PLSDecimalCode = 131; % VL-SNR set 2 s2xWaveGen.CanonicalMODCODName = "BPSK 1/3"; s2xWaveGen.DFL = 5080; s2xWaveGen.SamplesPerSymbol = 6; disp(s2xWaveGen)
dvbs2xWaveformGenerator with properties: StreamFormat: "GS" HasTimeSlicing: false NumInputStreams: 1 UPL: 0 PLSDecimalCode: 131 CanonicalMODCODName: "BPSK 1/3" DFL: 5080 PLScramblingIndex: 0 RolloffFactor: 0.3500 FilterSpanInSymbols: 10 SamplesPerSymbol: 6
Create a bit vector of information bits for each stream.
data = randi([0 1],s2xWaveGen.DFL*numFrames,1,'int8');
Generate a DVB-S2X time-domain waveform using the information bits.
txWaveform = s2xWaveGen(data);
Get DVB-S2X Waveform Generator Information and Check Transmit Filter Delay
Get information from a dvbs2xWaveformGenerator
System object by using the info
function. Then retrieve the filter residual samples by using the flushFilter
object function.
This example uses MAT-files with LDPC parity matrices. If the MAT-files are not available on the path, download and unzip the MAT-files by entering this code at the MATLAB command prompt.
if ~exist('dvbs2xLDPCParityMatrices.mat','file') if ~exist('s2xLDPCParityMatrices.zip','file') url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip'; websave('s2xLDPCParityMatrices.zip',url); unzip('s2xLDPCParityMatrices.zip'); end addpath('s2xLDPCParityMatrices'); end
Specify the number of physical layer (PL) frames per stream.
numFrames = 2;
Create a Digital Video Broadcasting Satellite Second Generation extended (DVB-S2X) System object and specify its properties. Use time slicing technique and variable coding and modulation configuration mode.
s2xWaveGen = dvbs2xWaveformGenerator();
s2xWaveGen.HasTimeSlicing = true;
s2xWaveGen.NumInputStreams = 2;
s2xWaveGen.PLSDecimalCode = [135 145]; % QPSK 9/20 and 8PSK 25/36
s2xWaveGen.DFL = [18048 44656];
s2xWaveGen.PLScramblingIndex = [0 1];
disp(s2xWaveGen)
dvbs2xWaveformGenerator with properties: StreamFormat: "TS" HasTimeSlicing: true NumInputStreams: 2 PLSDecimalCode: [135 145] DFL: [18048 44656] PLScramblingIndex: [0 1] RolloffFactor: 0.3500 FilterSpanInSymbols: 10 SamplesPerSymbol: 4 ISSYI: false Show all properties
Get the characteristic information about the DVB-S2X waveform generator.
info(s2xWaveGen)
ans = struct with fields:
FECFrame: {'normal' 'normal'}
ModulationScheme: {'QPSK' '8PSK'}
LDPCCodeIdentifier: {'9/20' '25/36'}
Create the bit vector of input information bits, data
, of concatenated TS user packets for each input stream.
syncBits = [0 1 0 0 0 1 1 1]'; % Sync byte for TS packet is 47 Hex pktLen = 1496; % UP length without sync bits is 1496 data = cell(1, s2xWaveGen.NumInputStreams); for i = 1:s2xWaveGen.NumInputStreams numPkts = s2xWaveGen.MinNumPackets(i)*numFrames; txRawPkts = randi([0 1], pktLen, numPkts); txPkts = [repmat(syncBits, 1, numPkts); txRawPkts]; data{i} = txPkts(:); end
Generate a DVB-S2X time-domain waveform using the information bits.
txWaveform = s2xWaveGen(data);
Check the filter residual data samples that remain in the filter delay.
flushFilter(s2xWaveGen)
ans = 40×1 complex
-0.2412 - 0.0143i
-0.2619 - 0.0861i
-0.2726 - 0.1337i
-0.2511 - 0.1597i
-0.1851 - 0.1680i
-0.0780 - 0.1602i
0.0448 - 0.1288i
0.1598 - 0.0751i
0.2482 - 0.0049i
0.3026 + 0.0702i
⋮
Generate DVB-S2X Dummy VL-SNR Frame
Generate a DVB-S2X dummy VL-SNR frame for a single-input transport stream.
This example uses MAT-files with LDPC parity matrices. If the MAT-files are not available on the path, download and unzip the MAT-files by entering this code at the MATLAB command prompt.
if ~exist('dvbs2xLDPCParityMatrices.mat','file') if ~exist('s2xLDPCParityMatrices.zip','file') url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip'; websave('s2xLDPCParityMatrices.zip',url); unzip('s2xLDPCParityMatrices.zip'); end addpath('s2xLDPCParityMatrices'); end
Create a default DVB-S2X System object.
s2xWaveGen = dvbs2xWaveformGenerator;
Specify the PLS decimal code value to indicate VL-SNR frame, and set the DFL value.
s2xWaveGen.PLSDecimalCode = 129; % VL-SNR set 1
s2xWaveGen.DFL = 14128;
Generate a PL dummy frame.
data = zeros(0,1);
Generate a DVB-S2X waveform.
txWaveform = s2xWaveGen(data);
References
[1] ETSI Standard EN 302 307-1 V1.4.1(2014-11). Digital Video Broadcasting (DVB); Second Generation Framing Structure, Channel Coding and Modulation Systems for Broadcasting, Interactive Services, News Gathering and other Broadband Satellite Applications (DVB-S2).
[2] ETSI Standard EN 302 307-2 V1.1.1(2015-11). Digital Video Broadcasting (DVB); Second Generation Framing Structure, Channel Coding and Modulation Systems for Broadcasting, Interactive Services, News Gathering and other Broadband Satellite Applications; Part 2: DVB-S2 Extensions (DVB-S2X).
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
For all properties that support string and cell array input, code generation is only supported with cell array input.
See System Objects in MATLAB Code Generation (MATLAB Coder).
Version History
Introduced in R2021a
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)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)