1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 4 out of 5)
Loading ... Loading ...
Print Print

Binary to Gray code for 16QAM

by Krishna Sankar on June 1, 2008

In the previous post on Binary to Gray code conversion for PSK, I had claimed that “for a general M-QAM modulation the binary to Gray code conversion is bit more complicated“. However following a closer look, I realize that this is not so complicated. :)

The QAM scenario can be treated as independent PAM modulation on I arm and Q-arm respectively. For example, let us consider 16-QAM scenario.

Each constellation point can represent bits, with two bits on the I axis and two on the Q axis. For 16-QAM, the values taken by the I and Q axes are {-3, -1, +1, +3}. The two bits on the I and Q arm can be Gray coded as shown in the table below

b0b1 I b2b3 Q
00 -3 00 -3
01 -1 01 -1
11 +1 11 +1
10 +3 10 +3

Table: Gray coded constellation mapping for 16-QAM

The constellation diagram with the bit mapping is shown below.

16QAM modulation with Gray coded mapping

Figure: 16QAM constellation with Gray coded mapping

As can be observed from the figure above, the adjacent constellation symbols differ by only one bit. As simple as that. :)

Simulation model for Binary to Gray coded mapping for 16-QAM


% Matlab/Octave code for converting bits into 16-QAM constellation

clear all
M = 16;
% number of constellation points
k = log2(M); % number of bits in each constellation
% defining the real and imaginary PAM constellation
% for 16-QAM
alphaRe = [-(2*sqrt(M)/2-1):2:-1 1:2:2*sqrt(M)/2-1];
alphaIm = [-(2*sqrt(M)/2-1):2:-1 1:2:2*sqrt(M)/2-1];
% input - decimal equivalent of all combinations with b0b1b2b3
ip = [0:15];
ipBin = dec2bin(ip.'); % decimal to binary
% taking b0b1 for real
ipDecRe = bin2dec(ipBin(:,[1:k/2]));
ipGrayDecRe = bitxor(ipDecRe,floor(ipDecRe/2));
% taking b2b3 for imaginary
ipDecIm = bin2dec(ipBin(:,[k/2+1:k]));
ipGrayDecIm = bitxor(ipDecIm,floor(ipDecIm/2));
% mapping the Gray coded symbols into constellation
modRe = alphaRe(ipGrayDecRe+1);
modIm = alphaIm(ipGrayDecIm+1);
% complex constellation
mod = modRe + j*modIm;

Note:

The above code snippet works only for 4QAM and 16QAM.

Related posts

  1. 16QAM Bit Error Rate (BER) with Gray mapping
  2. Gray code to Binary conversion for PSK and PAM
  3. Binary to Gray code conversion for PSK and PAM
  4. Softbit for 16QAM
  5. Bit error rate for 16PSK modulation using Gray mapping

D id you like this article? Make sure that you do not miss a new article by subscribing to RSS feed OR subscribing to e-mail newsletter. Note: Subscribing via e-mail entitles you to download the free e-Book on BER of BPSK/QPSK/16QAM/16PSK in AWGN.

{ 3 comments… read them below or add one }

1 Reeda January 22, 2010 at 9:36 am

How about 8QAM Bit Error Rate (BER) with Gray mapping????

Reply

2 pi March 2, 2010 at 5:41 pm

how about for demodulator?

Reply

3 Krishna Sankar March 30, 2010 at 4:37 am

@pi: BER for 16QAM with Gray coding is discussed in http://www.dsplog.com/2008/06/05/16qam-bit-error-gray-mapping/

Reply

Leave a Comment

Previous post:

Next post: