# 16-QAM demodulation

I wonder how higher order QAM modulations (like 16-QAM) are demodulated in practice. Let us assume hard detection for simplicity.

For 4-QAM, checking sign of real and imaginary parts is enough, but in my opinion this approach does not scale and using it for higher order modulations would require checking against multiple different thresholds. This simply seems wasteful.

On the other hand, I could not come up with any alternatives except checking a distance between a received symbol and all possible symbols (essentially ML detector). This also does not seem like a good idea, especially in case of large constellations, like 1024-QAM.

Kind regards

• "let us assume hard detection" um, let's not do that :) Commented Mar 4, 2022 at 21:39

For 4-QAM, checking sign of real and imaginary parts is enough, but in my opinion this approach does not scale and using it for higher order modulations would require checking against multiple different thresholds. This simply seems wasteful.

Well, there's hardly a different way to do it! You first decide the sign of the real and imaginary part (and that typically gives you the first two bits: Gray coding!).

Then, you know in which quadrant you are. You add / subtract a complex constant so that the quadrant lies centered.

Then you again decide the real and imaginary part.

Repeat.

Or, you just go through a series of if / else if / else statements.

In a software decider, the iterative approach is "natural", in a hardware decider (i.e. digital logic circuit), the second might be faster, because you can basically do as many comparisons as you want in parallel.

On the other hand, I could not come up with any alternatives except checking a distance between a received symbol and all possible symbols (essentially ML detector). This also does not seem like a good idea, especially in case of large constellations, like 1024-QAM.

Since the ML decision for a rectangular QAM is exactly what you get with threshold decisions, well, that wouldn't be any better.

Let me lose a few words on:

Let us assume hard detection for simplicity.

vs

how higher order QAM modulations are demodulated in practice

In practice, you use larger QAM (like, large, as in 1024 and up) because you need to get close to channel capacity at a high SNR.

So, using a large QAM and then hard decision is basically a waste. Should have used a smaller QAM and less forward error correction redundancy instead, if the rate doesn't matter! In some cases you don't do the soft decoding for complexity reasons, but in general, in modern systems using large QAMs, the channel codes used allow for soft decoding. That's by design.

So, you do use soft decision. It's basically the same, you do it first for the first bit (project onto the real axis, calculate the Log-Likelihood ratio (LLR) directly from that value), then for the second value (project onto imaginary axis, calculate the LLR value), and then you shift the whole constellation, and repeat. (there's simplifications/approximations done here.)

You feed the the thus won LLRs (aka. softbits!) into your soft decoder.

• Thanks Marcus for your answer. I really appreciate it. Unfortunately I can't upvote it since I am a new user. The reason I asked this question is because I got an assignment at my studies. It is rather a typical task, where I have to generate 16-QAM constellation, pass it through a noise channel and then "recover it" to finally compute SER. Therefore I am not interested in either soft detection / channel coding / LLR. I know that ignoring this in really systems is, to put it mildly, asking for problems :) Commented Mar 4, 2022 at 22:42
• Continuing: Going back to my assignment, since I have to compute SER, not BER, Gray coding is not useful for me. But what I have in mind is more or less the same you explained. My idea is to compare an absolute value of real / imaginary part of a receveid symbol with a threshold to find a "hard value" (either 1 or 3 and the threshold would be set to 2 since I am using 16-QAM) of it. Next, I would multiply this hard value by a "sign" of real / imaginary part. What do you think about this?
– Peter K.
Commented Mar 5, 2022 at 20:23
• @Pawel Gray coding is not a necessity. It just makes it easy to do the decision. You can always assume Gray coding, and then use a table to convert it to your actual coding. So, this does not affect my solution at all – you get a symbol error if the Gray-Coded symbol has (at least) a bit error. Just as you get a symbol error when the non-gray has (at least) a bit error – makes no difference. Commented Mar 6, 2022 at 11:21
• Your absolute value thing is just more complicated than the usual solution I described, because afterwards, you'd still need to figure out what the actual sign was. The difference is just that you "half" your "decision space" in the first step (taking the absolute), and then have to do the rest of the decision the same way I did, instead of simply doing all things consistently. Also, compared to a straightforward comparison, taking the absolute value can be (depends on your number format) relatively costly, so this is not a great solution from that perspective, either. Commented Mar 6, 2022 at 11:24