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.

  • $\begingroup$ Is this signal riding on a carrier? If so, you could normalize to the carrier power. $\endgroup$
    – Jacob
    Apr 3, 2013 at 20:21
  • $\begingroup$ @Jacob, No this is baseband signal. But if it's passband, how do I normalize to the carrier power? $\endgroup$
    – LWZ
    Apr 3, 2013 at 20:42
  • 4
    $\begingroup$ 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. $\endgroup$ Apr 3, 2013 at 23:28
  • $\begingroup$ @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). $\endgroup$
    – LWZ
    Apr 4, 2013 at 1:18
  • 2
    $\begingroup$ @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. $\endgroup$
    – Jason R
    Apr 4, 2013 at 13:10

2 Answers 2


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$.

Once upon a time, when analog circuits were in use, these kinds of calculations would have been difficult to implement in hardware, and this effect carries over into some present-day implementations that faithfully follow the methods of the past that were originally devised because of hardware limitations. But these days, with digital computation being ubiquitous, perhaps something new can be attempted.


If your signal is not rotating and/or sliding, then make a histogram of magnitudes. The peaks on histogram will clearly tell where are the constellation points.

If the signal is rotating and/or sliding, then your only option is rms value with sufficient averaging.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.