Main Content

dvbs2WaveformGenerator

Generate DVB-S2 waveform

Since R2021a

Description

The dvbs2WaveformGenerator System object™ generates a Digital Video Broadcasting Satellite Second Generation (DVB-S2) time-domain waveform consisting of a single or multiple physical layer frames. The object implements the waveform generation aspects of ETSI EN 302 307-1 V1.4.1 (2014-11) [1].

To generate a DVB-S2 waveform:

  1. Create the dvbs2WaveformGenerator 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

s2waveGen = dvbs2WaveformGenerator creates a default DVB-S2 waveform generator System object.

example

s2waveGen = dvbs2WaveformGenerator(Name,Value) sets properties using one or more name-value pairs. Enclose each property name in quotes. For example, dvbs2WaveformGenerator('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

Number of input streams, specified as an integer in the range [1, 256].

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

Forward error correction (FEC) frame format, specified as one of these two options.

  • "normal" — Sets the low density parity-check (LDPC) codeword length to 64,800 bits

  • "short" — Sets the LDPC codeword length to 16,200 bits

Tunable: Yes

Data Types: char | string

Modulation scheme and FEC rate for input transmission, specified as one of these options, as defined in ETSI EN 302 307-1 Section 5.5.2.2 Table 12 [1].

  • Integer in the range [1, 28] — 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 [1, 28] — 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 element in this vector. The length of this vector must be equal to NumInputStreams.

Note

MODCOD values 11, 17, 23, and 28 are not valid when you set the FECFrame property to "short" (as specified in ETSI EN 302 307-1 Section 5.3 Table 5b [1]).

Tunable: Yes

Data Types: double

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 MODCOD property to a value in the range [18, 28], which indicates only 16APSK and 32APSK modulation schemes.

Data Types: char | string

Pilot block indication, specified as a logical value of 0 (false), 1 (true), or a vector of logical values. Set this value to 1 (true) to indicate pilots are inserted in the physical layer frame.

If you set the NumInputStreams property to a value greater than 1, you can configure pilots for each stream by specifying this property as a vector. The length of this vector must be equal to NumInputStreams.

Tunable: Yes

Data Types: logical

Transmit filter roll-off factor for baseband pulse shaping, specified as 0.35, 0.25, or 0.2.

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 = s2waveGen(data) generates a DVB-S2 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 data type double, int8, or logical.

  • Binary-valued column vector — Use this option with single-input streams.

    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.

Input data, either as a single-input or multi-input stream, must 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-S2 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 (DVB-S2) time-domain waveform for a single-input transport stream (TS) with a single physical layer (PL) frame per stream. Visualize the waveform using constellation plots and signal spectrum.

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.bat365/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-S2 System object. Specify the modulation scheme and FEC rate (MODCOD) and data field length (DFL).

 s2WaveGen = dvbs2WaveformGenerator;
 s2WaveGen.MODCOD = 21;              % 16APSK 5/6
 s2WaveGen.DFL = 39690;
 s2WaveGen.HasPilots = true;         % Pilot insertion indication
 disp(s2WaveGen)
  dvbs2WaveformGenerator with properties:

           StreamFormat: "TS"
        NumInputStreams: 1
               FECFrame: "normal"
                 MODCOD: 21
                    DFL: 39690
          ScalingMethod: "outer radius as 1"
              HasPilots: 1
          RolloffFactor: 0.3500
    FilterSpanInSymbols: 10
       SamplesPerSymbol: 4

  Show all properties

Create a 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 = s2WaveGen.MinNumPackets*numFrames;
txRawPkts = randi([0 1],pktLen,numPkts);
txPkts = [repmat(syncBits,1,numPkts); txRawPkts];
data = txPkts(:);

Generate a DVB-S2 time-domain waveform using the information bits, data.

txWaveform = s2WaveGen(data);

Visualize the constellation plot for the generated DVB-S2 time-domain waveform by creating a constellation diagram System object.

sps = s2WaveGen.SamplesPerSymbol;
constel = comm.ConstellationDiagram('ColorFading',true, ...
    'ShowTrajectory',0, ...
    'SamplesPerSymbol',sps, ...
    'ShowReferenceConstellation',false, ...
    'XLimits',[-0.5 0.5], 'YLimits',[-0.5 0.5]);
plHeaderLen = 90*sps;           % PL header length
constel(txWaveform(plHeaderLen+1:end));
release(constel);

Display the frequency spectrum of the generated DVB-S2 time-domain waveform by creating a spectrum analyzer System object.

BW = 36e6;                 % Typical satellite channel bandwidth
Fsym = BW/(1+s2WaveGen.RolloffFactor);
Fsamp = Fsym*sps;
scope = spectrumAnalyzer('SampleRate',Fsamp);
scope(txWaveform)

Generate a Digital Video Broadcasting Satellite Second Generation (DVB-S2) time-domain waveform for a multi-input generic stream (GS) with multiple physical layer (PL) frames per stream.

This example requires MAT-files with LDPC parity matrices. If they are not available on the path, execute the following commands to download and unzip the MAT-files.

if ~exist('dvbs2xLDPCParityMatrices.mat','file')
    if ~exist('s2xLDPCParityMatrices.zip', 'file')
        url = 'https://ssd.bat365/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 = 3;

Create a DVB-S2 System object with variable coding and modulation configuration for a multi-input GS. Specify the modulation scheme and FEC rate (MODCOD) and data field length (DFL).

s2WaveGen = dvbs2WaveformGenerator;
s2WaveGen.StreamFormat = "GS";
s2WaveGen.NumInputStreams = 2;
s2WaveGen.MODCOD = [6 24];          % QPSK 2/3 and 32APSK 3/4
s2WaveGen.DFL = [42960 48328];
s2WaveGen.HasPilots = true;
s2WaveGen.SamplesPerSymbol = 10;
disp(s2WaveGen)
  dvbs2WaveformGenerator with properties:

           StreamFormat: "GS"
        NumInputStreams: 2
                    UPL: 0
               FECFrame: "normal"
                 MODCOD: [6 24]
                    DFL: [42960 48328]
          ScalingMethod: "outer radius as 1"
              HasPilots: 1
          RolloffFactor: 0.3500
    FilterSpanInSymbols: 10
       SamplesPerSymbol: 10

Create a bit vector of input information bits for each GS user packet.

data = cell(s2WaveGen.NumInputStreams,1);
   for i = 1:s2WaveGen.NumInputStreams
           data{i} = randi([0 1],s2WaveGen.DFL(i)*numFrames,1,'int8');
   end

Generate the DVB-S2 time-domain waveform with the input information bits.

txWaveform = s2WaveGen(data);

Generate a DVB-S2 dummy PL 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.bat365/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip';
        websave('s2xLDPCParityMatrices.zip',url);
        unzip('s2xLDPCParityMatrices.zip');
    end
addpath('s2xLDPCParityMatrices');
end

Create a default DVB-S2 System object.

s2WaveGen = dvbs2WaveformGenerator;

Generate a PL dummy frame.

data = zeros(0,1);

Generate a DVB-S2 waveform.

txWaveform = s2WaveGen(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).

Extended Capabilities

Version History

Introduced in R2021a