Comparing BPSK, QPSK, 4PAM, 16QAM, 16PSK, 64QAM and 32PSK

I have written another article in This article can be treated as the third post in the series aimed at understanding Shannon’s capacity equation.

For the first two posts in the series are:

1. Understanding Shannon’s capacity equation

2. Bounds on Communication based on Shannon’s capacity

The article summarizes the symbol error rate derivations in AWGN for modulation schemes like BPSK, QPSK, 4PAM, 16QAM, 16PSK, 64QAM and 32PSK.

The article in details the following:

  • Based on the knowledge of bandwidth requirements for each type of modulation scheme, the capacity in bits/seconds/Hz is listed.
  • Using the knowledge that the symbol to noise ratio is times the bit to noise ratio , the symbol error rate vs curves are plotted.
  • Using symbol error rate versus plots, the required for achieving symbol error rate of is identified.
  • Upon having the capacity and requirement, the requirements for BPSK, QPSK, 4PAM, 16QAM, 16PSK, 64QAM and 32PSK are mapped on to the Shannon’s capacity vs Eb/No curve.
  • Assuming Gray coded modulation mapping, each symbol error causes one bit out of bits to be in error. So, the relation between symbol error and bit error is,.
  • Using this assumption, the Bit Error Rate (BER) for BPSK, QPSK, 4PAM, 16QAM, 16PSK, 64QAM and 32PSK are listed and the BER vs Eb/No curve plotted.

Hope this article serves as a nice overview of the various digital modulation schemes. Click here to read the full article in

112 thoughts on “Comparing BPSK, QPSK, 4PAM, 16QAM, 16PSK, 64QAM and 32PSK

  1. Hi Krishna,
    Can you give me a link to a MATLAB pgm which would help us estimate the IQ imbalance in the received OFDM signal.?

  2. Hi there,
    This looks like a really good article in DSPDesignLine, except that now it redirects to and although the text of the article is there, all the image links seem to be broken. Without the images containing the formulas, the article is now useless. Is there any way you can fix it?

  3. Hi Krishna,

    Given that the modulation type is either 16QAm or 16APSK, is there a formula to relate the SNR(Es/No) to the average constellation dispersion for each modulation type? How do we derive the relationship?


  4. Hare Krishna ! 🙂

    Thanks a lot for all the information you posted here, it was very useful for me.

  5. hi can you please help me with matlab code for area spectral efficiency in OFDMA or LTE. thanks

  6. will anybody help me to implement SLM technique of PAPR reduction in matlab?

    please do needfull if any one.

  7. Hi Krishna,

    Have you any work on 2×2 MIMO OFDM systems with rayleigh channel, for BPSK, QPSK, 8PSK and 16PSK?

    Much appreciated

  8. Hi,
    I just need some help relating to data rate and bandwidth. I have a fixed bandwidth of transmission of 25KHz. So i want to calculate the data rates in different types of modulation to determine which one i can use. Can you help me with some formula with which i could calculate this.. Or any other better approach?
    Thanks a lot

  9. sir i have to prepare a model and project on the comparison between BPSK and QPSK. can you please help me in making the model..or you can provide any information regarding this topic.

  10. I need mapping and demapping function commands in MATLAB code for OFDMA and SC-FDMA. will you please help me.

  11. Dear Krishna,

    I just want to first thank you for your posts especially us students from un developed countries. Your website has taught us a lot and we do not feel inferior.

    I was so bad at scripts but i picket interest and your work has greatly helped me. Thank you so much and May God bless you.

    I want to kindly ask you for the matlab/ octave script for simulating BER vs SNR per bit (Eb/No) for various digital modulation schemes(Comparing BPSK, QPSK, 4PAM, 16QAM, 16PSK, 64QAM and 32PSK).

    I was able to see your output from this website “” but i can not access the script.

    I also want to ask you if you have examples of matlab/octave scripts for Sum capacity Vs SNR of MIMO or MU-MIMO with correlated and uncorrelated channel to help with some of them.

    Otherwise am waiting to hear from you. Thank you

    I can not say enough thank you for your posts on If i were to give you a gift it would be ” to give you the ability to see yourself as others see you, then you could really see how special you are and how you have made a big difference in lives of many people”

  12. i face a problem of BER formula for math lab simulation which is

    BER=.5 erfc[sqrt(snr)/2]

    i need to analyze the performance of a short distance terrestrial OWC system as a function of wavelength.
    i need a help that BER formula is right or wrong.

  13. hi krishna …..
    hi sir …
    Can you help me about tutorials from the m-QAM (m = 4,8,16,32,64),
    about the theory, the calculation of bit error probability (BER) and the constellation of m-QAM..
    thanks before……

  14. Sir,

    can u give me the matlab code for the BER compersion of conventional BPSK, QPSK and 8PSK over an AWGN channel.


  15. hello sir ..
    i’m doing my final project..
    do you have matlab simulation for ber performance in ofdm system of various modulation technique in self cancellation in OFDM..
    please help me..

  16. sir,
    please can you tell me how should I assign 2 bits to symbols for 4-PAM . i.e how shall I program such that -3 has two bits , similarly -1, 1 and 3??If you have a code, kindly is it possible to provide it?

  17. sir, pls do help wid our prjct..can u plsssssss send me the matlab alamouti STBC code for QPSK modulation in rayleigh fading channel?????

  18. Total probability of symbol error of the following Modulation technique:
    (with matlab coding).

    Please,reply me as soon as possible.

  19. hi every one ineed your hellp in how to make symbol mapping function
    or how to make bit mapping simmulation in mate lab.
    with my thanksssss

  20. hello,can i know what is actually relation between baud and bandwidth?and is that baud rate in QPSK=(bit rate/4)?or same with bandwidth like others such as ASK,BPSK,FSKn and how about QAM?is that same as QPSK or what?..please help me

    1. @batman: If the symbol duration is T, the minimum bandwidth required (with sinc shaped pulse shaping) is 1/T (from -1/2T to 1/2T). With higher order modulations, for the same data rate, we can have longer symbol durations there by reducing the bandwidth. Please lookinto the section Bandwidth requirements and Capacity in the article in;jsessionid=BWJIYHNJDMGCPQE1GHOSKH4ATMY32JVN?pgno=2

  21. hi, i need some help please

    i have simulated a qpsk tx and rx system. i got the BER curve perfectly. my next task was to have the qpsk signal pass thru an FIR filter. I did that as welland as expected the signal underwent distortion.

    now i have been asked to the following task,

    1. i should generate h(n), which is the impulse response. i have to generate 6 coefficients. i know to do that but i’m asked to generate them with variances of 1, 1/2, 1/3, 1/4, 1/5, 1/6.
    i should also be normalised such that summation Hi square = 1.

    2. i have to then convolute it with the input signal x(n).

    3. then for every 500 samples i have to change the coefficients, should do this 30 times.

    4. finally from the h(n) coefficients i should try and get bak the original signal.

    coul some1 plz plz plz help with the following tasks listed above.. i would be greatful.

    thank you.


  22. I am trying to simulate a rayleigh fading channel using the following code, i am not getting the desired resultls, where am i going wrong?

    bit_error_rate=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
    for q=1:no
    %%% data generation
    data_get =data_gen(rate_id);
    %%% data randomization
    %%convolution encoder
    %%% Digital modulator SYMBOL MAPPER
    %%% IFFT modulator

    SNR=[1 2 3 5 7 9 10 12 15 17 20 22 25 27 30]; % specify SNR
    for p=1:1:15
    tau=[0 0.4e-6 0.9e-6];
    pdb=[0 -5 -10];
    %%% channel
    %%% FFT demodulator
    %%% Digital demodulator SYMBOL DEMEPPER
    % %%% FEC DECODER
    %% convolution decoder
    %%% RSdecoder
    data_rsdecoded=rsencodecod(data_decoded,rate_id,01); % removing added tail bits
    %%% Data Derandomizer

  23. Hi krishna,

    I came across this site very late.
    I am looking for ofdm transmission through SUI,Cost207,exponential channel models, i need matlab code, plzzzz help me it require for my project i need to submit with in 2days, how can i know the performance of these channaels.plzzzz help me i am waiting for you reply.

  24. Hello Krishna,

    Can you tell me how I can use BER to plot capacity curves for OFDM and MC-CDMA?

    Any hint

  25. hi sir…………..
    hi krishna………
    what is pi/4 qpsk???

    are u have tutorial pi/4 qpsk??
    can u explain defferent qpsk n pi/4 qpsk?

    thanks before……………

  26. hi
    i want information about hybrid modulation “OFDM-OOK”
    please if possible take refrence about this in your weblog

  27. hi,
    i hope you are fine.please could you give me theoretical equaion of Bit Error Rate for convolutioanly coded BPSK,QOSk,16QAM,64 QAM and simulation of Adaptive modulation of BPSK,QPSK,16QAM,64QAM?

  28. Hello,

    in my lecture I learned that the relation between S/N and Eb/N0 is:
    S/N = Eb/N0 * m

    m: Number of bits/Symbol

    Now I found the formula for the relation between Es/N0 and Eb/N0:
    Es/N0 = Eb/N0 * m

    because there are m bits/Symbol.

    That would mean that
    S/N = Es/N0.

    In another pdf I found:
    C/N = S/N = Eb/N0 * Rb/B
    Es/N0 = Eb/N0 * Rb/B
    Es = Eb * Rb/B
    m * Eb = Eb * Rb/B
    m = Rb/B

    that makes sense for me.

    But: In all books, B = B_baseband = f3dB of the lowpass in baseband. In my lecture, B is B_RF = 2 * B_baseband.

    I need clearly the relation between S/N and Eb/N0 to calculate S/N_min for a 802.11a receiver with the given PER_max = 10% (=> BER= 1,32E-5).

    Can someone please confirm my calculations or show me the errors?
    Thank you very much!


  29. Hi Krishna

    Compliments of the season, actually i have made a request to you last time and you granted the request by given me the link to which my concerns where addressed. Sincerelly speeking all your your work are very lovely, and very educative, infact i would like to work with people like you, because you have been very helpful. I want to “develop a model in my dissertation for variable noise channel and simulate results for bit error rate (BER)”i will need your assisitance on how i can do that. then below are some of the terms you have used in your simulations, pls i will need an explanation for each one of them, what they mean. Am very gratefull.

    ipBit =

    ipMod =

    xF =

    xt =

    nt =

    yt =

    yF =

    yMod =

    ipModHat =

    ipBitHat =

    Concatenating =

    Thanks Very much


  30. Sir, Iam working on OFDM simulation for Optical domain. I want to know the parpameter Calculation for OFDM, i.e Frequency Offset calculation , phase noise error , Derving different parameter from the IEEE standards

  31. Hi,Krishna Sankar;
    How are you!I hope you are doing fine and in good health.
    I write a code for phase noise simulation in Butter ,cheby1,cheby2,and ellip fillter.But the programe run also error.Please give me help!Thanks a lot.

    [Bb,Ab] = butter(4,0.5); % order 4, cutoff at 0.5 * pi

    [Bc1,Ac1] = cheby1(4,1,0.5); % 1 dB passband ripple

    [Bc2,Ac2] = cheby2(4,20,0.5); % 20 dB stopband attenuation

    [Be,Ae] = ellip(4,1,20,0.5); % like cheby1 + cheby2

    figure(1); plot(w,abs([Hb,Hc1,Hc2,He])); grid(‘on’);
    xlabel(‘Frequency (rad/sample)’); ylabel(‘Gain’);

    figure(2); plot(w,[Db,Dc1,Dc2,De]); grid(‘on’);
    xlabel(‘Frequency (rad/sample)’); ylabel(‘Delay (samples)’);

  32. Hi krishna!
    I hope you are doing fine and in good health.
    I am working on an OFDMA system. I want to write equation for channel capacity for each user. I have the equations for the ICI but I dont know how to write the capacity equations…
    C(k) = Summation [ log2(1+SNR(v))] in bits/OFDM-Sym.
    where k = user index
    v = subcarrier allocated to a user
    I know this equation which is the theoretical channel capacity of each user. But I want to write the actual channel capacity. As I said I have the ICI equations …. kindly help how to proceed.

    1. @W.Y: For the post on BER for BPSK modulation, we know the Eb/No required for achieving an arbitrarily low BER of 10^-5.
      Further, since we know the bandwidth required by BPSK, we know the capacity in bits/second/Hz is 1.
      Knowing both these values, we can plot where BPSK lies in Shanon’s Eb/No vs capacity curve.
      Please refer to the following posts:

      Hope this helps.

  33. Hi,
    I got prob of error formulas for QPSK as follows,
    1) From std result: Pe=erfc(sqrt(Es/2N0))
    2)Pe= erfc(sqrt (1.5*snr/M-1))
    I am not able to relate all thes three.
    Can you help me.

    1. @Ranjan: Let me try:
      For QPSK, M = 4, so erfc(sqrt (1.5*snr/3)) = erfc(sqrt (snr/2)) = erfc(sqrt(Es/2N0)). So (1) and (2) are the same.
      Since Q(x)=0.5*erfc(x/sqrt(2)), dmin = sqrt(2); then 4Q(dmin/2*sigma) = 2erfc(1/(sqrt(2)*sigma) = 2erfc(sqrt(1/(2*sigma^2))).
      If we assume that variance of signal is 1, and the variance of noise = sigma^2, then 1/sigma^2 = Es/N0 = SNR

      The function (3) seems close to (1), (2) except for the scaling of 2. Are you sure that QPSK error rate is 4Q(dmin/2*sigma) and not 2Q(dmin/2*sigma)?

      Does this help?

  34. hello all. i found a code which modulates QPSK but i couldn’t demodulate it back . please help. here is the code
    clear all
    b= sign(randn(1,N));
    if c ~= 0
    b=[b 1];
    qcar=[];icar=[]; %initialize in-phase and quadrature carriers
    ic=[];qc=[]; %initialize in-phase and quadrature components;
    for n=1:2:len
    if b(n)==-1 & b(n+1)==-1;
    elseif b(n)==-1 & b(n+1)==1;
    elseif b(n)==1 & b(n+1)==-1;
    elseif b(n)==1 & b(n+1)==1;
    ic=[ic temp];
    qc=[qc temp1];
    icar=[icar i];
    qcar=[qcar q];

  35. sir i am working on hiperlan/2 using BPSK,QPSK and 16QAM modulation technique and ofdm multiplexing so plz help me to solve the prob for delay and Rician and Rayleigh channel

  36. Hi

    i need information or matlab code for filter to reduce or to compensate fading.
    I need to put this code for nakagami channel……


  37. Hi,

    I wonder if you know anything about BER for OOK.
    either the figure or the theoretical function is enough for me.


  38. Hi,
    please, comment faire pour ploter la constullation 16-qam dans matlab avec des équations mathématique du signal de sortie de modulateur.

  39. Hi all,

    please, how can we plot Shannon’s curve against Eb/No for various rates ?? I mean simlate them ??

    Many thanks

  40. hi

    kindly send me the complete derivation expression for the probability of a bit error of 4-QAM in terms of Eb n No

    also the gray maping constellation of 4 QAM


    1. @Adeela: You may refer to the posts for discussion on Symbol Error rate (Ps) versus symbol to noise ratio (Es/N0).
      To convert to Pb versus Eb/N0, please make the following assumptions:
      Since each constellation symbol carriers two bits, Eb/N0 = 1/2*Es/N0
      Further if we assume Gray coded constellation, each symbol error typicallly causes 1 out of 2 bits to be in error
      Pb ~= Ps/2.

      Hope this helps.

  41. hi cold you please help me how can i get the code for this
    The objective here is to compare VBLAST and Alamouti STBC in the context of MIMO-OFDM operating over frequency-selective Rayleigh fading channels. Consider a 2×2 system with N=64 carriers and a cyclic prefix long enough to avoid interblock interference. QPSK is used in STBC and BPSK is used in V-BLAST in order to have the same spectral efficiency. The discrete-time channels are assumed to be mutually uncorrelated and have L taps each. The taps are uncorrelated and obey an exponential power delay profile, i.e. E{|hk|2} = C.exp(- k) where C is a constant; take =0.2. It is assumed that the channel does not vary over two OFDM symbols. Assuming perfect knowledge of the channels at the receiver, provide simulations results depicting the average BERs for the two systems versus the average SNR in the cases where L=1, L=4, L=8, and L=16. Comment on the obtained results.
    as soon as you can

  42. 1-Why did we map the uniform random integers onto the complex symbols in 64 QAM simulations?
    2-Why does increased transmitted power decrease the error rate of the system ?

    3-How does this equation D(r^t,sm)=abs(r^t-sm)^2 become optimum detector ?

    1. @NOOR: My replies:
      1. The transmit data might be coming from some higher layer, which we assume to be random. So we use rand() function to define random bits, group them and assign to constellation points.
      2. The effect of noise becomes smaller as we increase the transmit power
      3. I believe you wrote the equation of Maximum likelihood, correct?

  43. Hi,

    QPSK has – 4 constellation points; 16 QAM -16 constellation points; 64 – 64 constellation points.

    16QAM vs QPSK -> Now with the 16 possible points in the constellation diagram we have 16 possible symbols. For this 16 symbols we need 4 bits for coding . Compared to the QPSK modulation now we have doubled the transfer rate when using the same symbol clock.But compared to the QPSK, points are closer to each other and so the allowed noise circle radius is decreased. Noise can be interpreted as a vector which turns around the points of the constellation diagram producing a circle with a noise amplitude dependend radius. If we have normalized constellation (i.e. max distance is 1 – i.e. distance between two outer edges of circle of outer constellation points), then:
    required distance QAM16 -> 1/(SQRT(QAM res.)) = 1/SQRT(16) = 0.25
    required distance QPSK -> 1/(SQRT(QPSK res.)) = 1/SQRT(4) = 0.5
    So we get a ratio of QPSK/QAM distance required to get no overlap of the points of: 20 * log(o.5/0.25) = 6dB.
    So to have the same S/N ratio with the same noise level the signal for 16QAM has to be 6 dB stronger than QPSK. The same case is between 64QAM and 16 QAM(6db difference), 256QAM and 64QAM(6db difference) ….
    We see that with each bit we add to the symbol rate we need a 3 dB better S/N of the received signal. So we see the tradeoff we have to do between the increasing transfer rate and the required S/N ratio.
    Of course another way to increase the transfer rate is a higher symbol clock with the same symbol width.
    (PS All this I found in AN97047.pdf

    But, I saw also formula(in MATLAB help) Es/No = Eb/No + 10log10(k); where k is the number of information bits per symbol.
    By this formula we get:
    QPSK: Es/No = Eb/No + 10log10(2)=Eb/No + 3.0103;
    16QAM: Es/No = Eb/No + 10log10(4)=Eb/No + 6.0206;
    64QAM: Es/No = Eb/No + 10log10(6)=Eb/No + 7.7815;

    For BER of 10e-5, we get for QPSK that required Eb/No is about 9.5 dB, for 16QAM is about 13dB, for 64QAM is about 17,5dB…(I get this by MATLAB bertool). So we now have:
    QPSK: Es/No = Eb/No + 10log10(2)=9.5 + 3.0103 ~ 12.5 dB;
    16QAM: Es/No = Eb/No + 10log10(4)=13 + 6.0206 ~ 20 dB;
    64QAM: Es/No = Eb/No + 10log10(6)=17.5 + 7.7815 ~ 26.2 dB;

    So as You see the difference between 12.5 and 20 is not 6dB, in case QPSK vs 16QAM!

    (PS: I think that this is a very important line: “So to have the same S/N ratio with the same noise level the signal for 16QAM has to be 6 dB stronger than QPSK.” – in AN97047.pdf)

    So what is correct? Is this the same thing I try to correlate or…
    If so, why is that?

    Thanks and best regards

    1. @Melinda: For sure, that was a long comment. 🙂
      If I may summarize, the jist of the questions is: Should the difference between QPSK and 16-QAM be 6dB (as claimed in NXP paper) OR around 7.5dB (as seen from Mathworks simulations).

      To do the comparison, may I suggest using the average distance approach. The average distance between
      constellation points in
      (a) QPSK is 2/sqrt(2)
      (b) 16-QAM is 2/sqrt(10)
      For details on why the term 1/sqrt(2) and 1/sqrt(10) are present, please refer to the post on scaling factor in QAM

      It is reasonable to guess that as average distance reduces, the error rate increases. Doing a relative comparison,
      diff in dB = 20*log10((2/sqrt(2))/(2/sqrt(10) )) = 7dB. This means that, for achieving the same symbol error rate, 16-QAM requires 7dB more Es/No than QPSK.
      And this what I observed, when I performed simulations comparing all modulation schemes. Click here for the article in

      Hope this helps.

  44. Hi Krishna,

    What is the exact formula for BER QPSK (Theoretical). I saw that you have SER for QPSK which i think differ from BER right?

  45. @krishna kant: It is a bit difficult to comment based on your given observation. From the Chapter 8 of Digitial Communication Proakis, I can see that k=7 should have the lowest BER for a given Eb/No, then k = 5 and worst ber is for k=3.

    Maybe you can have a look at the figures in the text book and compare your curves against the text book curves.

    All the best.

  46. hello sir,i have a case where i encode a message with convolutional coder and puncture it , map it to 16 qam and in the receiver- demodulate it using hard decisions , depuncture and perform viterbi decoding. this was done with constraint lengths k=3,5,7 and corresponding generator polynomials (5,7) ; (23,35) and (171,133).i plotted the BER vs SNR curves (with SNR considered from 2 to 12).The performance of the configuration had improved as k increased. why is it so? plase reply sor

    1. hi krishna
      i wana matlab code for adaptive modulation using BPSK,QPSK and QAM.also need the plot of spectral efficiency vs SNR for adaptive modulation.

        1. hello Krishna, i want a matlab code that simulates the BER of 4×1 Extended Alamouti Space Time Block Coding (EASTBC), with ZF and ML recievers, the channel is rayleigh .. thanks alot and waiting for your reply.


  47. hello! Krishina how are you today? i would like you to ask a help concerning 64-QAM modulation technique. i was doing a matlab simulation for 64-QAM OFDM but i didn’t get the exact output, do you have a matlab script which is used to simulate performance(BER Vs SNR) of 64-QAM modulation technique. hope u will send it to me this afternoon.
    Thank you inadvance

Leave a Reply

Your email address will not be published. Required fields are marked *