Main Content

ccsdsTMWaveformGenerator

Generate CCSDS TM waveform

Since R2021a

Description

The ccsdsTMWaveformGenerator System object™ generates a Consultative Committee for Space Data Systems (CCSDS) Telemetry (TM) time-domain waveform. The object implements the waveform generation aspects of CCSDS standard blue books:

  • CCSDS 131.0-B-3 — TM synchronization and channel coding [1]

  • CCSDS 401.0-B-30 — Radio frequency and modulation systems [2]

  • CCSDS 131.2-B-1 — Flexible advanced coding and modulation scheme for high rate TM applications [3]

Note

The object supports waveform generation specified by the CCSDS TM synchronization and channel coding standard [1] and CCSDS flexible advanced coding and modulation scheme for high rate TM standard [3]. To obtain the waveform for either of the desired standard, set the WaveformSource property.

To generate a CCSDS TM waveform:

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

tmWaveGen = ccsdsTMWaveformGenerator creates a default CCSDS TM waveform generator System object.

example

tmWaveGen = ccsdsTMWaveformGenerator(Name,Value) sets Properties using one or more name-value pairs. For example, ccsdsTMWaveformGenerator("WaveformSource","flexible advanced coding and modulation","ACMFormat",20) specifies the CSSDS TM waveform source as flexible advanced coding and modulation standard with ACM format as 20 for the generated waveform.

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.

General

CCSDS TM waveform source, specified as one of these values.

  • "synchronization and channel coding" — Use this option to set the waveform to CCSDS TM synchronization and channel coding, as specified in CCSDS 131.0-B-3 [1].

  • "flexible advanced coding and modulation" — Use this option to set the waveform to CCSDS flexible advanced coding and modulation for high rate TM applications, as specified in CCSDS 131.2-B-1 [3].

Data Types: char | string

Adaptive coding and modulation (ACM) format, specified as an integer in the range [1, 27], as specified in CCSDS 131.2-B-1 Section 5.2.4 Table 5-2 [3].

Tunable: Yes

Dependencies

To enable this property, set the WaveformSource property to "flexible advanced coding and modulation".

Data Types: double | uint8

Number of bytes in one transfer frame, specified as an integer in the range [1, 2048].

Dependencies

To enable this property, one of these conditions should be satisfied:

  • Set WaveformSource property to "synchronization and channel coding" and the ChannelCoding property to "none", "convolutional", or "LDPC" on stream of sync marked transfer frame (SMTF).

  • Set WaveformSource property to "flexible advanced coding and modulation". In this case, the minimum number of NumBytesInTransferFrame is 223.

For other values of ChannelCoding, this NumBytesInTransferFrame property is calculated internally based on other properties.

Data Types: double | uint16

Option for randomizing the data, specified as a numeric or logical value of 1 (true) or 0 (false). Set this value to 1 (true) to randomize the data present in the channel access data unit (CADU).

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding".

When you set the ChannelCoding property to "LDPC" and IsLDPCOnSMTF property to 1 (true), this property is not applicable, and is set to 1 (true).

Data Types: double | logical

Option for inserting attached sync marker (ASM), specified as a numeric or logical value of 1 (true) or 0 (false). Set this value to 1 (true) to indicate the data in CADU is attached with ASM.

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding".

When you set the ChannelCoding property to "LDPC" and IsLDPCOnSMTF property to 1 (true), this property is not applicable, and is set to 1 (true).

Data Types: double | logical

Pulse code modulation (PCM) format to select the PCM coding in the CCSDS TM waveform, specified as one of these values.

  • "NRZ-L" — Non-return-to-zero (NRZ)-level

  • "NRZ-M" — Non-return-to-zero (NRZ)-mark

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding" and the Modulation property to "BPSK", "QPSK", "8PSK", "OPSK", or "PCM/PSK/PM".

Data Types: char | string

Number of NRZ-M encoders, specified as one of these values.

  • 1 — Use this option to differentially encode the bit stream, and then divide the stream into in-phase (I) and quadrature phase (Q) branches to map to the signal.

  • 2 — Use this option to spilt data bits into I and Q branches, and then differentially encode each stream independently. Map these differentially encoded bits to the signal.

Dependencies

To enable this property, all these four conditions must be satisfied:

  • Set the WaveformSource property to "synchronization and channel coding".

  • Set the PCMFormat property to "NRZ-M".

  • Set the ChannelCoding property to "none", "RS", "turbo", or "LDPC".

  • Set the Modulation property to QPSK or "OQPSK".

Data Types: double

Channel Coding

Forward error correction coding scheme, specified as one of these values.

  • "none"

  • "RS"

  • "convolutional"

  • "concatenated"

  • "turbo"

  • "LDPC"

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding".

Data Types: char | string

Number of bits in the turbo or lower density parity check (LDPC) message, specified as one of these values.

  • 1784, 3568, 7136, or 8920 — Use one of these values when you set the ChannelCoding property to "turbo".

  • 1024, 4096, 16384, or 7136 — Use one of these values when you set the ChannelCoding property to "LDPC".

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding" and the ChannelCoding property to either "turbo" or "LDPC".

Data Types: double | uint16

Code rate of convolutional code, specified as a one of these values.

  • "1/2"

  • "2/3"

  • "3/4"

  • "5/6"

  • "7/8"

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding" and the ChannelCoding property to either "convolutional" or "concatenated".

When you set the ChannelCoding property to "concatenated", the numeric value of the code rate also depends on the constituent Reed-Solomon (RS) code. You can obtain the actual numeric value for any code from the output field ActualCodeRate of the info object function.

Data Types: char | string

Option to indicate inverter presence on second path of the convolutional code (CC), specified as a numeric or logical value of 0 (false) or 1 (true). Set this value to 1 (true) to indicate presence of inverter on the second path of the convolutional encoder.

Though the CCSDS standard specifies that there is an inverter on the second path of convolutional encoder for half rate codes, yet you can disable it using this flag.

Dependencies

To enable this property, both these conditions must be satisfied:

  • Set ChannelCoding property to either "convolutional" or "concatenated".

  • Set ConvolutionalCodeRate property to "1/2".

Data Types: double | logical

Code rate of turbo or LDPC code, specified as one of these values.

  • "1/2", "1/3", "1/4", or "1/6" — Use one of these values when you set the ChannelCoding property to "turbo".

  • "1/2", "2/3", "4/5", or "7/8" — Use one of these values when you set the ChannelCoding property to "LDPC".

Note

When you set the ChannelCoding property to "LDPC" and the NumBitsInInformationBlock property to 7136, the CodeRate must be "7/8".

For an LDPC code, setting CodeRate to 7/8 implies an actual code rate numeric value of 223/255. You can obtain the actual numeric value for any code from the output field ActualCodeRate of the info object function.

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding" and the ChannelCoding property to either "turbo" or "LDPC".

Data Types: char | string

Number of bytes in one RS message block, specified as 223 or 239.

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding" and the ChannelCoding property to "RS" or "concatenated".

Data Types: double | uint8

Interleaving depth of the RS code, specified as 1, 2, 3, 4, 5, or 8. The interleaving depth is the number of RS codewords in one code block.

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding" and the ChannelCoding property to "RS" or "concatenated".

Data Types: double | uint8

Option to shorten the RS code, specified as a numeric or logical value of 0 (false) or 1 (true). Set this value to 1 (true) to shorten the RS code.

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding" and the ChannelCoding property to "RS" or "concatenated".

Data Types: double | logical

Number of bytes in the RS shortened message block, specified as an integer in the range [1, RSMessageLength].

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding", the ChannelCoding property to "RS" or "concatenated", and the IsRSMessageShortened property to 1 (true).

Data Types: double | uint8

Option for using LDPC on the stream of a sync marked transfer frame (SMTF), specified as a numeric or logical value of 0 (false) or 1 (true). Set this value to 1 (true) to indicate LDPC on the stream of SMTF as specified in CCSDS 131.0-B-3 Section 8 of the TM synchronization and channel coding standard [1]. To indicate LDPC on the transfer frame, set this value to 0 (false).

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding" and the ChannelCoding property to "LDPC".

Data Types: double | logical

Number of LDPC codewords in the LDPC code block of the stream of SMTF, specified as an integer in the range [1, 8].

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding", the ChannelCoding property to "LDPC", and the IsLDPCOnSMTF property to true.

Data Types: double | uint8

Digital Modulation and Filter

Modulation scheme used in CCSDS TC waveform, specified as one of these values.

  • "QPSK"

  • "BPSK"

  • "8PSK"

  • "OQPSK"

  • "GMSK"

  • "PCM/PSK/PM"

  • "PCM/PM/biphase-L"

  • "4D-8PSK-TCM"

Dependencies

To enable this property, set the WaveformSource property to "synchronization and channel coding".

Data Types: char | string

Pulse shaping filter, specified as "root raised cosine" or "none".

Dependencies

To enable this property, one of these conditions must be satisfied:

  • Set WaveformSource property to "synchronization and channel coding" and the Modulation property to "BPSK", "QPSK", "8PSK", or "4D-8PSK-TCM".

  • Set WaveformSource property to"flexible advanced coding and modulation".

Data Types: char | string

Roll-off factor of the square root raised cosine (SRRC) baseband filter, specified as a scalar in the range [0, 1].

Note

This property is not applicable when you set the PulseShapingFilter property to "none" for either value of the WaveformSource property.

Dependencies

To enable this property, one of these conditions must be satisfied:

  • Set WaveformSource property to "synchronization and channel coding" and the Modulation property to either "BPSK", "QPSK", "8PSK", "OQPSK", or "4D-8PSK-TCM".

  • Set WaveformSource property to "flexible advanced coding and modulation".

Data Types: double

Filter span in number of symbols, specified as a positive integer.

The ccsdsTMWaveformGenerator System object truncates the infinite impulse response of the ideal root raised cosine filter to this value.

Note

This property is not applicable when you set the PulseShapingFilter property to "none" for either value of the WaveformSource property.

Dependencies

To enable this property, one of these conditions must be satisfied:

  • Set WaveformSource property to "synchronization and channel coding" and the Modulation property to either "BPSK", "QPSK", "8PSK", "OQPSK", or "4D-8PSK-TCM".

  • Set WaveformSource property to "flexible advanced coding and modulation".

Data Types: double | uint32

Bandwidth time product for the Gaussian minimum shift keying (GMSK) modulator, specified as 0.25 or 0.5.

Dependencies

To enable this property, set WaveformSource property to "synchronization and channel coding" and the Modulation property to "GMSK".

Data Types: double

Modulation efficiency of 4D-8PSK trellis coded modulator (TCM), specified as 2, 2.25, 2.5, or 2.75. This property indicates the number of bits for each complex baseband symbol.

Dependencies

To enable this property, set WaveformSource property to "synchronization and channel coding" and the Modulation property to "4D-8PSK-TCM".

Data Types: double

Type of waveform to PSK-modulate the NRZ data, specified as "sine" or "square".

Dependencies

To enable this property, set WaveformSource property to "synchronization and channel coding" and the Modulation property to "PCM/PSK/PM".

Data Types: char | string

Modulation index in the residual carrier phase modulation, specified as a scalar in the range [0.2, 2]. Units are in radians.

Dependencies

To enable this property, set WaveformSource property to "synchronization and channel coding" and the Modulation property to "PCM/PSK/PM" or "PCM/PM/biphase-L".

Data Types: double

Coded symbol rate in Hz, specified as a positive scalar.

Dependencies

To enable this property, set WaveformSource property to "synchronization and channel coding" and the Modulation property to "PCM/PSK/PM".

Data Types: double

Ratio of the subcarrier frequency to the symbol rate, specified as an integer in the range [1, 50].

Dependencies

To enable this property, set WaveformSource property to "synchronization and channel coding" and the Modulation property to "PCM/PSK/PM".

Data Types: double | uint8

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

This property is applicable for either input value of the WaveformSource property.

Dependencies

To enable this property, one of these conditions must be satisfied:

  • Set the Modulation property to "OQPSK", "PCM/PSK/PM", or "GMSK".

  • Set the PulseShapingFilter to "root raised cosine".

Data Types: double | uint8

Option for inserting pilot symbols within data, specified as a numeric or logical value of 0 (false) or 1 (true). Set this value to 1 (true) to indicate pilots are inserted, as described in CCSDS flexible advanced coding and modulation scheme for high rate TM standard [3].

Dependencies

To enable this property, set the WaveformSource property to "flexible advanced coding and modulation".

Data Types: double | logical

Scrambling code number for flexible advanced coding and modulation for high rate TM applications standard [3], specified as an integer in the range [0, (218 – 2)].

ScramblingCodeNumber is used to randomize the complex baseband symbols.

Dependencies

To enable this property, set the WaveformSource property to "flexible advanced coding and modulation".

Data Types: double | uint32

Read-Only

This property is read-only.

Minimum number of input bits to generate a waveform, returned as an integer.

The number of input bits must be an integer multiple of NumInputBits.

Data Types: double

This property is read-only.

Minimum number of transfer frames for a nonempty System object output, returned as an integer.

When you set the WaveformSource property to "flexible advanced coding and modulation", or to "synchronization and channel coding" with the IsLDPCOnSMTF property set to 1 (true), System object output is empty until it has sufficient input to process through channel coding and modulation.

Data Types: double

Usage

Description

txWaveform = tmWaveGen(bits) generates a CCSDS TM time-domain waveform for the corresponding input bits.

[txWaveform,encodedBits] = tmWaveGen(bits) also returns the bits obtained after TM synchronization and channel coding sublayer operations.

Input Arguments

expand all

Information bits, in the form of transfer frames, specified as a binary-valued column vector. The length of this vector must be an integer multiple of the number of bits in one transfer frame. The NumInputBits property indicates the number of bits in one transfer frame.

Data Types: double | int8 | logical

Output Arguments

expand all

Generated CCSDS TM time-domain waveform, returned as a column vector. This output is generated in the form of complex in-phase quadrature (IQ) samples.

Data Types: double
Complex Number Support: Yes

Output bits obtained after TM synchronization and channel coding sublayer operations, returned as a binary-valued column vector.

Data Types: double | int8 | logical

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 Consultative Committee for Space Data Systems (CCSDS) Telemetry (TM) waveform for the synchronization and channel coding standard, for multiple transfer frames. Visualize the waveform by using a spectrum plot.

Create a CCSDS TM System object. Set the waveform type as synchronization and channel coding with GMSK-modulated concatenated codes.

tmWaveGen = ccsdsTMWaveformGenerator;
tmWaveGen.WaveformSource = "synchronization and channel coding";
tmWaveGen.ChannelCoding = "concatenated";
tmWaveGen.Modulation = "GMSK";
tmWaveGen.RSMessageLength = 239;
tmWaveGen.RSInterleavingDepth = 2;
tmWaveGen.BandwidthTimeProduct = 0.5;
disp(tmWaveGen)
  ccsdsTMWaveformGenerator with properties:

           WaveformSource: "synchronization and channel coding"
            HasRandomizer: true
                   HasASM: true

   Channel coding
            ChannelCoding: "concatenated"
    ConvolutionalCodeRate: "1/2"
            InvertCCPath2: true
          RSMessageLength: 239
      RSInterleavingDepth: 2
     IsRSMessageShortened: false

   Digital modulation and filter
               Modulation: "GMSK"
     BandwidthTimeProduct: 0.5000
         SamplesPerSymbol: 10

  Use get to show all properties

Specify the number of transfer frames.

numTF = 15;
waveform = [];  % Initialize waveform as null

Generate the CCSDS TM waveform for the synchronization and channel coding standard by using multiple System object calls.

rng default    % For reproducible results
for iTF = 1:numTF
     bits = randi([0 1],tmWaveGen.NumInputBits,1);
     waveform = [waveform; tmWaveGen(bits)];
end

Create a spectrum analyzer System object to display the frequency spectrum of the generated CCSDS TM time-domain waveform.

BW = 36e6;     % Typical satellite channel bandwidth
Fsamp = tmWaveGen.SamplesPerSymbol*BW;
scope = spectrumAnalyzer('SampleRate',Fsamp,...
                             'AveragingMethod','Exponential');
scope(waveform)

Generate a Consultative Committee for Space Data Systems (CCSDS) Telemetry (TM) waveform for the flexible advanced coding and modulation scheme for high rate TM applications standard, for one physical layer (PL) frame. Visualize the waveform by using a scatter plot.

Create a CCSDS TM System object, and then specify its properties.

tmWaveGen = ccsdsTMWaveformGenerator;
tmWaveGen.WaveformSource = "flexible advanced coding and modulation";
tmWaveGen.ACMFormat = 17;   % 16APSK
tmWaveGen.PulseShapingFilter = "none";
disp(tmWaveGen)
  ccsdsTMWaveformGenerator with properties:

             WaveformSource: "flexible advanced coding and modulation"
                  ACMFormat: 17
    NumBytesInTransferFrame: 223

   Channel coding
    No properties.

   Digital modulation and filter
         PulseShapingFilter: "none"
                  HasPilots: false
       ScramblingCodeNumber: 0

  Use get to show all properties

Calculate the number of transfer frames in one PL frame.

NumTFInOnePL = tmWaveGen.MinNumTransferFrames*16; % One PL frame consists of 16 codewords, as specified in the standard
waveform = [];  % Initialize waveform as null

Generate the CCSDS TM waveform for the flexible advanced coding and modulation scheme for high rate TM applications standard.

rng default    % For reproducible results
for iTF = 1:NumTFInOnePL
   bits = randi([0 1],tmWaveGen.NumInputBits,1);
   waveform = [waveform; tmWaveGen(bits)];
end

Display the scatter plot of the constellation for the generated waveform.

scatterplot(waveform);
legend off;

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers. This object represents Channel 1.

Get information from a ccsdsTMWaveformGenerator System object by using the info function. Then retrieve the filter residual samples by using the flushFilter object function.

Create a Consultative Committee for Space Data Systems (CCSDS) Telemetry (TM) System object. Set the waveform type as synchronization and channel coding with low-density parity-check (LDPC) channel coding. Display the properties.

tmWaveGen = ccsdsTMWaveformGenerator;
tmWaveGen.WaveformSource = "synchronization and channel coding";
tmWaveGen.ChannelCoding = "LDPC";
tmWaveGen.NumBitsInInformationBlock = 1024;
tmWaveGen.Modulation = "QPSK";
tmWaveGen.CodeRate = "1/2";
disp(tmWaveGen)
  ccsdsTMWaveformGenerator with properties:

               WaveformSource: "synchronization and channel coding"
                HasRandomizer: true
                       HasASM: true
                    PCMFormat: "NRZ-L"

   Channel coding
                ChannelCoding: "LDPC"
    NumBitsInInformationBlock: 1024
                     CodeRate: "1/2"
                 IsLDPCOnSMTF: false

   Digital modulation and filter
                   Modulation: "QPSK"
           PulseShapingFilter: "root raised cosine"
                RolloffFactor: 0.3500
          FilterSpanInSymbols: 10
             SamplesPerSymbol: 10

  Use get to show all properties

Specify the number of transfer frames.

numTF = 20;

Get the characteristic information about the CCSDS TM waveform generator.

info(tmWaveGen)
ans = struct with fields:
         ActualCodeRate: 0.5000
       NumBitsPerSymbol: 2
    SubcarrierFrequency: []

Generate the input bits for the CCSDS TM waveform generator, and then generate the waveform.

bits = randi([0 1], tmWaveGen.NumInputBits*numTF,1);
waveform = tmWaveGen(bits);

Check the filter residual data samples that remain in the filter delay.

flushFilter(tmWaveGen)
ans = 100×1 complex

  -0.0772 - 0.0867i
  -0.0751 - 0.0859i
  -0.0673 - 0.0788i
  -0.0549 - 0.0654i
  -0.0388 - 0.0469i
  -0.0200 - 0.0250i
   0.0002 - 0.0012i
   0.0208 + 0.0227i
   0.0405 + 0.0453i
   0.0587 + 0.0653i
      ⋮

References

[1] CCSDS 131.0-B-3. Blue Book. Issue 3. "TM Synchronization and Channel Coding." Recommendation for Space Data System Standards. Washington, D.C.: CCSDS, September 2017.

[2] CCSDS 401.0-B-30. Blue Book. Issue 30. "Radio Frequency and Modulation Systems - Part 1: Earth Stations and Spacecraft." Recommendation for Space Data System Standards. Washington, D.C.: CCSDS, February 2020.

[3] CCSDS 131.2-B-1. Blue Book. Issue 1. "Flexible Advanced Coding and Modulation Scheme for High Rate Telemetry Applications." Recommendation for Space Data System Standards. Washington, D.C.: CCSDS, March 2012.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2021a

expand all