Quadrature Amplitude Modulation (QAM) is an important modulation scheme as it allows for higher data rates and spectral efficiencies. The bit error rate (BER) of QAM can be calculated through Monte Carlo simulations. However this becomes quite complex as the constellation size of the modulation schemes increases. Therefore a theoretical approach is sometimes preferred. The BER for Gray coded QAM, for even number of bits per symbol, is shown below.

Gray coding ensures that a symbol error results in a single bit error. The code for calculating the theoretical QAM BER for k even (even number of bits per symbol) is given below. The formula for calculating the BER for k odd is different, however, the formula given below can be used a first estimate.

```
EbNodB=-6:2:24
EbNo=10.^(EbNodB/10);
k=8;
M=2^k;
x=sqrt(3*k*EbNo/(M-1));
Pb=(4/k)*(1-1/sqrt(M))*(1/2)*erfc(x/sqrt(2));
semilogy(EbNodB,Pb)
```

Note:

1. Each additional bit/symbol requires about 2dB extra in SNR to achieve the same BER.

2. 4-QAM is essentially QPSK modulation.

My Octave version.

I’m new to Octave and doing this sort of thing so please offer suggestions and corrections.

function Y=Q(X)

Y=0.5.*erfc(double(X)./sqrt(2))

endfunction

EbNodB=0:2:30

EbNo=10.^(EbNodB/10)

K=[2 4 6 8]

M=2.^K

KM=double(3*K./(M-1))

KME=double(KM’*EbNo)

X=double(sqrt(KME))

Pb=double((4./K).*(1-1./sqrt(M)))’.*Q(X)

semilogy(EbNodB,Pb)

title(“M-QAM BER v SNR”)

grid on

grid minor on

legend(num2str(M’))

ylim([1e-8 1e0])

xlabel(“Eb/No (dB)”)

ylabel(“BER”)

print -dsvg q.svg

This is the complete code. You should be able to reproduce the above Fig. If you are still unable to do so, please share your code here.

John

Hello,

I am not able to reproduce that graphic, could you send me the complete matlab code?

Thank you!

I simulate the BER performance of M-ary QAM over Rayleigh fading channel in Matlab tool, now I want to check that result with theoretical ber. So, please send to me theoretical BER equation of M-ary QAM over Rayleigh fading channel.

Thanking you.

Hello, it seems that everyone is in need of those codes :). Could you send me the code for matlab also??

I’ll appreciate it. Thank you!!

plz send me BER 64 QAM modulation code in AWGN

I´ve proved with the same code and the result was diferent

Gordon: Frankly speaking I could not figure this out easily and had to do a simulation. It turns out that there is significant difference (2-3 dB) at low EbNo but at higher signal to noise ratios the difference is reduced to a fraction of a dB.

The simulation considered 64-QAM modulation but similar results are expected for other modulation schemes.

May I know the sensitivity difference between the cases with and without gray coding?

Best

Gordon

Just use the code as it is. Change ‘k’ to get the different curves (k=2,4,6,8).

Hello,

I tried to do the graphic that you upload to the website in order to calculate the theorical BER of 4-QAM, 16-QAM and 64-QAM.

I am not able to reproduce that graphic, could you send me the complete matlab code??

Thank you very much