Main Content

dvbsapskdemod

DVB-S2/S2X/SH standard-specific amplitude phase shift keying (APSK) demodulation

Description

example

Z = dvbsapskdemod(Y,M,stdSuffix) demodulates an APSK input signal, Y, that was modulated in accordance with the digital video broadcast (DVB) standard identified by stdSuffix and the modulation order, M. For a description of DVB-compliant APSK demodulation, see DVB Compliant APSK Hard Demodulation and DVB Compliant APSK Soft Demodulation.

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

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) 

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 Digital Video Broadcasting (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.

Constellation 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 when you set stdSuffix to 's2' or 's2x'.

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

Dependencies

This input argument applies when you set stdSuffix 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',OutputDataType='single');

Output type, specified as 'integer', 'bit', 'llr', or 'approxllr'. For a description of 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 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 Y.

Dependencies

To enable this argument, set OutputType 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 to 'sh', the constellation always has unit average power.

Dependencies

This argument applies when you set stdSuffix 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 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 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 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. For further description of these algorithms, see the Hard- vs. Soft-Decision Demodulation topic.

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