***22

Scaling factor in QAM

When QAM (Quadrature Amplitude Modulation) is used, typically one may find a scaling factor associated with the constellation mapping operation. It may be reasonably obvious that this scaling factor is for normalizing the average energy to one.

This post attempts to compute the average energy of the 16-QAM, 64-QAM and M-QAM constellation (where is a power of 2), thanks to the nice example 5.16 in [DIG-COMM-BARRY-LEE-MESSERSCHMITT].

Consider a typical 16-QAM modulation scheme where the alphabets

are used.

16_qam_constellation

Figure: 16QAM constellation mapping

Observations:

1. The number/type of the used constellation points in all the four quadrants are similar. Hence average energy computed over one quadrant is same as the energy over all the quadrants. The mean power can be computed over 16/4 = 4 constellation points.

2. The same alphabet set is used for real and imaginary axis. Hence energy of real and imaginary components are the same.

3. In each quadrant, the elements of each alphabet is used times by real and imaginary part respectively.

Considering so the average energy of 16-QAM is,

.

Hence the constellation points of 16-QAM are normalized with the factor to ensure that the average energy over all symbols is one.

Consider a 64-QAM modulation scheme with the alphabets

.

64_qam_constellation

Figure: 64QAM constellation mapping

Observations for 64-QAM:

1. Each quadrant has 16 constellation points

2. The energy of real and imaginary components are the same.

3. In each quadrant, the elements of each alphabet is used times by real and imaginary part respectively.

Hence the constellation points of 64-QAM are normalized with the factor to ensure that the average energy over all symbols is one.

Extending this to a general M-QAM constellation mapping, where is a power of 2. The elements of the alphabet are

, where .

1. Each quadrant has constellation points

2. The energy of real and imaginary components are the same.

3. In each quadrant, the elements of each alphabet is used times by real and imaginary part respectively.

.

% Simple Matlab example

% QAM scaling factor
clear
clc
alpha_16qam = [-3 -1 1 3];
N = 10^5;
const_16qam = randsrc(1,N,alpha_16qam) + j*randsrc(1,N,alpha_16qam); % generating 16-QAM constellation points
energy_16qam = const_16qam*const_16qam’/N

alpha_64qam = [-7 -5 -3 -1 1 3 5 7];
const_64qam = randsrc(1,N,alpha_64qam) + j*randsrc(1,N,alpha_64qam); % generating 16-QAM constellation points
energy_64qam = const_64qam*const_64qam’/N

Can observe that energy_16qam and energy_64qam takes values close to 10 and 42 respectively.

Hope this helps.

Krishna

Reference

[DIG-COMM-BARRY-LEE-MESSERSCHMITT] Digital Communication: Third Edition, by John R. Barry, Edward A. Lee, David G. Messerschmitt

Please click here to SUBSCRIBE to newsletter and download the FREE e-Book on probability of error in AWGN. Thanks for visiting! Happy learning.

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

If you liked this post, you may leave a comment below, or subscribe to the RSS feed.

You may also find these posts relevant...
  • Using CORDIC for phase and magnitude computation
  • Example of Cascaded Integrator Comb filter in Matlab
  • Symbol Error Rate (SER) for QPSK (4-QAM) modulation
  • Polyphase filters for interpolation
  • Symbol Error Rate (SER) for 16-QAM
  • Comments

    Hi, Krishna
    The explanation for QAM and 16-QAM are very useful, what about QPSK isit the same as the above? if not how would be.
    Thanks

    @shareef:
    Yes, the equation 2/3*(M-1) can be used for QPSK (which an be considered as a simple 4-QAM).
    Then the energy of constellation comes to 2. Hence the scaling factor is 1/sqrt(2).
    ~krishna

    If I am using the modulator/demodulator object in MATLAB does it normalize the output signal so that it has unit energy?

    @ali:
    well, i looked at pammod() and qammod(). Seems it does not do the normalization. You either need to normalize manually (as we know the number apriori) OR you can use the function modnorm()

    Maybe the script which is extracted from ‘help modnorm’ is useful.

    M = 4; % M-ary number.
    const = pammod([0:M-1],M); % Generate a constellation.
    s = randint(1,100,[0 M-1]); % Random signal
    Scale = modnorm(const,’avpow’,1); % Compute scale factor for an
    % average power of 1 watt.
    Tx = Scale * pammod(s,M); % Modulate and scale.
    Average_Pow = mean(abs(Tx).^2) % Compute the average power.

    Tx = Tx/Scale; % Unscale
    Rx = pamdemod(Tx,M); % Demodulate.

    isequal(s,Rx)

    Please revert, if facing problems in understanding the code.

    Thank you so much Krishna!

    Hi, I think this is the first time i have understood why we require to multiply a scaling factor to our signal.Cheers for that.
    I would request you to please eloborate a bit as to why we require to normallize the power in a channel as well. say if a channel is 6 taps (complex) than we are require to multiply it with 1/sqrt(6). or i can put my question in more general term and ask why we want that equivalent taps in all channels have equal power.
    Regards,
    umar

    @umar:
    Typically, we will be using the channel model to find out the packet error rate for each value of SNR. The normalizing factor in the channel model ensures that the resultant average SNR after passing through the channel is same as the defined SNR. Makes sense?

    Thanks for that example, I have been searching the web a long time to find something about constellation scaling.

    Concerning the formula for E_MQAM I believe there is a small typo. It should be 2/3*(M-1) instead of 2/3*M-1. I think you even said that in one of the later comments.

    How would you go about constellations of sizes where sqrt(M) is not a power of 2? Is there an easy way to derive a formula for that?

    @Guenter: Indeed, you are correct. There was a typo and it should have read 2/3*(M-1). I corrected the same.

    For the rectangular constellation (where sqrt(M) is not a power of 2), I do not recall reading a simple formula in the literature. One way might be to find the power of the square constellation present in the structure and then add the power from the remaining constellation points.

    Anyhow, let me have a look.

    Hi Krishna,

    Following on from you last comment on this page, did you manage to find normalizing factor for rectangular constellations such as 8QAM, 32QAM?

    thanks. I am learning so much from your contributions!

    @Tahmid: Sorry, I did not look at the non-square constellation normalization. I hope to revert with in couple of days.

    Leave a comment

    (required)

    (required)