Main Content

dvbs2xWaveformGenerator

Generate DVB-S2X waveform

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:

  1. Create the dvbs2xWaveformGenerator object and set its properties.

  2. 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

example

s2xWaveGen = dvbs2xWaveformGenerator creates a default DVB-S2X waveform generator System object.

example

s2xWaveGen = dvbs2xWaveformGenerator(Name,Value) sets properties using one or more name-value pairs. Enclose each property name in quotes. For example, dvbs2xWaveformGenerator('NumInputStreams',4,'UPL',100) specifies four input streams, each with a user packet length of 100 bits.

Properties

expand all

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.

Input stream format, specified as one of these values.

  • "TS" — For transport stream format

  • "GS" — For generic stream format

Data Types: char | string

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

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

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 the UPL 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 to NumInputStreams.

    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

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 to NumInputStreams.

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

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 to NumInputStreams.

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

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-1 Section 5.3 Table 5a and 5b [1].

  • 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 to NumInputStreams.

Tunable: Yes

Data Types: double

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

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 to true 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 to NumInputStreams.

To generate the PL scrambling sequence, the actual index used is PLScramblingIndex*10949.

Data Types: double

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

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

Number of samples per symbol, specified as a positive integer.

Data Types: double

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

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

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 to NumInputStreams.

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

txWaveform = s2xWaveGen(data) generates a DVB-S2X time-domain waveform from the input information bits.

Input Arguments

expand all

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.

  • 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.

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

expand all

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)

expand all

infoCharacteristic information about object
flushFilterFlush transmit filter
stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
cloneCreate duplicate System object
isLockedDetermine if System object is in use
resetReset internal states of System object

Examples

collapse all

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 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 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
      ⋮

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

Introduced in R2021a