## Constructing a rectangular constellation for 16-QAM

October 10, 2012

Any rectangular QAM constellation is equivalent to superimposing two ASK signals on quadrature carriers (I and Q components). For 4-QAM modulation, each symbol is of size k = log2(M) = log2(4) = 2 bits. For 16-QAM modulation, the symbol size is k = log2(16) = 4 bits.

There exist other constellations that are more efficient (in terms of energy required to achieve same error probability) than the standard rectangular constellation. But due to its simplicity in modulation and demodulation rectangular constellations are preferred.

In any M-QAM constellation, in order to restrict the erroneous symbol decisions to single bit error, the adjacent symbols in the transmitter constellation should not differ more than one bit. This is usually achieved by converting the input symbols to Gray coded symbols and then mapping it to the desired QAM constellation. But this intermediate step can be skipped altogether by using a Look-Up-Table (LUT) approach which properly translates the input symbol to appropriate position in the constellation. We will exploit the inherent property of Karnaugh Maps to generate the gray coded 16-QAM constellation

## Karnaugh Maps:

If you are familiar with Karnaugh Maps (K-Maps) used in digital electronics, it is easier for you to identify that the K-Maps are constructed based on Gray Codes.

To generate a gray coded 16-QAM constellation we will use a 4 variable (since for 16-QAM, the symbol size is 4 bits) K-Map. A 16 QAM constellation can be constructed using two 4-ASK signals. For a 4-ASK signal there are 4 amplitude levels. For our case the 4 amplitude levels are {-3,-1,+1,+3}.

A 4 variable K-Map will look like the one shown below. Here ABCD are the 4 variables appearing in the bit order (MSB at A and LSB at D).

Now replace the variables AB and CD with the 4 amplitude levels {-3,-1,+1,+3}. Here AB is considered as the two bits ASK modulated on the in-phase arm and CD is considered as the two bits ASK modulated on the quadrature arm.

Now assign equivalent decimal values (shown in square brackets) to each cell value in the table.

Construct an array with the numbers indicated in the square brackets as array indices. The respective value for each index in the array is taken as AB + j CD. The array indices are the input to the 16-QAM modulator and the corresponding array values are the 16-QAM modulator output that are gray coded and mapped to constellation points. Note: In Matlab the array subscript always starts with ’1′. So, care has to be taken when accessing the array values.

Let’s draw the constellation to verify the above mentioned approach. Plot the in-phase and quadrature phase components (QAM output) and each point with the equivalent binary representation of the array index gives the 16-QAM constellation where the adjacent symbols differ by only one bit.

The same approach can be used to construct rectangular constellation for QAM modulation for any values of M. For example a 64-QAM constellation would require a k=log2(64) = 6 Variable Karnaugh Map to begin with.