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

Symbol Error rate for QAM (16, 64, 256,.., M-QAM)

by Krishna Sankar on January 1, 2012

In May 2008, we derived the theoretical symbol error rate for a general M-QAM modulation (in  Embedded.comDSPDesignLine.com and dsplog.com) under Additive White Gaussian Noise. While re-reading that post, felt that the article is nice and warrants a re-run, using OFDM as the underlying physical layer. This post discuss the derivation of symbol error rate for a general M-QAM modulation. The companion Matlab script compares the theoretical and the simulated symbol error rate for 16QAM, 64QAM and 256QAM over OFDM in AWGN channel.

Enjoy and HAPPY NEW YEAR 2012 !!!

Quadrature Amplitude Modulation (QAM) schemes like 16-QAM, 64-QAM are used in typical wireless digital communications specifications like IEEE802.11aIEEE802.16d. In this post let us derive the equation for probability of symbol being in error for a general M-QAM constellation, given that the signal (symbol) to noise ratio is  .

The general M-QAM constellation

The number of points in the constellation is defined as,  where  is the number of bits in each constellation symbol. In this analysis, it is desirable to restrict  to be an even number for the following reasons (Refer Sec 5.2.2 in [DIG-COMM-BARRY-LEE-MESSERSCHMITT]):

1. Half the bits are represented on the real axis and half the bits are represented on imaginary axis. The in-phase and quadrature signals are independent  level Pulse Amplitude Modulation (PAM) signals. This simplifies the design of mapper.

2. For decoding, symbol decisions may be applied independently on the real and imaginary axis, simplifying the receiver implementation.

Note that the above square constellation is not the most optimal scheme for a given signal to noise ratio.

Average energy of an M-QAM constellation

In a general M-QAM constellation where  and  the number of bits in each constellation is even, the alphabets used are:

, where .

For example, considering a 64-QAM () constellation,

 and the alphabets are

.

For computing the average energy of the M-QAM constellation, let us proceed as follows:

(a) Find the sum of energy of the individual alphabets

(b) Each alphabet is used  times in the M-QAM constellation.

(c) So, to find the average energy from  constellation symbols, divide the product of (a) and (b) by.The average energy is,

.

Plugging in the number for 64-QAM,
.

Plugging in the number for 16-QAM,
.

From the above explanations, it is reasonably intuitive to guess that the scaling factor of  which is seen along with 16-QAM, 64-QAM constellations respectively is for normalizing the average transmit power to unity.

Finding the symbol error rate

For computing the symbol error rate for an M-QAM modulation, let us consider the 64-QAM constellation as shown in the figure below and extend it to the M-QAM case.

IQ constellation for 64QAM modulation

Figure: Constellation plot for 64-QAM modulation (without the scaling factor of )

As can be seen from the above figure, there are three types of constellation points in a general M-QAM constellation:

(a) Constellation points in the corner (red-square)
The number of constellation points in the corner in any M-QAM constellation is always 4, i.e

(b) Constellation points in the inside (magneta-diamond)
The number of constellation points in the inside is,

.
For example with M=64, there are 36 constellation points in the inside.

(c) Constellation points neither at the corner, nor at the center (blue-star) The number of constellation points of this category is,
.

For example with M=64, there are 24 constellation points in the inside.

Additive White Gaussian Noise (AWGN) channel 

Let the received symbol is,

, where

 is the energy,
 is the normalizing factor,

 is the transmit symbol and
 is the noise.

Assume that the additive noise  follows the Gaussian probability distribution function,

 with

mean  and

variance .


Symbol in the inside  (magenta-diamond)

The conditional probability distribution function (PDF) of given that the transmitted symbol is  :

.

As can be seen from the above figure, the symbol in the inside is decoded correctly only if real part of   lies inbetween 0 to 2 and the imaginary part of   lies inbetween 0 to 2. The probability of correct demodulation is,

.

The probability of the real component falling with in 0 to 2 can be found by integrating the probability distribution function of two parts:

(a) Find the probability that the real component lies from  to .

(b) Find the probability that the real component lies from  to .

(c) Given that the total probability is always 1, for finding the probability of the real component lies within  to , subtract the sum of (a) and (b) from 1.

Note: The complementary error function, .

Similarly,

.

From the above equations,

.

The probability of the symbol decoded being in error is,

.

Symbol in the corner  (red-square)

The conditional probability distribution function (PDF) of given that the transmitted symbol is  :

.

As can be seen from the above figure, the symbol in the inside is decoded correctly only if real part of   lies from  to  and the imaginary part of   lies from  to .

.

For finding the probability that the real component lies from  to , one can integrate the probability distribution function of the received symbol.

Similarly,

.

So, probability that the decoded symbol is correct given is transmitted is,

.

Now, the probability of the symbol decoded being in error is,

.

Symbol neither at the corner nor inside  (blue-star)

As can be seen from the above figure, the symbol in the inside is decoded correctly only if real part of   lies from  to  and the imaginary part of   lies from 0 to 2.

.

For finding the probability that the real component lies from  to , one can integrate the probability distribution function of the received symbol.

.

As described for the symbol in the inside scenario, the probability of the imaginary component falling with in 0 to 2 can be found by integrating the probability distribution function of two parts:

(a) Find the probability that the imaginary component lies from  to .

(b) Find the probability that the imaginary component lies from  to .

(c) As the total probability is 1, for finding the probability of the imaginary component lies within  to , subtract the sum of (a) and (b) from 1.

So the probability that the symbol is decoded correctly is,

The probability of error is,

.

Total symbol error probability

Given that we have computed the individual symbol error probability for each of the three types of constellation points, to find the joint symbol error rate we compute the average error i.e.

Pluging in the equations,
.

OFDM modulation

Let us use the OFDM system loosely based on IEEE 802.11a specifications.

Parameter Value
FFT size. nFFT 64
Number of used subcarriers. nDSC 52
FFT Sampling frequency 20MHz
Subcarrier spacing 312.5kHz
Used subcarrier index {-26 to -1, +1 to +26}
Cylcic prefix duration, Tcp 0.8us
Data symbol duration, Td 3.2us
Total Symbol duration, Ts 4us

Simulation model

Simple Matlab/Octave script for computing the symbol error rate for  16QAM/64QAM and 256QAM modulation scheme in additive white gaussian noise channel over OFDM.

Click here to download : Matlab code for computing symbol error rate for 16QAM/64QAM and 256QAM in AWGN over OFDM

References

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

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.

{ 49 comments… read them below or add one }

OLA November 19, 2014 at 10:27 am

hello could you please tell me if it possible code of SISO for both theoretical and simulation

Reply

kamalam September 6, 2014 at 6:32 pm

Hi sir.Can you explain me how to modify this code with qam modulation in rayleigh channel provided with all parameters such as doppler shift, average path gain etc.

Reply

harpreet April 20, 2014 at 2:14 pm

sir code cant be downloaded in same format ..plus it seems its not complete.

Reply

krishna July 14, 2013 at 2:39 pm

sir,
i want to know that what are basic(major) differences between orthogonal STBC and quasi orthogonal STBC while writting matlab code .

Reply

Krishna Sankar July 15, 2013 at 6:35 am

@krishna: sorry, what not familiar with quasi-orthogonal stbc code

Reply

anjali February 21, 2013 at 1:54 pm

sir plz help me..I need a code for SNR VS BER of different modulation scheme with code rate 1/2 and 3/4.how can i change the code rate.?

Reply

Krishna Sankar February 22, 2013 at 3:08 am

@anjali: which coding scheme are you using – convolutional coding?

Reply

anjali January 28, 2013 at 10:23 am

How can we change the code rate in BER vs SNR simulation?

Reply

Krishna Sankar February 1, 2013 at 5:33 am

@anjali: typically, one will have a header field indicating the rate of the transmission

Reply

Jeremiah December 21, 2012 at 6:36 am

Hi Krishna,

I am trying to simulate SNR of 16-QAM (under Rayleigh fading channel). Any advices on how should I work on as I faced difficulty to generate the matlab.

Regards,

Reply

Krishna Sankar December 25, 2012 at 5:45 am

@Jeremiah: That should be relatively easy to code up. The example with BPSK + Rayleigh channel might be of help.
http://www.dsplog.com/2008/08/10/ber-bpsk-rayleigh-channel/

Reply

thang December 13, 2012 at 6:59 am

Thanks Krishna Sankar.

Reply

riccardo September 29, 2012 at 7:29 pm

Hi,
could you please tell me if it possible and why when in a OFDM code with this parameters:
k = sqrt(1/10) scaling factor
5 tap long channel
zf and mmse 1 tap equalizer
EbN0dB = [0:36]
EsN0dB = EbN0dB + 10*log10(nDSC/nIFFT) + 10*log10(nIFFT/(nIFFT+CP))
using (16QAM)
The MMSE BER curve is actually higher than the ZF BER curve if I use 16 QAM, but when I use in the same program QPSK I get the normal result (MMSE better than ZF)???

I used all the scaling factor that i found in your posts on ofdm and 16QAM and I added to the received signal the noise as 10^(-EsN0dB(ii)/20)*n.
When I perform MMSE I use
C= (1./(conj(hF).*hF+10^(-EsN0dB(ii)/20))).*conj(hF);
y_mse = yF.*C;

The modulation and demodulation is done by
Mod = modem.qammod(‘M’, 16, ‘PhaseOffset’,0,’SymbolOrder’,'gray’,'InputType’,'bit’);
Dem = modem.qamdemod(Mod);
using modulate and demodulate command.

I tried to use one tap channel but I get the same result so I think is not becuse I should use some taps at the equalizer.What I mean is that with 16QAM in Ray channel can one tap MMSE equalizer be worse than one tap ZF or I miss some scaling factor in the equalization or in other parts????

Thanks,

R.

Reply

riccardo September 30, 2012 at 6:28 pm

To give you a better idea of what I get I attached the link below of the curves that i get when I use QPSK and 16QAM in OFDM with the same parameters (CP,nBits etc..). In QPSK case I get perfectly identical BER for ZF and MMSE.

http://www.4shared.com/photo/QgFiaXQX/untitled.html

Could it be because of MMSE have only one tap and if I d use 3 or 5 taps MMSE curve will be lower than ZF one??

Regards,

R.

Reply

Krishna Sankar October 5, 2012 at 5:16 am

@riccardo: Why is MMSE so poor for 16QAM case? Is the noise variance term in order?

Reply

Krishna Sankar October 5, 2012 at 5:39 am

@riccardo; Should we use scaling of 1/10 for the noise variance?
C= (1./(conj(hF).*hF+10^(-EsN0dB(ii)/10))).*conj(hF);

Reply

riccardo October 5, 2012 at 3:40 pm

I did it and it looks better but still ZF outperforms MMSE. Here is the ber.
http://www.4shared.com/photo/gA-Hzpzv/untitledu.html
However, I know I’m missing something stupid but I can’t figured it out…Would you mind having a further look to the whole program which work for QPSK but not for 16QAM? I send send an email and we can try to sort it out.

I’m doing a BER comparison between OFDMA and SCFDMA in SISO SIMO and MIMO scenarios, once I got them correctly if you like we can write a post in this blog so it would be helpfull for everyone ;)
Let me know.

Regards,

R.

Reply

riccardo October 5, 2012 at 8:41 pm

I sent a email to you with the code.
Thanks.

Reply

Krishna Sankar October 6, 2012 at 6:43 am

@riccardo: Given the time constraints, debugging through the code is slightly difficult. Good luck

Reply

Mostafa September 19, 2012 at 9:22 am

Hello Sir ,

Can you please advise me , how can i modify this code to use QPSK modulation along with the QAM modulations. I am in desperate need for my project to observe different types of modulation schemes on OFDM system.

Thanks & best Regards

Reply

Krishna Sankar September 22, 2012 at 5:56 am

@Mostafa: Try putting M=4 in the simulations for QPSK.

Reply

houda September 2, 2012 at 8:53 pm

first of all thanks a lot for your efforts. I am new in matlab and I want to ask you about some instructions in your matlab code.
1- why have u used this instruction even u can use idft directly
xt = (nFFT/sqrt(nDSC))*ifft(fftshift(xF.’)).’;
2- what do u mean by this instruction
xF = [zeros(nOFDMsym,6) ipMod_norm(:,[1:nConstperOFDMsym/2]) zeros(nOFDMsym,1) ipMod_norm(:,[nConstperOFDMsym/2+1:nConstperOFDMsym]) zeros(nOFDMsym,5)] ;
3- I haven’t understand the addition of cyclic prefix
finnaly can u explain what represent all of this instructions in practice
thanks in advance

Reply

Krishna Sankar September 4, 2012 at 5:03 am

@houda: My replies:
1/ the term (nFFT/sqrt(nDSC)) is for scaling the output power.
the term fftshift() is to provide the frequency domain information in the way ifft() likes.
please check the post on negative frequency
http://www.dsplog.com/2008/08/08/negative-frequency/
http://www.dsplog.com/2008/02/03/understanding-an-ofdm-transmission/

2/ This is forming the xF, a matrix of dimension [ number of ofdm symbols x number of subcarriers]
In this example, i recon the number of subcarriers is 64. And the index
[-32:-27] : 6 subcarriers are 0
[-26:-1] : 26 data subcarriers
0 : no information on dc subcarrier
[1:26] : 26 data subcarriers
[27:31] : 5 subcarriers are 0

3/ Cyclic prefix is added to provide a buffer zone for inter symbol interference from the previous symbol caused due to the multipath channel
http://www.dsplog.com/2008/02/17/cylcic-prefix-in-orthogonal-frequency-division-multiplexing/

Reply

houda September 9, 2012 at 8:32 pm

thanks a lot Krishna Sankar.

Reply

doojin June 6, 2012 at 11:52 am

I have simple queation!!
at OFDM, increasing FFT size , how about BER curve?? and why??
please, answer my queation!

Reply

Krishna Sankar June 11, 2012 at 5:14 am

@doojin: For the same sampling frequency, increasing the fft size means that the subcarrier spacing is narrower resulting in a lower noise power. However we need to lower transmit power of each subcarrier by the same amount to keep the transmit power a constant. Hence, I reckon there is no Eb/N0 vs BER impact by increasing the number of subcarriers.

Reply

farshad May 19, 2012 at 5:39 pm

hello.thank you very much for matlab code 16-QAM.
I want this matlab code for 64-QAM but by change 16 to 64 I cant simulation.help me

Best Regards.

Reply

sachin May 7, 2012 at 1:21 am

Hello Krishna,
i am sachin. i need some help from you.
i need matlab code for ostbc over nakagami-m channel or BER for the nakagami-m channel.waiting for your feedback and your help.

Reply

Krishna Sankar May 8, 2012 at 5:36 am

@sachin: I do not have topics on the articles you described above. But can point you to http://www.dsplog.com/tag/ofdm

Reply

imran April 25, 2012 at 9:51 pm

Hello Krishna,
i am imran. i need some help from you. i need a theoretical formula of Bit Error Rate or Symbol error rate for 16-APSK (amplitude phase shift keying). i got the simulation result . but i dont know the exact theoretical formula or equation regarding of this problem.
I saw some of your updated formula for 16-QAM or 16- PSK. i want the like this formula where i can compare my theoretical and simulation constellation plot.
waiting for your feedback and your help.

Reply

Krishna Sankar April 26, 2012 at 5:53 am

@imran: sorry, i have not discussed 16APSK schemes in the posts

Reply

imran April 28, 2012 at 2:52 pm

Thanks Krishna for your feedback.
i would like to request you, please give me some suggestion where i can get this information. Honestly i need desperately this 16-apsk theoretical formula for BER or SER.

Reply

ofir michael April 24, 2012 at 11:56 am

your welcome.
you should write about Es : Es_max, Es_min, Es_avrage.
Do you know the formula for OFDM based on 64QAM modulation?

Reply

Krishna Sankar April 26, 2012 at 5:47 am

@ofir: Hmmm… the underlying equation for 64QAM will remain the same even in OFDM case. The presence of cyclic prefix, guard subcarriers will mean that the noise scaling needs to be adjusted appropriately.
http://www.dsplog.com/2012/01/01/symbol-error-rate-16qam-64qam-256qam/

Reply

ofir michael April 26, 2012 at 12:08 pm

No it will not. In OFDM there are 48 subcarriers of 64qam tansmitted. It changes the SER. The more subcarries you add the bigger the bandwidth becomes, the longer Tsymbol is.

Reply

Krishna Sankar April 27, 2012 at 5:43 am

@ofir: Well, the slope of the symbol error rate does not change. Yes, it does get shifted in the x-axis based on the cyclic prefix and the number of subcarriers. I have discussed about a simple BPSK case at http://www.dsplog.com/2008/06/10/ofdm-bpsk-bit-error/
Es/N0 dB = Eb/N0 dB + 10*log10(ndsc/nfft) + 10*log10(td/(td+tcp))

Reply

sachin April 20, 2012 at 11:45 pm

any one can give the matlab code for ostbc over nakagami-m channel or BER for the nakagami-m channel

Reply

ofir michael April 17, 2012 at 3:27 pm

you have a mistake on “K”.
it does not equal to SQRT(1/(2/3*M-1)).
it’s equal to SQRT(1/(2/3*(M-1)))

Reply

Krishna Sankar April 18, 2012 at 5:27 am

@ofir: Hmm… it is SQRT(1/(2/3*(M-1))). Where do you see the error?

Reply

ofir michael April 23, 2012 at 10:39 am

look at your k.
k=SQRT(1/(2/3*M-1).

I calculated it and it’s equal to: k=SQRT(1/(2/3*(M-1))).

Reply

Krishna Sankar April 23, 2012 at 7:45 pm

@ofir: M-1 is in the numerator

Reply

ofir michael April 24, 2012 at 2:38 am

No it is not.
under “Additive White Gaussian Noise (AWGN) channel ”
look at “k”
__________
/ 1
k= /___________
/ _2_ * M-1
\/ 3

when it should be:

__________
/ 1
k= /___________
/ _2_ * (M-1)
\/ 3

reza March 25, 2012 at 10:47 am

I can not run for this project, there is an error in –>

“??? Error using ==> semilogy
Conversion to double from cell is not possible.

Error in ==> compute_symbol_error_rate_qam_ofdm_awgn at 27
semilogy(EsN0dB,theorySer(jj,:),color_vec1(jj));”

Reply

Krishna Sankar March 26, 2012 at 5:31 am

@reza: try replacing color_vec1(jj) with color_vec1{jj}

Reply

reza March 29, 2012 at 9:53 am

thanks sir. it works!

Reply

jio February 3, 2012 at 11:41 am

good job

Reply

Krishna Sankar April 24, 2012 at 4:57 am

@ofir: At last, I understood your concern – and I added bracket’s around (M-1). Thanks for pointing that out. It was a typo from my side.

Reply

thang November 23, 2012 at 8:14 am

hello
please help me simulation the difference between DVB-T and DVB-T2, i am not good at MATLAB, i have searched a document but i can’t do it because i don’t know how to write progam with matlab.
thankyou very much!
this is link: http://www.dtg.org.uk/dtg/t2docs/Validation_Simulation_Interoperability_Andrew_Murphy_BBC.pdf

Reply

Krishna Sankar November 27, 2012 at 5:48 am

@thang: sorry, wont be able to help you with the coding part.
for ofdm related posts, plz check out http://www.dsplog.com/category/ofdm/

Reply

Leave a Comment

Previous post:

Next post: