Main Content

dvbsapskdemod

DVB-S2/S2X/SH standard-specific APSK demodulation

Description

Z = dvbsapskdemod(Y,M,stdSuffix) demodulates an amplitude phase shift keying (APSK) input signal, Y, that was modulated in accordance with the Digital Video Broadcasting (DVB-S2/S2X/SH) standard identified by stdSuffix and the modulation order, M.

example

Z = dvbsapskdemod(Y,M,stdSuffix,codeIDF) specifies code identifier, codeIDF, to use when selecting the demodulation parameters.

Z = dvbsapskdemod(Y,M,stdSuffix,codeIDF,frameLength) specifies codeIDF and frameLength to use when selecting the demodulation parameters.

example

Z = dvbsapskdemod(___,Name=Value)specifies options using one or more name-value arguments using any of the previous syntaxes. For example, dvbsapskdemod(Y,M,PlotConstellation=true) demodulates using modulation order M and plots the constellation. Specify name-value arguments after all other input arguments.

example

Examples

collapse all

Demodulate a 64-APSK signal that was modulated as specified in DVB-S2X. Compute hard decision integer output and verify that the output matches the input.

Set the modulation order and standard suffix. Generate random data.

M = 64;
std = "s2x";
x = randi([0 M-1],1000,1);

Modulate the data.

y = dvbsapskmod(x,M,std);

Demodulate the received signal. Compare the demodulated data to the original data.

z = dvbsapskdemod(y,M,std);
isequal(z,x)
ans = logical
   1

Demodulate a 32-APSK signal that was modulated as specified in DVB-S2. Compute hard decision bit output and verify that the output matches the input.

Set the modulation order, standard suffix, and code identifier. Generate random bit data.

M = 32;
std = "s2";
codeIDF = "4/5";
numBitsPerSym = log2(M);
x = randi([0 1],100*numBitsPerSym,1,"uint32");

Modulate the data. Use a name-value pair to specify bit input data.

y = dvbsapskmod(x,M,std,codeIDF,InputType="bit");

Demodulate the received signal. Compare the demodulated data to the original data.

z = dvbsapskdemod(y,M,std,"4/5",OutputType="bit", ...
    OutputDataType="uint32");
isequal(z,x)
ans = logical
   1

Demodulate a DVB-SH compliant 16-APSK signal and calculate soft bits.

Set the modulation order and generate a random bit sequence.

M = 16;
std = "sh";
numSym = 20000;
numBitsPerSym = log2(M);
x = randi([0 1],numSym*numBitsPerSym,1);

Modulate the data. Use a name-value pair to specify bit input data.

txSig = dvbsapskmod(x,M,std,InputType="bit");

Pass the modulated signal through a noisy channel.

rxSig = awgn(txSig,10,"measured");

View the constellation of the received signal using a scatter plot.

scatterplot(rxSig)

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.

DVB-SH compliant constellations have unit average power. Demodulate the signal, computing soft bits using the approximate LLR algorithm.

z = dvbsapskdemod(rxSig,M,std, ...
    OutputType="approxllr", ...
    NoiseVariance=0.1);

Input Arguments

collapse all

APSK modulated signal, specified as a scalar, vector, or matrix. When Y is a matrix, each column is treated as an independent channel.

Y must be modulated in accordance with DVB - Satellite Communications standard DVB-S2, DVB-S2X, or DVB-SH. For more information, see [1], [2], and [3].

Data Types: single | double
Complex Number Support: Yes

Modulation order, specified as a positive integer power of two. The modulation order specifies the total number of points in the signal constellation.

Data Types: double

Standard suffix for DVBS modulation variant, specified as "s2", "s2x", or "sh".

Code identifier, specified as a character vector or string. This table lists the acceptable codeIDF values.

Modulation Order (M)Applicable Standard (stdSuffix)Acceptable Code Identifier (CodeIDF) Values
16

"s2" or "s2x"

"2/3", "3/4", "4/5", "5/6", "8/9", "9/10"

16

"s2x"

"26/45", "3/5", "28/45", "23/36", "25/36", "13/18", "7/9", "77/90", "100/180", "96/180", "90/180", "18/30", "20/30"

32

"s2" or "s2x"

"3/4", "4/5", "5/6", "8/9", "9/10"

32

"s2x"

"32/45", "11/15", "7/9", "2/3"

64

"s2x"

"11/15", "7/9", "4/5", "5/6", "128/180"

128

"s2x"

"3/4", "7/9"

256

"s2x"

"32/45", "3/4", "116/180", "20/30", "124/180", "22/30"

For more information, refer to Tables 9 and 10 in the DVB-S2 standard [1] and Table 17a in the DVB-S2X standard [2].

Dependencies

This input argument applies only when stdSuffix argument is set to "s2" or "s2x".

Frame length, specified as "normal" or "short". The function uses frameLength and codeIDF arguments to select the modulation parameters.

Dependencies

This input argument applies only when stdSuffix argument is set to "s2" or "s2x".

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Example: Z = dvbsapskdemod(Y,M,stdSuffix,OutputType="bit") sets the input type of the signal as bits.

Output type, specified as "integer", "bit", "llr", or "approxllr". For a description of the returned output, see Z.

Data type of the output, specified as one of the data types listed in this table. Acceptable values for OutputDataType depend on the OutputType argument value.

OutputType ValueAcceptable OutputDataType Values
"integer"

"double", "single", "int8", "int16", "int32", "uint8", "uint16", or "uint32"

"bit"

"double", "single", "int8", "int16", "int32", "uint8", "uint16", "uint32", or "logical"

The default value is the data type of input argument Y.

Dependencies

To enable this argument, set OutputType argument to "integer" or "bit".

Unit average power flag, specified as logical 0 (false) or 1 (true).

  • When this flag is true, the function scales the constellation to an average power of 1 watt referenced to 1 ohm.

  • When this flag is false, the function scales the constellation based on specifications in the relevant standard, as described in [1] and [2].

Note

When you set stdSuffix argument to "sh", the constellation always has unit average power.

Dependencies

This argument applies only when stdSuffix argument is set to "s2" or "s2x".

Data Types: logical

Noise variance, specified as one of these options:

  • Positive scalar — The function uses the same noise variance value on all input elements.

  • Vector of positive values — For all the elements of the input along the corresponding last dimension, the function uses the noise variance specified by each element of the vector. The vector length must be equal to the number of columns in the input signal.

When the noise variance or signal power result in computations involving extreme positive or negative magnitudes, see DVB Compliant APSK Soft Demodulation for algorithm selection considerations.

Dependencies

This argument applies when you set OutputType argument to "llr" or "approxllr".

Data Types: double

Option to plot constellation, specified as logical 0 (false) or 1 (true). To plot the constellation, set PlotConstellation to true.

Data Types: logical

Output Arguments

collapse all

Demodulated signal, returned as a scalar, vector, or matrix. The dimensions of the output vary depending on the specified OutputType argument value, as shown in this table.

OutputType Valuedvbsapskdemod Output ValueDimensions of Output
"integer"Demodulated integer values in the range [0, M – 1]Z has the same dimensions as input Y.
"bit"Demodulated bitsThe number of rows in Z is log2(sum(M)) times the number of rows in Y. Each demodulated symbol is mapped to a group of log2(sum(M)) elements in a column, where the first element represents the MSB and the last element represents the LSB.
"llr"Log-likelihood ratio value for each bit
"approxllr"Approximate log-likelihood ratio value for each bit

Algorithms

collapse all

DVB-S2/S2X/SH

Digital video broadcasting (DVB) standards specify S2, S2X, and SH standard-specific amplitude phase shift keying (APSK) modulation. For further information on the DVB-S2/S2X/SH standards, see specified in [1], [2], and [3], respectively.

DVB Compliant APSK Hard Demodulation

The hard demodulation algorithm applies amplitude phase decoding as described in [4].

DVB compliant APSK hard demodulation algorithm steps

DVB Compliant APSK Soft Demodulation

For soft demodulation, two soft-decision log-likelihood ratio (LLR) algorithms are available: exact LLR and approximate LLR. The exact LLR algorithm is more accurate but has slower execution speed than the approximate LLR algorithm.

Note

The exact LLR algorithm computes exponentials using finite precision arithmetic. For computations involving very large positive or negative magnitudes, the exact LLR algorithm yields:

  • Inf or -Inf if the noise variance is a very large value

  • NaN if the noise variance and signal power are both very small values

The approximate LLR algorithm does not compute exponentials. You can avoid Inf, -Inf, and NaN results by using the approximate LLR algorithm.

References

[1] ETSI Standard EN 302 307 V1.4.1: 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), European Telecommunications Standards Institute, Valbonne, France, 2005-03.

[2] ETSI Standard EN 302 307-2 V1.1.1: 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-S2X), European Telecommunications Standards Institute, Valbonne, France, 2015-02.

[3] ETSI Standard EN 302 583 V1.1.1: Digital Video Broadcasting (DVB); Framing structure, channel coding and modulation for Satellite Services to Handheld devices (SH), European Telecommunications Standards Institute, Valbonne, France, 2008-03.

[4] Sebesta, J. “Efficient Method for APSK Demodulation.” Selected Topics on Applied Mathematics, Circuits, Systems, and Signals (P. Pardalos, N. Mastorakis, V. Mladenov, and Z. Bojkovic, eds.). Vouliagmeni, Athens, Greece: WSEAS Press, 2009.

Extended Capabilities

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

Version History

Introduced in R2018a

expand all