主要内容

comm.SOQPSKDemodulator

Demodulate signal using SOQPSK method and Viterbi algorithm

Since R2026a

Description

The comm.SOQPSKDemodulator System object™ demodulates an input signal that was modulated by using the shaped-offset quadrature phase shift keying (SOQPSK) method. The input is a baseband representation of the modulated signal. For more information about the demodulation and filtering applied, see Algorithms.

To demodulate a signal that was modulated using the SOQPSK method:

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

soqpskdemod = comm.SOQPSKDemodulator creates a demodulator System object to demodulate input SOQPSK signals using the Viterbi algorithm.

soqpskdemod = comm.SOQPSKDemodulator(Name=Value) sets properties using one or more name-value arguments. For example, comm.SOQPSKDemodulator(FrequencyPulse='A') specifies type 'A' frequency pulse shaping.

example

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.

Type of frequency pulse shaping used by the modulator to smooth the phase transitions of the modulated signal, specified as 'TG', 'A', or 'B'. For more information, see Pulse Shape Filtering.

Precoder initial input, specified as a binary-valued scalar or a two-element row vector. When provided as a scalar, the same value applies to both elements.

This property defines the first data symbol used by the modulator before the first call of the object, in reverse chronological order.

Initial phase offset in radians, specified as a scalar. This parameter value is the initial phase offset of the modulated waveform.

Samples per symbol, specified as a positive even integer. This property specifies the output symbol upsampling factor for each input sample.

Traceback depth for the Viterbi algorithm, specified as a positive integer representing the number of trellis branches that the Viterbi algorithm uses to construct each traceback path. For more information, see Traceback Depth and Output Delays.

Data type of the output, specified as 'double', 'single', or 'int8'.

Usage

Description

Y = soqpskdemod(X) demodulates the input signal by using the SOQPSK method.

example

Input Arguments

expand all

SOQPSK-modulated signal, specified as a column vector with a length equal to an integer multiple of the SamplesPerSymbol property.

This object accepts variable-size inputs. After the object is locked, you can change the frame size (number of rows) of the signal during simulation. For more information, see Variable-Size Signals in Code.

Data Types: double | single
Complex Number Support: Yes

Output Arguments

expand all

Demodulated output signal, returned as a column vector with NSamp/(NSPS) elements. NSamp is the length of input Y and NSPS is the value of SamplesPerSymbol.

To specify the output data type, use the OutputDataType property.

The output has a processing delay. For more information, see Traceback Depth and Output Delays.

Data Types: single | double | int8

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

stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Examples

collapse all

Demodulate a noisy SOQPSK-B-modulated waveform by using hard-decision processing.

Create SOQPSK modulator and demodulator objects, and a frame of random binary data. Set an EbN0 level for the AWGN channel and convert the value to SNR.

soqpskMod = comm.SOQPSKModulator(FrequencyPulse="B")
soqpskMod = 
  comm.SOQPSKModulator with properties:

        FrequencyPulse: "B"
     InitialConditions: [0 0]
    InitialPhaseOffset: 0
      SamplesPerSymbol: 8
        OutputDataType: "double"

soqpskDemod = comm.SOQPSKDemodulator(FrequencyPulse="B")
soqpskDemod = 
  comm.SOQPSKDemodulator with properties:

        FrequencyPulse: "B"
     InitialConditions: [0 0]
    InitialPhaseOffset: 0
      SamplesPerSymbol: 8
        TracebackDepth: 8
        OutputDataType: "double"

data = randi([0 1],1e3,1);
EbNodB = 11;
snrdB = convertSNR(EbNodB,'ebno', ...
    BitsPerSymbol=2,SamplesPerSymbol=soqpskMod.SamplesPerSymbol);

Apply SOQPSK modulation, add AWGN to the modulated signal, and then demodulate the received symbols.

txOut = soqpskMod(data);
rxIn = awgn(txOut,snrdB,'measured');
rxOut = soqpskDemod(rxIn);

Account for the delay, which equals the sum of the traceback depth and the filter delay, and then calculate the number of errors. The delay equals TracebackDepth + PulseLength/2. Set the delay based on the traceback depth length and the frequency pulse type used for demodulation.

if soqpskMod.FrequencyPulse=="B"
    delay = soqpskDemod.TracebackDepth+8;
else
    delay = soqpskDemod.TracebackDepth+4;
end

Confirm the expected delay by using the finddelay function.

delaycheck = finddelay(data,rxOut)
delaycheck = 
16
isequal(delay,delaycheck)
ans = logical
   1

numErr = sum(data(1:end-delay)~=rxOut(delay+1:end))
numErr = 
0

More About

expand all

Algorithms

expand all

This implementation of the SOQPSK method conforms to the specification in IRIG Standard 106-17, Chapter 2 [1], and includes support for SOQPSK-TG, SOQPSK-A, and SOQPSK-B frequency pulse-shapes.

References

[1] Inter-Range Instrumentation Group (IRIG) Telemetry Standards, IRIG Standard 106-17, Chapter 2, July 2017.

[2] E. Perrins and M. Rice, "Reduced-Complexity Approach to Iterative Detection of Coded SOQPSK," in IEEE® Transactions on Communications, vol. 55, no. 7, pp. 1354-1362, July 2007, doi: 10.1109/TCOMM.2007.900614.

[3] E. Perrins, "FEC Systems for Aeronautical Telemetry," in IEEE Transactions on Aerospace and Electronic Systems, vol. 49, no. 4, pp. 2340-2352, OCTOBER 2013, doi: 10.1109/TAES.2013.6621820.

Extended Capabilities

expand all

Version History

Introduced in R2026a