# How to normalize the power of a QAM signal?

If I have, for example a 16-QAM signal, and the constellation points are (3,3),(3,1),(1,3),(1,1),...(-3,-3).

Now I have a simulated in coming signal with arbitrary power, how can I normalize the signal to this constellation so I can make correct decisions?

The first thing I could think of is to calculate the average power of the in coming signal and normalize it to the average energy of the constellation. But then when I have a very noisy signal, the noise power will effect the scaling factor considerably.

So is there some kind of least mean square method that I can implement so I can really get the scaling correct?

BTW I'm using Python/NumPy/SciPy for my simulation.

• Is this signal riding on a carrier? If so, you could normalize to the carrier power. – Jacob Apr 3 '13 at 20:21
• @Jacob, No this is baseband signal. But if it's passband, how do I normalize to the carrier power? – LWZ Apr 3 '13 at 20:42
• If the constellation points are spaced $d$ apart instead of $2$ apart,the average energy per symbol is $\displaystyle \frac{(M-1)d^2}{6}$ and the maximum signal energy per symbol is $\displaystyle 2\left[\frac{(\sqrt{M}-1)d}{2}\right]^2$. If you can estimate either of these energies, you can figure out the locations of the constellation points $\left(\pm \frac{d}{2}, \pm \frac{d}{2}\right)$, $\left(\pm \frac{3d}{2}, \pm \frac{3d}{2}\right)$, $\left(\pm \frac{d}{2}, \pm \frac{3d}{2}\right)$, $\left(\pm \frac{3d}{2}, \pm \frac{d}{2}\right)$. The thresholds are at $0$ and $\pm d$ on each axis. – Dilip Sarwate Apr 3 '13 at 23:28
• @DilipSarwate, Yes, I mentioned this in my original post. If I have a good estimation of my signal power then I can scale accordingly. But this doesn't work very well when the noise power is very high (SNR is very low). – LWZ Apr 4 '13 at 1:18
• @LWZ: That's one reason why it's harder to use multi-amplitude modulations like QAM in low-SNR situations. Of the two quantities that Dilip pointed out, it's probably easiest to estimate the average energy per symbol. If you perform a long-term sliding average across many symbols, that will help to average out the noise in each individual measurement. Note that this function is effectively the same as what an automatic gain control loop would do in a receiver. – Jason R Apr 4 '13 at 13:10

In $16$-QAM, four constellation points $\left(\pm\frac{d}{2},\pm\frac{d}{2}\right)$ are "interior" points while the remaining $12$ are "edge" points or "corner" points for which at least one of the coordinates is $\pm\frac{3d}{2}$. Thus, in $n$ measurements $(X_i,Y_i)$ of successive transmitted symbols, some of the $X_i$ will equal $\pm\frac{d}{2} + NI_i$ while others will be $\pm\frac{3d}{2} + NI_i$. Similarly, some of the $Y_i$ will equal $\pm\frac{d}{2} + NQ_i$ while others will be $\pm\frac{3d}{2} + NQ_i$. Here, $NI_i$ and $NQ_i$ are independent zero-mean Gaussian random variables with variance $\sigma^2$ representing the noise. Note that we can expect about $\frac{3}{4}$-th of the samples to have at least one large coordinate. Now, consider that if we want to estimate the value of $d$ from the measurements, and want to use the average energy calculations, then $\sum_i (X_i^2+Y_i^2)$ is one possibility, but we are weighting equally the symbols with large means and the symbols with small means, and the noise component is a more significant part of the symbols with small means than it is of symbols with large means. It might be better to use a weighted sum to estimate $d$ (or $d^2$), and one extreme possibility is to give zero weight to interior points ($(X_i$ and $Y_i$ are both small) and to use only the large values of $X_i$ and $Y_i$ (edge and corner points) in the estimation. If the number of samples is large, this could be as simple as taking those (approximately) $3n/4$ samples in which either $X_i$ or $Y_i$ (possibly both) is large, and averaging the absolute values of the largest $X_i$ and $Y_i$ to get an estimate of $3d/2$.