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

Comparing 16PSK vs 16QAM for symbol error rate

by Krishna Sankar on March 29, 2008

In two previous posts, we have derived theoretical symbol error rate for 16-QAM and 16-PSK modulation schemes. The links are:

(a) Symbol error rate for 16-PSK

(b) Symbol error rate for 16-QAM

Given that we are transmitting the same number of constellation points in both 16-PSK and 16-QAM, let us try to understand the better modulation scheme among the two, i.e. to answer the following question:

For the same signal to noise ratio , will 16-PSK or 16-QAM give a lower symbol error rate?

Distance between the constellation points for 16-PSK

angle between constellation 16PSK

Figure: Distance between constellation points for 16-PSK modulation

As can be seen from the above figure, the distance between symbols and can be approximated as,
, where .

Distance between the constellation points for 16-QAM

16 QAM constellation

Figure: Distance between constellation points for 16-QAM modulation

As can be seen from the above figure, the distance between the constellation points for 16QAM modulation is,


Comparing both,

The distance between the constellation points fo 16QAM modulation is around 1.6x the value for 16PSK modulation. Expressing in dB’s, this comes to around .

More the distance between the constellation, lesser is the chance of a constellation point getting decoded incorrectly. This implies that for the same symbol error rate, 16QAM modulation requires only 4.19dB lesser signal to noise ratio , when compared with 16PSK modulation.

% Matlab/Octave code for comparing the symbol error rate for 16PSK and 16QAM modulation
M = 16;
Es_N0_dB = [0:25]; % multiple Es/N0 values
theorySer_16PSK = erfc(sqrt(10.^(Es_N0_dB/10))*sin(pi/M));
theorySer_16QAM = 3/2*erfc(sqrt(0.1*(10.^(Es_N0_dB/10))));
close all
hold on
axis([0 25 10^-5 1])
grid on
legend('theory-16PSK', 'theory-16QAM');
xlabel('Es/No, dB')
ylabel('Symbol Error Rate')
title('Symbol error probability curve for 16-PSK and 16-QAM modulation')

Symbol error rate for 16QAM and 16PSK modulation

Figure: Symbol Error Rate for 16PSK and 16QAM modulation

As can be observed, at a symbol error rate of , 16QAM requires only arond 19dB whereas 16PSK requires around 23dB of .

No wonder we find 16-QAM modulation instead of 16-PSK in typical specifications like IEEE-802.11a, IEEE802.16d etc. :)

Hope this helps.



D id you like this article? Make sure that you do not miss a new article by subscribing to RSS feed OR subscribing to e-mail newsletter. Note: Subscribing via e-mail entitles you to download the free e-Book on BER of BPSK/QPSK/16QAM/16PSK in AWGN.

{ 55 comments… read them below or add one }

oluseye November 8, 2012 at 8:25 am

Any one got the MATLAB code to simulate cooperative communication using R-S codes? Please I need it for my research.



Avatar of Krishna Sankar Krishna Sankar November 12, 2012 at 7:02 am

@oluseye:Reed Solomon code-decoding is one of the TODO’s. However, you can find some posts on Hamming decoder and Viterbi decoder at


dema June 16, 2012 at 8:17 pm

Hi i am working on 16 QAM transmitter using DSP my section is to simulate it using matlab i am not using existing function for modulate and demodulate i built it by myself and i use RRC in my code but what i really want to know is the relationship between distance (between adjacent symbols) and the energy per bit Eb please give me the equations please


Avatar of Krishna Sankar Krishna Sankar June 26, 2012 at 6:09 am

@dema: Given that each symbol carriers k = log2(M) bits, where M is the modulation size
Es/N0 = k*Eb/N0


SYED ABDULLAH ABBAS January 14, 2012 at 1:21 pm

@irshad. Contact me at mrniceshah@yahoo.com. and i will give you the code.


irshad January 9, 2012 at 6:02 pm

i need 8psk matlab code in Rayleigh channel.


Avatar of Krishna Sankar Krishna Sankar January 14, 2012 at 6:56 am

@irshad:I do not have any direct simulations handy, but I would assume it is simple for you to adapt
http://www.dsplog.com/2008/03/18/symbol-error-rate-for-16psk/ and


dedy August 2, 2012 at 2:05 pm

just change M=16 into M=8, correct me if i am wrong….


eca April 16, 2010 at 6:25 am

dear sir..
please help me,,
I am a EEPIS college student who was working on the final task of power control for rain attenuation … I’m confused with the usage for m-PSK tresshold what is the value of SNR tresshol for example 16 PSK, and from which the empirical calculation?


Avatar of Krishna Sankar Krishna Sankar April 18, 2010 at 2:19 pm

@eca: How do you set the threshold? Is it based on BER constraint?


R B Patil February 16, 2010 at 3:36 am

dear sir \
can you tell me ……………comparison 16QAM and 64 QAM with respect to bandwidth and power requirement


Avatar of Krishna Sankar Krishna Sankar April 4, 2010 at 3:54 am
waleed salos December 7, 2009 at 1:36 pm

Hi krishan sankar
I work Qouds university, please send me your simulation code for pre-fft and post fft at frequency selective fading and comparison pre fft and post fft
in ofdm .
thank a lot


Avatar of Krishna Sankar Krishna Sankar December 8, 2009 at 5:28 am

@waleed salos: Hopefully the post on BER for BPSK with OFDM in multipath channel might be of help


BusyWasp November 13, 2009 at 6:36 am

Hi Krishna,
I wanna thanku inadvance for great articles you’ve done and I wonder if you could compare the bit error probabilities of the 64-QAM nd a 64-PSK? Also, i’d be greatful if you have any matlab scripts for comparing.


Avatar of Krishna Sankar Krishna Sankar December 3, 2009 at 5:22 am

@BusyWasp: Please check the posts

I have discussed the M-QAM case, which you can adapt to 64-QAM.

The post and code in 16-PSK is also discussing M-PSK case.

Good luck.


ahmed November 9, 2009 at 8:21 pm

Hi Krishna, when use normalization the system performance get worst is that correct am using 16qam and 64qam


Avatar of Krishna Sankar Krishna Sankar November 13, 2009 at 5:24 am

@ahmed: Is it worse than the theoretically expected performance?


Rahul June 16, 2009 at 5:52 pm

Hi, i see that you have used a manual check for the recieved signal elements to deocde them to the nearest point in case of 16 QAM ser simulation.
But if i use the matlab QAMmod and QAM demod tool I am getting a different curve why?


Avatar of Krishna Sankar Krishna Sankar June 20, 2009 at 10:57 am

@Rahul: Since I do not use matlab for blogging, I do not have the functions QAMMOD and QAMDEMOD. However just one q which might help you debug:
1/ Are you getting a BER curve with a similar slope, but shifted to either right or left of the theoretical curve? Then it might be some normalization error.


Avatar of Krishna Sankar Krishna Sankar December 6, 2008 at 3:03 pm

The parameter called rate in coding (1/2, rate 3/4 etc) convey the level of redundancy added. For eg rate 1/2 means we send out 2 coded bits for every 1 data bit.

To answer the question on ’8psk vs 16qam’ – one need to check the average distance between the modulation schemes. Using the similar analysis as we did in 16psk vs 16qam post,
average distance in 16qam case is 2*sqrt(Es/10).
Average distance in 8psk is 2*sin(pi/8)*sqrt(Es).

We can see that 2*sin(pi/8)*sqrt(Es) > 2*sqrt(Es/10), hence 8psk provides better performance.

Hope this helps.


busybee December 5, 2008 at 3:57 pm

krishna can you please explain me the meaning of rate 1/2 ,rate 3/4 etc coders?Why BPSK is best?why 8psk better than 16 QAM?


Avatar of Krishna Sankar Krishna Sankar August 9, 2008 at 2:36 pm

If I understand your requirement correctly, you want to place your constellation points at arbitrary points. Am assuming that magnitude is 1. If you want to plot a constellation at 40degrees, the following simple matlab code snippet might be helpful.
x = exp(j*2*pi*40/360);
axis([-1 1 -1 1]); grid on;

And just to add, we cannot define a constellation point on the IQ plane by knowing the angle alone. We need both angle and magnitude and angle to define a point in the plane.


skhan August 9, 2008 at 2:45 am

hi i want to know that how can i get the magnitude of a signal if i only have got the angle of the signal for example i want to place my signal unevenly on a constellation plot : 1 signal point is at 22.5 degree and the other one is at 90 degrees i know it will reduce the BER but i just want to check the results ….how can i get the magnitude for such signal point for example i want to get the magnitude for a signal point of degree 22.5 or 40 degree


Ming Chan July 11, 2008 at 4:46 am

Your explanation help me to clear a lot of confusion. Thank you!
i sent another mail to your gmail address to discuss Rx SNR listed in 802.16e-2005. i hope i can get some help from you.


mohammad October 27, 2009 at 12:17 pm

Dear ming,

i work on IEEE802.16e,please send me your simulation cod for me .plz help me.pllllllllllllleaseeeeeeeeeeee….
tanx alot


Avatar of Krishna Sankar Krishna Sankar November 8, 2009 at 7:18 am

@mohammad: Sorry, I do not have simulation code for 802.16e. Good luck.


Avatar of Krishna Sankar Krishna Sankar July 4, 2008 at 7:57 am

@MingChan: Yes, you are right. The gain at 10^-5 BER point is around 3dB.
Thanks for pointing this out, and sorry for the error.


Ming Chan July 4, 2008 at 5:39 am

Thank you! i sent a e-mail to your mailbox. There are some questions i want to discuss with you. Is that OK?


Avatar of Krishna Sankar Krishna Sankar July 2, 2008 at 8:38 am

@Ming Chan:
#1 I meant coding gain need to be evaluated by Eb/No (and provided that formula for helping you to convert Es/No to Eb/No). Do you have Matlab? If yes, type bertool in the command line. It will open an a GUI. You may use that to compare. From a quick check, for BPSK modulation I can see around 1.5dB gain for 10^-5 BER point with rate 1/2 K=7 convolutional code.

#2: No, OFDM does not improve BER in AWGN channel. One may think of OFDM as upconversion of bits into subcarriers. And as you know, up/down conversion has no effect on BER. You may want to look at the post on BER for BPSK with OFDM modulation.


Ming Chan July 1, 2008 at 7:01 am

Another question is: does OFDM improve BER in AWGN channel?
sorry for so many questions. :)


Ming Chan July 1, 2008 at 6:54 am

forget to say : the code rate is 1/2 in my simulation. No puncture.


Ming Chan July 1, 2008 at 6:52 am

thank you for your reply. I do not consider the scaling issue in my simulation. Does that mean the coding gain should be evaluated by EsN0 but not EbN0?


Avatar of Krishna Sankar Krishna Sankar July 1, 2008 at 5:39 am

@husna: As far as I know, there is no tool which can take in .c code and churnout .m code. Manual conversion? :)


Avatar of Krishna Sankar Krishna Sankar July 1, 2008 at 5:37 am

@Ming Chan: I just did a quick check. Bit error rate for 16QAM (assuming Gray coded bit mapping) gives around 10^-6 BER near 14.dB of Eb/No. The gain from convolutional coding employed depends on the coding rate. I do not have the numbers. Further, kindly check to ensure that the scaling is proper.
For example for 16QAM with convoltional coding rate of m (1/2, 1/3 etc), each symbol carries 4*m bits. So, Es/No = 4*m*Eb/No.
Does this help?


husna June 30, 2008 at 3:46 pm

Hello ..
I try to make matlab code for Hybrid ARQ with Chase combining and Incremental redundancy in HSDPA but I face some difficulty
I download code cml from http://www.iterativesolutions.com
and there is file “CreateUmtsImterleaver.dll with C languange
how to make file in .m from that .c file?
thanx for answer


Ines October 15, 2009 at 12:32 pm

Hello Husna,
I m working on the evaluation of HARQ performance over CDMA . And I read you question , did you find anything interesseting? can You send me what you find or some matlab code that you wrote ??? I ‘ll be soooooooooo much gratefull , I need it so quich pleaseeeeeeeeeeeee


Syed Abdullah Abbas May 27, 2010 at 10:57 am

hi, u can consult me if u have problem with matlab coding,


Ming Chan June 30, 2008 at 11:45 am

This is very helpful.
i build two simulink models to watch the curve of BERvsEbN0 try to understand the benifit of convolutional code.
The first one is: Burnoulli bits —– 16QAM —— modulation —- AWGN —– demodulation. The parameter of 16QAM modulation module is: ‘normalizztion method’= average power and ‘average power’=1 watt. The parameter of the AWGN channel module is ‘Eb/N0′=14.55dB and ‘input signal power’=1 watt. The BER is about 1E-6.
Convolutional code and decode module is added to the second model. The same BER (1E-6) is achieved with Eb/N0=14.25dB.
So, The CC only gives 0.3dB coding gain! Is that value correct? Or something wrong with my simulation?


Avatar of Krishna Sankar Krishna Sankar May 29, 2008 at 11:41 am

@rajesh: Well, I would think that you are suggestion is also 16-QAM. The only difference being that the distance between the constellation is not 4 (instead of 2). One may visualize this as the classical 16-QAM with 6dB (20*log10(2)) more power. But, why would you do that?

Another thing to do is rotate this by some arbitrary phase. But, that would make the receiver more complex (she wont be able to decode I and Q arms as independent PAM modulations).

From you questions, I can guess that you are looking for more information (unfortunately, I am unable to figure out what you want). Are you looking for details on constellation design? [DIG-COMM-BARRY-LEE-MESSERSCHMITT] briefly discuss this. Maybe that will help.


rajesh May 29, 2008 at 11:19 am

The 16 distinct points which I have are not {+/-1+/-j, +/-3,+/-3j,+/-3,+/-1j,+/-1,+/-3j} . I do know that the above points form 16 qam. {+/-2+/-2j,+/-6,+/-6j,+/-6,+/-2j,+/-2,+/-6j} also form 16 qam.
My question is given some arbitrary 16 distinct constellation points , what property must they satisfy to form a square constellation.


Avatar of Krishna Sankar Krishna Sankar May 29, 2008 at 4:23 am

@rajesh: Well, for square QAM, you need to arrange them into {+/-1+/-j, +/-3,+/-3j,+/-3,+/-1j,+/-1,+/-3j} constellation points. Is that what you were looking for? OR
Were you looking for how to map the bits into constellation points?

If the question is latter, one good way is to do Gray mapping and ensure that adjacent constellation points are seperated only by one bit.

Does that help?


rajesh May 27, 2008 at 7:16 pm

excellent article. i have a query. i have 16 distinct constellation points. what properties should these points satisfy to form square 16 qam? kindly help me


Avatar of Krishna Sankar Krishna Sankar May 24, 2008 at 6:15 am

@sandeep: Yes, you are right. For modulation order M>=8, M-QAM requires a lower signal to noise than M-PSK for achieving the same error rate in AWGN channel alone.

I do not think that you were precise when you mentioned that VCO phase error is the reason 16QAM being better. Infact, as shown in the above post, 16QAM is better than 16PSK even in an enviroment with no RF impairments. Agree?

Btw, do I know you? Your name sounds familiar ;)


sandeep May 22, 2008 at 9:01 pm

Thanks for this article. Some where I read that normally we donot use M-PSK modulation with M more that 8. One reason being it puts higher constraints on VCO phase error requirements since for higher M, constellation points move nearer.


Avatar of Krishna Sankar Krishna Sankar April 8, 2008 at 5:32 am

sure, I can help you. However, I should add that I have not yet worked on HARQ and I would need some ramping up…


ananta April 14, 2009 at 9:48 am

i am finishing my college final project about COMPARING M-PSK and M-QAM in OFDM.
could you help me on matlab code for M-PSK code and M-QAM code.



Avatar of Krishna Sankar Krishna Sankar April 17, 2009 at 5:37 am

@ananta: Well, the code provided in symbol error rate analysis for 16-PSK scales well to handle the M-PSK case

For the M-QAM case, I have not published the code. However, you may find the equations discussed in

Hope this helps. Good luck for your project.


Ines October 15, 2009 at 12:48 pm

Please I need help I’m working on the evaluation of performance of HARQ over CDMA and I do face so many problems n matlab could you please help me !!!!


Avatar of Krishna Sankar Krishna Sankar October 17, 2009 at 4:05 am

@Ines: Though I have not tried modeling HARQ, you can ask queries. I will try answer to the best of my knowledge.


Ines October 17, 2009 at 10:54 pm

Thanks a lots Krishna , The problem is that I have to compre the HARQ throughput in therical and simulation models and When I simulate the two curves are differents. And you should have some knowldge with HARQ model. what should I do? It’s urgent :(


Avatar of Krishna Sankar Krishna Sankar October 27, 2009 at 5:08 am

Ines: Sorry, I have not tried modeling HARQ

IK October 29, 2009 at 10:37 pm

I am also working on HARQ, though using LDPC code. We can still perhaps discuss issues bcoz I am aware slightly of code combining.


Avatar of Krishna Sankar Krishna Sankar November 8, 2009 at 8:05 am

@IK: ok


sandanalakshmi April 7, 2008 at 3:16 pm

i am working om fast hsdpa for wimax, can you help me on matlab code for harq,IR,chase combining retransmissions.


Cancel reply

Leave a Comment

{ 1 trackback }

Previous post:

Next post: