Main Content


(To be removed) Convert Gray-encoded positive integers to corresponding Gray-decoded integers

gray2bin will be removed in a future release. Use the appropriate modulation object or function to remap constellation points instead. For more information, see Compatibility Considerations.


y = gray2bin(x,modulation,M) generates a Gray-decoded output vector or matrix y with the same dimensions as its input parameter x. x can be a scalar, vector, matrix, or 3-D array. modulation is the modulation type and must be 'qam', 'pam', 'fsk', 'dpsk', or 'psk'. M is the modulation order and must be an integer power of 2.


[y,map] = gray2bin(x,modulation,M) generates a Gray-decoded output y with its respective Gray-encoded constellation map, map.

You can use map output to label a Gray-encoded constellation. The map output gives the Gray-encoded labels for the corresponding modulation. See Binary to Gray Symbol Mapping example.


If you are converting binary coded data to Gray-coded data and modulating the result immediately afterwards, you should use the appropriate modulation object or function with the 'Gray' symbol ordering option, instead of gray2bin.


collapse all

This example shows how to use the bin2gray and gray2bin functions to map integer inputs from a natural binary order symbol mapping to a Gray-coded signal constellation and vice versa, assuming 16-QAM modulation. In addition, a visual representation of the difference between Gray-coded and binary-coded symbol mappings is shown.

Convert Binary to Gray

Create a complete vector of 16-QAM integers.

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

Convert the input vector from a natural binary order to a Gray-encoded vector using bin2gray.

[y,mapy] = bin2gray(x,'qam',M);

Convert Gray to Binary

Convert the Gray-encoded symbols, y, back to a binary ordering using gray2bin.

z = gray2bin(y,'qam',M);

Verify that the original data, x, and the final output vector, z, are identical.

ans = logical

Show Symbol Mappings

To create a constellation plot showing the different symbol mappings, use the qammod function to find the complex symbol values.

sym = qammod(x,M);

Plot the constellation symbols and label them using the Gray (y) and binary (z) output vectors. The binary representation of the Gray-coded symbols is shown in black while the binary representation of the naturally ordered symbols is shown in red. Set the axes scaling so that all points are displayed.

for k = 1:16
        dec2base(z(k),2,4),'Color',[1 0 0]);
axis([-4 4 -4 4])

Figure Scatter Plot contains an axes. The axes with title Scatter plot contains 33 objects of type line, text. This object represents Channel 1.

Input Arguments

collapse all

Gray-encoded input data, specified as a vector or matrix.

Data Types: double

Modulation type, specified as, 'qam', 'pam', 'fsk', 'dpsk', or 'psk'

Modulation order, specified as an integer power of 2.

Data Types: double

Output Arguments

collapse all

Gray-decoded data with the same size and dimensions input x.

Map output to label a Gray-encoded constellation, specified as a vector with a length the size of the modulation order, M. The map gives the Gray-encoded labels for the corresponding modulation.

Compatibility Considerations

expand all

Not recommended starting in R2020a

Extended Capabilities

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

Introduced before R2006a