Main Content


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

bin2gray 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 = bin2gray(x,modulation,M) generates a Gray-encoded vector or matrix output 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.


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' option, instead of bin2gray.


[y,map] = bin2gray(x,modulation,M) generates a Gray-encoded 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.


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])

Input Arguments

collapse all

Input binary-encoded 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-encoded 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