Main Content


MIL-STD-188-110 B/C standard-specific quadrature amplitude modulation (QAM)



Y = mil188qammod(X,M) performs QAM modulation on the input signal, X, in accordance with MIL-STD-188-110 and the modulation order, M. For more information, see MIL-STD-188-110.


Y = mil188qammod(X,M,Name=Value) specifies optional name-value arguments. For example, mil188qammod(Y,M,PlotConstellation=true) specifies modulation order M and plots the constellation. Specify name-value arguments after all other input arguments.


collapse all

Modulate data using 32-QAM as specified in the MIL-188-110C standard. Display the result using a scatter plot.

Set M to 32 and create a data vector containing all possible symbols.

M = 32;
x = (0:M-1);

Modulate the data using QAM as specified in MIL-STD-188-110C.

y = mil188qammod(x,M);

Display the constellation as a scatter plot.


Modulate data using 16-QAM as specified in the MIL-STD-188-110B standard. Normalize the modulator output so that it has an average signal power of 1 W.

Set M and generate random data.

M = 16;
x = randi([0 M-1],1e5,1);

Modulate the data applying 16-QAM as specified in MIL-STD-188-110B. Using name-value pairs, set the unit average power to true and enable the constellation plot.

y = mil188qammod(x,M,'UnitAveragePower',true,'PlotConstellation',true);

Verify that the signal has approximately unit average power.

avgPow = mean(abs(y).^2)
avgPow = 1.0012

Modulate a sequence of bits using 64-QAM as specified by MIL-STD188-110B. Display the constellation.

Set the modulation order and generate a sequence of random bits.

M = 64;
numBitsPerSym = log2(M);
data = randi([0 1],1000*numBitsPerSym,1);

Modulate the data applying 64-QAM as specified by MIL-STD-188-110B, and output constellation symbols of single data type.

y = mil188qammod(data,M, ...
    InputType='bit', ...

Plot the result constellation using a scatter plot.


Input Arguments

collapse all

Input signal, specified as a scalar, vector, or matrix. The elements of X must be binary values or integers in the range [0, M – 1], where M is the modulation order.


To process input signal as binary elements, set the InputType value to 'bit'. For binary inputs, the number of rows must be an integer multiple of log2(M). Groups of log2(M) bits in a column are mapped onto a symbol, with the first bit representing the MSB and the last bit representing the LSB.

Data Types: double | single | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical

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

Example: 16

Data Types: double

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: Y = mil188qammod(X,M,InputType='bit',OutputDataType='single');

Input type, specified as 'integer' or 'bit'.

  • If you specify 'integer', the input signal must consist of integers in the range [0, M – 1].

  • If you specify 'bit', the input signal must contain binary values, and the number of rows must be an integer multiple of log2(M).

Output data type, specified as 'double' or 'single'.

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

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

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

Data Types: logical

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

Modulated signal, returned as a complex scalar, vector, or matrix. The dimension of the output depends on the specified InputType value. Specify the data type of the output with OutputDataType.

InputTypeDimensions of Output
'integer'Y has the same dimensions as input X.
'bit'The number of rows in Y equals the number of rows in X divided by log2(M).

Data Types: double | single

More About

collapse all


MIL-STD-188-110 is a US Department of Defense standard for HF communications using serial PSK mode of both data and voice signals.

The standard specifies physical layer modulation schemes for tactical and long-haul communications. The modulation scheme specified by the standard is a mix of QAM and APSK. For a detailed description of the modulation scheme, see [1].


[1] MIL-STD-188-110B & C: "Interoperability and Performance Standards for Data Modems." Department of Defense Interface Standard, USA.

Extended Capabilities

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

Version History

Introduced in R2018a