SNR, BER, Constellation
This page is to show some snapshot and intuitive picture about LTE modulation schedule being supported as of now and how SNR would influence on signal quality at the reciever side. These snapshots are at the level of constellation meaning it is before any kind of channel decoding and error correction. (If you are not so familiar with the the concept of SNR, BER. See the SNR and BER page in this site. Also, you may get some intuitive understanding of effect of SNR on real UE after going through all those channel decoding and error correct from Physical Layer Performance Test page).
Following shows the 3GPP specification of each of LTE Modulation scheme based on 36.211 7.1 Modulation mapper. Matlab code to show these plots is at < List 1 >. It is long code, but it is just bunch of numbers copied from the 3GPP specification. No complicated logic.

Followings are the plots showing the constellation of 10000 LTE symbols with different modulation scheme and AWGN with various level. Just look at how the range of error for each symbol (EVM) gets wider as SNR decreases. Matlab code for this is at < List 2 >.






Following constellation is based on 36.211 7.1 Modulation mapper.
clear all;
BPSK = [1/sqrt(2) + j*1/sqrt(2);
-1/sqrt(2) - j*1/sqrt(2)];
QPSK = [1/sqrt(2) + j*1/sqrt(2);
1/sqrt(2) - j*1/sqrt(2);
-1/sqrt(2) + j*1/sqrt(2);
-1/sqrt(2) - j*1/sqrt(2)];
QAM16 = [1/sqrt(10) + j*1/sqrt(10);
1/sqrt(10) + j*3/sqrt(10);
3/sqrt(10) + j*1/sqrt(10);
3/sqrt(10) + j*3/sqrt(10);
1/sqrt(10) - j*1/sqrt(10);
1/sqrt(10) - j*3/sqrt(10);
3/sqrt(10) - j*1/sqrt(10);
3/sqrt(10) - j*3/sqrt(10);
-1/sqrt(10) + j*1/sqrt(10);
-1/sqrt(10) + j*3/sqrt(10);
-3/sqrt(10) + j*1/sqrt(10);
-3/sqrt(10) + j*3/sqrt(10);
-1/sqrt(10) - j*1/sqrt(10);
-1/sqrt(10) - j*3/sqrt(10);
-3/sqrt(10) - j*1/sqrt(10);
-3/sqrt(10) - j*3/sqrt(10)];
QAM64 = [3/sqrt(42) + j*3/sqrt(42);
3/sqrt(42) + j*1/sqrt(42);
1/sqrt(42) + j*3/sqrt(42);
1/sqrt(42) + j*1/sqrt(42);
3/sqrt(42) + j*5/sqrt(42);
3/sqrt(42) + j*7/sqrt(42);
1/sqrt(42) + j*5/sqrt(42);
1/sqrt(42) + j*7/sqrt(42);
5/sqrt(42) + j*3/sqrt(42);
5/sqrt(42) + j*1/sqrt(42);
7/sqrt(42) + j*3/sqrt(42);
7/sqrt(42) + j*1/sqrt(42);
5/sqrt(42) + j*5/sqrt(42);
5/sqrt(42) + j*7/sqrt(42);
7/sqrt(42) + j*5/sqrt(42);
7/sqrt(42) + j*7/sqrt(42);
3/sqrt(42) - j*3/sqrt(42);
3/sqrt(42) - j*1/sqrt(42);
1/sqrt(42) - j*3/sqrt(42);
1/sqrt(42) - j*1/sqrt(42);
3/sqrt(42) - j*5/sqrt(42);
3/sqrt(42) - j*7/sqrt(42);
1/sqrt(42) - j*5/sqrt(42);
1/sqrt(42) - j*7/sqrt(42);
5/sqrt(42) - j*3/sqrt(42);
5/sqrt(42) - j*1/sqrt(42);
7/sqrt(42) - j*3/sqrt(42);
7/sqrt(42) - j*1/sqrt(42);
5/sqrt(42) - j*5/sqrt(42);
5/sqrt(42) - j*7/sqrt(42);
7/sqrt(42) - j*5/sqrt(42);
7/sqrt(42) - j*7/sqrt(42);
-3/sqrt(42) + j*3/sqrt(42);
-3/sqrt(42) + j*1/sqrt(42);
-1/sqrt(42) + j*3/sqrt(42);
-1/sqrt(42) + j*1/sqrt(42);
-3/sqrt(42) + j*5/sqrt(42);
-3/sqrt(42) + j*7/sqrt(42);
-1/sqrt(42) + j*5/sqrt(42);
-1/sqrt(42) + j*7/sqrt(42);
-5/sqrt(42) + j*3/sqrt(42);
-5/sqrt(42) + j*1/sqrt(42);
-7/sqrt(42) + j*3/sqrt(42);
-7/sqrt(42) + j*1/sqrt(42);
-5/sqrt(42) + j*5/sqrt(42);
-5/sqrt(42) + j*7/sqrt(42);
-7/sqrt(42) + j*5/sqrt(42);
-7/sqrt(42) + j*7/sqrt(42);
-3/sqrt(42) - j*3/sqrt(42);
-3/sqrt(42) - j*1/sqrt(42);
-1/sqrt(42) - j*3/sqrt(42);
-1/sqrt(42) - j*1/sqrt(42);
-3/sqrt(42) - j*5/sqrt(42);
-3/sqrt(42) - j*7/sqrt(42);
-1/sqrt(42) - j*5/sqrt(42);
-1/sqrt(42) - j*7/sqrt(42);
-5/sqrt(42) - j*3/sqrt(42);
-5/sqrt(42) - j*1/sqrt(42);
-7/sqrt(42) - j*3/sqrt(42);
-7/sqrt(42) - j*1/sqrt(42);
-5/sqrt(42) - j*5/sqrt(42);
-5/sqrt(42) - j*7/sqrt(42);
-7/sqrt(42) - j*5/sqrt(42);
-7/sqrt(42) - j*7/sqrt(42)];
QAM256 = [5/sqrt(170) + j*5/sqrt(170);
5/sqrt(170) + j*7/sqrt(170);
7/sqrt(170) + j*5/sqrt(170);
7/sqrt(170) + j*7/sqrt(170);
5/sqrt(170) + j*3/sqrt(170);
5/sqrt(170) + j*1/sqrt(170);
7/sqrt(170) + j*3/sqrt(170);
7/sqrt(170) + j*1/sqrt(170);
3/sqrt(170) + j*5/sqrt(170);
3/sqrt(170) + j*7/sqrt(170);
1/sqrt(170) + j*5/sqrt(170);
1/sqrt(170) + j*7/sqrt(170);
3/sqrt(170) + j*3/sqrt(170);
3/sqrt(170) + j*1/sqrt(170);
1/sqrt(170) + j*3/sqrt(170);
1/sqrt(170) + j*1/sqrt(170);
5/sqrt(170) + j*11/sqrt(170);
5/sqrt(170) + j*9/sqrt(170);
7/sqrt(170) + j*11/sqrt(170);
7/sqrt(170) + j*9/sqrt(170);
5/sqrt(170) + j*13/sqrt(170);
5/sqrt(170) + j*15/sqrt(170);
7/sqrt(170) + j*13/sqrt(170);
7/sqrt(170) + j*15/sqrt(170);
3/sqrt(170) + j*11/sqrt(170);
3/sqrt(170) + j*9/sqrt(170);
1/sqrt(170) + j*11/sqrt(170);
1/sqrt(170) + j*9/sqrt(170);
3/sqrt(170) + j*13/sqrt(170);
3/sqrt(170) + j*15/sqrt(170);
1/sqrt(170) + j*13/sqrt(170);
1/sqrt(170) + j*15/sqrt(170);
11/sqrt(170) + j*5/sqrt(170);
11/sqrt(170) + j*7/sqrt(170);
9/sqrt(170) + j*5/sqrt(170);
9/sqrt(170) + j*7/sqrt(170);
11/sqrt(170) + j*3/sqrt(170);
11/sqrt(170) + j*1/sqrt(170);
9/sqrt(170) + j*3/sqrt(170);
9/sqrt(170) + j*1/sqrt(170);
13/sqrt(170) + j*5/sqrt(170);
13/sqrt(170) + j*7/sqrt(170);
15/sqrt(170) + j*5/sqrt(170);
15/sqrt(170) + j*7/sqrt(170);
13/sqrt(170) + j*3/sqrt(170);
13/sqrt(170) + j*1/sqrt(170);
15/sqrt(170) + j*3/sqrt(170);
15/sqrt(170) + j*1/sqrt(170);
11/sqrt(170) + j*11/sqrt(170);
11/sqrt(170) + j*9/sqrt(170);
9/sqrt(170) + j*11/sqrt(170);
9/sqrt(170) + j*9/sqrt(170);
11/sqrt(170) + j*13/sqrt(170);
11/sqrt(170) + j*15/sqrt(170);
9/sqrt(170) + j*13/sqrt(170);
9/sqrt(170) + j*15/sqrt(170);
13/sqrt(170) + j*11/sqrt(170);
13/sqrt(170) + j*9/sqrt(170);
15/sqrt(170) + j*11/sqrt(170);
15/sqrt(170) + j*9/sqrt(170);
13/sqrt(170) + j*13/sqrt(170);
13/sqrt(170) + j*15/sqrt(170);
15/sqrt(170) + j*13/sqrt(170);
15/sqrt(170) + j*15/sqrt(170);
5/sqrt(170) - j*5/sqrt(170);
5/sqrt(170) - j*7/sqrt(170);
7/sqrt(170) - j*5/sqrt(170);
7/sqrt(170) - j*7/sqrt(170);
5/sqrt(170) - j*3/sqrt(170);
5/sqrt(170) - j*1/sqrt(170);
7/sqrt(170) - j*3/sqrt(170);
7/sqrt(170) - j*1/sqrt(170);
3/sqrt(170) - j*5/sqrt(170);
3/sqrt(170) - j*7/sqrt(170);
1/sqrt(170) - j*5/sqrt(170);
1/sqrt(170) - j*7/sqrt(170);
3/sqrt(170) - j*3/sqrt(170);
3/sqrt(170) - j*1/sqrt(170);
1/sqrt(170) - j*3/sqrt(170);
1/sqrt(170) - j*1/sqrt(170);
5/sqrt(170) - j*11/sqrt(170);
5/sqrt(170) - j*9/sqrt(170);
7/sqrt(170) - j*11/sqrt(170);
7/sqrt(170) - j*9/sqrt(170);
5/sqrt(170) - j*13/sqrt(170);
5/sqrt(170) - j*15/sqrt(170);
7/sqrt(170) - j*13/sqrt(170);
7/sqrt(170) - j*15/sqrt(170);
3/sqrt(170) - j*11/sqrt(170);
3/sqrt(170) - j*9/sqrt(170);
1/sqrt(170) - j*11/sqrt(170);
1/sqrt(170) - j*9/sqrt(170);
3/sqrt(170) - j*13/sqrt(170);
3/sqrt(170) - j*15/sqrt(170);
1/sqrt(170) - j*13/sqrt(170);
1/sqrt(170) - j*15/sqrt(170);
11/sqrt(170) - j*5/sqrt(170);
11/sqrt(170) - j*7/sqrt(170);
9/sqrt(170) - j*5/sqrt(170);
9/sqrt(170) - j*7/sqrt(170);
11/sqrt(170) - j*3/sqrt(170);
11/sqrt(170) - j*1/sqrt(170);
9/sqrt(170) - j*3/sqrt(170);
9/sqrt(170) - j*1/sqrt(170);
13/sqrt(170) - j*5/sqrt(170);
13/sqrt(170) - j*7/sqrt(170);
15/sqrt(170) - j*5/sqrt(170);
15/sqrt(170) - j*7/sqrt(170);
13/sqrt(170) - j*3/sqrt(170);
13/sqrt(170) - j*1/sqrt(170);
15/sqrt(170) - j*3/sqrt(170);
15/sqrt(170) - j*1/sqrt(170);
11/sqrt(170) - j*11/sqrt(170);
11/sqrt(170) - j*9/sqrt(170);
9/sqrt(170) - j*11/sqrt(170);
9/sqrt(170) - j*9/sqrt(170);
11/sqrt(170) - j*13/sqrt(170);
11/sqrt(170) - j*15/sqrt(170);
9/sqrt(170) - j*13/sqrt(170);
9/sqrt(170) - j*15/sqrt(170);
13/sqrt(170) - j*11/sqrt(170);
13/sqrt(170) - j*9/sqrt(170);
15/sqrt(170) - j*11/sqrt(170);
15/sqrt(170) - j*9/sqrt(170);
13/sqrt(170) - j*13/sqrt(170);
13/sqrt(170) - j*15/sqrt(170);
15/sqrt(170) - j*13/sqrt(170);
15/sqrt(170) - j*15/sqrt(170);
-5/sqrt(170) + j*5/sqrt(170);
-5/sqrt(170) + j*7/sqrt(170);
-7/sqrt(170) + j*5/sqrt(170);
-7/sqrt(170) + j*7/sqrt(170);
-5/sqrt(170) + j*3/sqrt(170);
-5/sqrt(170) + j*1/sqrt(170);
-7/sqrt(170) + j*3/sqrt(170);
-7/sqrt(170) + j*1/sqrt(170);
-3/sqrt(170) + j*5/sqrt(170);
-3/sqrt(170) + j*7/sqrt(170);
-1/sqrt(170) + j*5/sqrt(170);
-1/sqrt(170) + j*7/sqrt(170);
-3/sqrt(170) + j*3/sqrt(170);
-3/sqrt(170) + j*1/sqrt(170);
-1/sqrt(170) + j*3/sqrt(170);
-1/sqrt(170) + j*1/sqrt(170);
-5/sqrt(170) + j*11/sqrt(170);
-5/sqrt(170) + j*9/sqrt(170);
-7/sqrt(170) + j*11/sqrt(170);
-7/sqrt(170) + j*9/sqrt(170);
-5/sqrt(170) + j*13/sqrt(170);
-5/sqrt(170) + j*15/sqrt(170);
-7/sqrt(170) + j*13/sqrt(170);
-7/sqrt(170) + j*15/sqrt(170);
-3/sqrt(170) + j*11/sqrt(170);
-3/sqrt(170) + j*9/sqrt(170);
-1/sqrt(170) + j*11/sqrt(170);
-1/sqrt(170) + j*9/sqrt(170);
-3/sqrt(170) + j*13/sqrt(170);
-3/sqrt(170) + j*15/sqrt(170);
-1/sqrt(170) + j*13/sqrt(170);
-1/sqrt(170) + j*15/sqrt(170);
-11/sqrt(170) + j*5/sqrt(170);
-11/sqrt(170) + j*7/sqrt(170);
-9/sqrt(170) + j*5/sqrt(170);
-9/sqrt(170) + j*7/sqrt(170);
-11/sqrt(170) + j*3/sqrt(170);
-11/sqrt(170) + j*1/sqrt(170);
-9/sqrt(170) + j*3/sqrt(170);
-9/sqrt(170) + j*1/sqrt(170);
-13/sqrt(170) + j*5/sqrt(170);
-13/sqrt(170) + j*7/sqrt(170);
-15/sqrt(170) + j*5/sqrt(170);
-15/sqrt(170) + j*7/sqrt(170);
-13/sqrt(170) + j*3/sqrt(170);
-13/sqrt(170) + j*1/sqrt(170);
-15/sqrt(170) + j*3/sqrt(170);
-15/sqrt(170) + j*1/sqrt(170);
-11/sqrt(170) + j*11/sqrt(170);
-11/sqrt(170) + j*9/sqrt(170);
-9/sqrt(170) + j*11/sqrt(170);
-9/sqrt(170) + j*9/sqrt(170);
-11/sqrt(170) + j*13/sqrt(170);
-11/sqrt(170) + j*15/sqrt(170);
-9/sqrt(170) + j*13/sqrt(170);
-9/sqrt(170) + j*15/sqrt(170);
-13/sqrt(170) + j*11/sqrt(170);
-13/sqrt(170) + j*9/sqrt(170);
-15/sqrt(170) + j*11/sqrt(170);
-15/sqrt(170) + j*9/sqrt(170);
-13/sqrt(170) + j*13/sqrt(170);
-13/sqrt(170) + j*15/sqrt(170);
-15/sqrt(170) + j*13/sqrt(170);
-15/sqrt(170) + j*15/sqrt(170);
-5/sqrt(170) - j*5/sqrt(170);
-5/sqrt(170) - j*7/sqrt(170);
-7/sqrt(170) - j*5/sqrt(170);
-7/sqrt(170) - j*7/sqrt(170);
-5/sqrt(170) - j*3/sqrt(170);
-5/sqrt(170) - j*1/sqrt(170);
-7/sqrt(170) - j*3/sqrt(170);
-7/sqrt(170) - j*1/sqrt(170);
-3/sqrt(170) - j*5/sqrt(170);
-3/sqrt(170) - j*7/sqrt(170);
-1/sqrt(170) - j*5/sqrt(170);
-1/sqrt(170) - j*7/sqrt(170);
-3/sqrt(170) - j*3/sqrt(170);
-3/sqrt(170) - j*1/sqrt(170);
-1/sqrt(170) - j*3/sqrt(170);
-1/sqrt(170) - j*1/sqrt(170);
-5/sqrt(170) - j*11/sqrt(170);
-5/sqrt(170) - j*9/sqrt(170);
-7/sqrt(170) - j*11/sqrt(170);
-7/sqrt(170) - j*9/sqrt(170);
-5/sqrt(170) - j*13/sqrt(170);
-5/sqrt(170) - j*15/sqrt(170);
-7/sqrt(170) - j*13/sqrt(170);
-7/sqrt(170) - j*15/sqrt(170);
-3/sqrt(170) - j*11/sqrt(170);
-3/sqrt(170) - j*9/sqrt(170);
-1/sqrt(170) - j*11/sqrt(170);
-1/sqrt(170) - j*9/sqrt(170);
-3/sqrt(170) - j*13/sqrt(170);
-3/sqrt(170) - j*15/sqrt(170);
-1/sqrt(170) - j*13/sqrt(170);
-1/sqrt(170) - j*15/sqrt(170);
-11/sqrt(170) - j*5/sqrt(170);
-11/sqrt(170) - j*7/sqrt(170);
-9/sqrt(170) - j*5/sqrt(170);
-9/sqrt(170) - j*7/sqrt(170);
-11/sqrt(170) - j*3/sqrt(170);
-11/sqrt(170) - j*1/sqrt(170);
-9/sqrt(170) - j*3/sqrt(170);
-9/sqrt(170) - j*1/sqrt(170);
-13/sqrt(170) - j*5/sqrt(170);
-13/sqrt(170) - j*7/sqrt(170);
-15/sqrt(170) - j*5/sqrt(170);
-15/sqrt(170) - j*7/sqrt(170);
-13/sqrt(170) - j*3/sqrt(170);
-13/sqrt(170) - j*1/sqrt(170);
-15/sqrt(170) - j*3/sqrt(170);
-15/sqrt(170) - j*1/sqrt(170);
-11/sqrt(170) - j*11/sqrt(170);
-11/sqrt(170) - j*9/sqrt(170);
-9/sqrt(170) - j*11/sqrt(170);
-9/sqrt(170) - j*9/sqrt(170);
-11/sqrt(170) - j*13/sqrt(170);
-11/sqrt(170) - j*15/sqrt(170);
-9/sqrt(170) - j*13/sqrt(170);
-9/sqrt(170) - j*15/sqrt(170);
-13/sqrt(170) - j*11/sqrt(170);
-13/sqrt(170) - j*9/sqrt(170);
-15/sqrt(170) - j*11/sqrt(170);
-15/sqrt(170) - j*9/sqrt(170);
-13/sqrt(170) - j*13/sqrt(170);
-13/sqrt(170) - j*15/sqrt(170);
-15/sqrt(170) - j*13/sqrt(170);
-15/sqrt(170) - j*15/sqrt(170)];
subplot(1,5,1);
plot(real(BPSK),imag(BPSK),'ro','MarkerFaceColor',[1,0,0],'MarkerSize',2);
axis([-1.5 1.5 -1.5 1.5]);
subplot(1,5,2);
plot(real(QPSK),imag(QPSK),'ro','MarkerFaceColor',[1,0,0],'MarkerSize',2);
axis([-1.5 1.5 -1.5 1.5]);
subplot(1,5,3);
plot(real(QAM16),imag(QAM16),'ro','MarkerFaceColor',[1,0,0],'MarkerSize',2);
axis([-1.5 1.5 -1.5 1.5]);
subplot(1,5,4);
plot(real(QAM64),imag(QAM64),'ro','MarkerFaceColor',[1,0,0],'MarkerSize',2);
axis([-1.5 1.5 -1.5 1.5]);
subplot(1,5,5);
plot(real(QAM256),imag(QAM256),'ro','MarkerFaceColor',[1,0,0],'MarkerSize',2);
axis([-1.5 1.5 -1.5 1.5]);
clear all;
BPSK = [1/sqrt(2) + j*1/sqrt(2);
-1/sqrt(2) - j*1/sqrt(2)];
QPSK = [1/sqrt(2) + j*1/sqrt(2);
1/sqrt(2) - j*1/sqrt(2);
-1/sqrt(2) + j*1/sqrt(2);
-1/sqrt(2) - j*1/sqrt(2)];
QAM16 = [1/sqrt(10) + j*1/sqrt(10);
1/sqrt(10) + j*3/sqrt(10);
3/sqrt(10) + j*1/sqrt(10);
3/sqrt(10) + j*3/sqrt(10);
1/sqrt(10) - j*1/sqrt(10);
1/sqrt(10) - j*3/sqrt(10);
3/sqrt(10) - j*1/sqrt(10);
3/sqrt(10) - j*3/sqrt(10);
-1/sqrt(10) + j*1/sqrt(10);
-1/sqrt(10) + j*3/sqrt(10);
-3/sqrt(10) + j*1/sqrt(10);
-3/sqrt(10) + j*3/sqrt(10);
-1/sqrt(10) - j*1/sqrt(10);
-1/sqrt(10) - j*3/sqrt(10);
-3/sqrt(10) - j*1/sqrt(10);
-3/sqrt(10) - j*3/sqrt(10)];
QAM64 = [3/sqrt(42) + j*3/sqrt(42);
3/sqrt(42) + j*1/sqrt(42);
1/sqrt(42) + j*3/sqrt(42);
1/sqrt(42) + j*1/sqrt(42);
3/sqrt(42) + j*5/sqrt(42);
3/sqrt(42) + j*7/sqrt(42);
1/sqrt(42) + j*5/sqrt(42);
1/sqrt(42) + j*7/sqrt(42);
5/sqrt(42) + j*3/sqrt(42);
5/sqrt(42) + j*1/sqrt(42);
7/sqrt(42) + j*3/sqrt(42);
7/sqrt(42) + j*1/sqrt(42);
5/sqrt(42) + j*5/sqrt(42);
5/sqrt(42) + j*7/sqrt(42);
7/sqrt(42) + j*5/sqrt(42);
7/sqrt(42) + j*7/sqrt(42);
3/sqrt(42) - j*3/sqrt(42);
3/sqrt(42) - j*1/sqrt(42);
1/sqrt(42) - j*3/sqrt(42);
1/sqrt(42) - j*1/sqrt(42);
3/sqrt(42) - j*5/sqrt(42);
3/sqrt(42) - j*7/sqrt(42);
1/sqrt(42) - j*5/sqrt(42);
1/sqrt(42) - j*7/sqrt(42);
5/sqrt(42) - j*3/sqrt(42);
5/sqrt(42) - j*1/sqrt(42);
7/sqrt(42) - j*3/sqrt(42);
7/sqrt(42) - j*1/sqrt(42);
5/sqrt(42) - j*5/sqrt(42);
5/sqrt(42) - j*7/sqrt(42);
7/sqrt(42) - j*5/sqrt(42);
7/sqrt(42) - j*7/sqrt(42);
-3/sqrt(42) + j*3/sqrt(42);
-3/sqrt(42) + j*1/sqrt(42);
-1/sqrt(42) + j*3/sqrt(42);
-1/sqrt(42) + j*1/sqrt(42);
-3/sqrt(42) + j*5/sqrt(42);
-3/sqrt(42) + j*7/sqrt(42);
-1/sqrt(42) + j*5/sqrt(42);
-1/sqrt(42) + j*7/sqrt(42);
-5/sqrt(42) + j*3/sqrt(42);
-5/sqrt(42) + j*1/sqrt(42);
-7/sqrt(42) + j*3/sqrt(42);
-7/sqrt(42) + j*1/sqrt(42);
-5/sqrt(42) + j*5/sqrt(42);
-5/sqrt(42) + j*7/sqrt(42);
-7/sqrt(42) + j*5/sqrt(42);
-7/sqrt(42) + j*7/sqrt(42);
-3/sqrt(42) - j*3/sqrt(42);
-3/sqrt(42) - j*1/sqrt(42);
-1/sqrt(42) - j*3/sqrt(42);
-1/sqrt(42) - j*1/sqrt(42);
-3/sqrt(42) - j*5/sqrt(42);
-3/sqrt(42) - j*7/sqrt(42);
-1/sqrt(42) - j*5/sqrt(42);
-1/sqrt(42) - j*7/sqrt(42);
-5/sqrt(42) - j*3/sqrt(42);
-5/sqrt(42) - j*1/sqrt(42);
-7/sqrt(42) - j*3/sqrt(42);
-7/sqrt(42) - j*1/sqrt(42);
-5/sqrt(42) - j*5/sqrt(42);
-5/sqrt(42) - j*7/sqrt(42);
-7/sqrt(42) - j*5/sqrt(42);
-7/sqrt(42) - j*7/sqrt(42)];
QAM256 = [5/sqrt(170) + j*5/sqrt(170);
5/sqrt(170) + j*7/sqrt(170);
7/sqrt(170) + j*5/sqrt(170);
7/sqrt(170) + j*7/sqrt(170);
5/sqrt(170) + j*3/sqrt(170);
5/sqrt(170) + j*1/sqrt(170);
7/sqrt(170) + j*3/sqrt(170);
7/sqrt(170) + j*1/sqrt(170);
3/sqrt(170) + j*5/sqrt(170);
3/sqrt(170) + j*7/sqrt(170);
1/sqrt(170) + j*5/sqrt(170);
1/sqrt(170) + j*7/sqrt(170);
3/sqrt(170) + j*3/sqrt(170);
3/sqrt(170) + j*1/sqrt(170);
1/sqrt(170) + j*3/sqrt(170);
1/sqrt(170) + j*1/sqrt(170);
5/sqrt(170) + j*11/sqrt(170);
5/sqrt(170) + j*9/sqrt(170);
7/sqrt(170) + j*11/sqrt(170);
7/sqrt(170) + j*9/sqrt(170);
5/sqrt(170) + j*13/sqrt(170);
5/sqrt(170) + j*15/sqrt(170);
7/sqrt(170) + j*13/sqrt(170);
7/sqrt(170) + j*15/sqrt(170);
3/sqrt(170) + j*11/sqrt(170);
3/sqrt(170) + j*9/sqrt(170);
1/sqrt(170) + j*11/sqrt(170);
1/sqrt(170) + j*9/sqrt(170);
3/sqrt(170) + j*13/sqrt(170);
3/sqrt(170) + j*15/sqrt(170);
1/sqrt(170) + j*13/sqrt(170);
1/sqrt(170) + j*15/sqrt(170);
11/sqrt(170) + j*5/sqrt(170);
11/sqrt(170) + j*7/sqrt(170);
9/sqrt(170) + j*5/sqrt(170);
9/sqrt(170) + j*7/sqrt(170);
11/sqrt(170) + j*3/sqrt(170);
11/sqrt(170) + j*1/sqrt(170);
9/sqrt(170) + j*3/sqrt(170);
9/sqrt(170) + j*1/sqrt(170);
13/sqrt(170) + j*5/sqrt(170);
13/sqrt(170) + j*7/sqrt(170);
15/sqrt(170) + j*5/sqrt(170);
15/sqrt(170) + j*7/sqrt(170);
13/sqrt(170) + j*3/sqrt(170);
13/sqrt(170) + j*1/sqrt(170);
15/sqrt(170) + j*3/sqrt(170);
15/sqrt(170) + j*1/sqrt(170);
11/sqrt(170) + j*11/sqrt(170);
11/sqrt(170) + j*9/sqrt(170);
9/sqrt(170) + j*11/sqrt(170);
9/sqrt(170) + j*9/sqrt(170);
11/sqrt(170) + j*13/sqrt(170);
11/sqrt(170) + j*15/sqrt(170);
9/sqrt(170) + j*13/sqrt(170);
9/sqrt(170) + j*15/sqrt(170);
13/sqrt(170) + j*11/sqrt(170);
13/sqrt(170) + j*9/sqrt(170);
15/sqrt(170) + j*11/sqrt(170);
15/sqrt(170) + j*9/sqrt(170);
13/sqrt(170) + j*13/sqrt(170);
13/sqrt(170) + j*15/sqrt(170);
15/sqrt(170) + j*13/sqrt(170);
15/sqrt(170) + j*15/sqrt(170);
5/sqrt(170) - j*5/sqrt(170);
5/sqrt(170) - j*7/sqrt(170);
7/sqrt(170) - j*5/sqrt(170);
7/sqrt(170) - j*7/sqrt(170);
5/sqrt(170) - j*3/sqrt(170);
5/sqrt(170) - j*1/sqrt(170);
7/sqrt(170) - j*3/sqrt(170);
7/sqrt(170) - j*1/sqrt(170);
3/sqrt(170) - j*5/sqrt(170);
3/sqrt(170) - j*7/sqrt(170);
1/sqrt(170) - j*5/sqrt(170);
1/sqrt(170) - j*7/sqrt(170);
3/sqrt(170) - j*3/sqrt(170);
3/sqrt(170) - j*1/sqrt(170);
1/sqrt(170) - j*3/sqrt(170);
1/sqrt(170) - j*1/sqrt(170);
5/sqrt(170) - j*11/sqrt(170);
5/sqrt(170) - j*9/sqrt(170);
7/sqrt(170) - j*11/sqrt(170);
7/sqrt(170) - j*9/sqrt(170);
5/sqrt(170) - j*13/sqrt(170);
5/sqrt(170) - j*15/sqrt(170);
7/sqrt(170) - j*13/sqrt(170);
7/sqrt(170) - j*15/sqrt(170);
3/sqrt(170) - j*11/sqrt(170);
3/sqrt(170) - j*9/sqrt(170);
1/sqrt(170) - j*11/sqrt(170);
1/sqrt(170) - j*9/sqrt(170);
3/sqrt(170) - j*13/sqrt(170);
3/sqrt(170) - j*15/sqrt(170);
1/sqrt(170) - j*13/sqrt(170);
1/sqrt(170) - j*15/sqrt(170);
11/sqrt(170) - j*5/sqrt(170);
11/sqrt(170) - j*7/sqrt(170);
9/sqrt(170) - j*5/sqrt(170);
9/sqrt(170) - j*7/sqrt(170);
11/sqrt(170) - j*3/sqrt(170);
11/sqrt(170) - j*1/sqrt(170);
9/sqrt(170) - j*3/sqrt(170);
9/sqrt(170) - j*1/sqrt(170);
13/sqrt(170) - j*5/sqrt(170);
13/sqrt(170) - j*7/sqrt(170);
15/sqrt(170) - j*5/sqrt(170);
15/sqrt(170) - j*7/sqrt(170);
13/sqrt(170) - j*3/sqrt(170);
13/sqrt(170) - j*1/sqrt(170);
15/sqrt(170) - j*3/sqrt(170);
15/sqrt(170) - j*1/sqrt(170);
11/sqrt(170) - j*11/sqrt(170);
11/sqrt(170) - j*9/sqrt(170);
9/sqrt(170) - j*11/sqrt(170);
9/sqrt(170) - j*9/sqrt(170);
11/sqrt(170) - j*13/sqrt(170);
11/sqrt(170) - j*15/sqrt(170);
9/sqrt(170) - j*13/sqrt(170);
9/sqrt(170) - j*15/sqrt(170);
13/sqrt(170) - j*11/sqrt(170);
13/sqrt(170) - j*9/sqrt(170);
15/sqrt(170) - j*11/sqrt(170);
15/sqrt(170) - j*9/sqrt(170);
13/sqrt(170) - j*13/sqrt(170);
13/sqrt(170) - j*15/sqrt(170);
15/sqrt(170) - j*13/sqrt(170);
15/sqrt(170) - j*15/sqrt(170);
-5/sqrt(170) + j*5/sqrt(170);
-5/sqrt(170) + j*7/sqrt(170);
-7/sqrt(170) + j*5/sqrt(170);
-7/sqrt(170) + j*7/sqrt(170);
-5/sqrt(170) + j*3/sqrt(170);
-5/sqrt(170) + j*1/sqrt(170);
-7/sqrt(170) + j*3/sqrt(170);
-7/sqrt(170) + j*1/sqrt(170);
-3/sqrt(170) + j*5/sqrt(170);
-3/sqrt(170) + j*7/sqrt(170);
-1/sqrt(170) + j*5/sqrt(170);
-1/sqrt(170) + j*7/sqrt(170);
-3/sqrt(170) + j*3/sqrt(170);
-3/sqrt(170) + j*1/sqrt(170);
-1/sqrt(170) + j*3/sqrt(170);
-1/sqrt(170) + j*1/sqrt(170);
-5/sqrt(170) + j*11/sqrt(170);
-5/sqrt(170) + j*9/sqrt(170);
-7/sqrt(170) + j*11/sqrt(170);
-7/sqrt(170) + j*9/sqrt(170);
-5/sqrt(170) + j*13/sqrt(170);
-5/sqrt(170) + j*15/sqrt(170);
-7/sqrt(170) + j*13/sqrt(170);
-7/sqrt(170) + j*15/sqrt(170);
-3/sqrt(170) + j*11/sqrt(170);
-3/sqrt(170) + j*9/sqrt(170);
-1/sqrt(170) + j*11/sqrt(170);
-1/sqrt(170) + j*9/sqrt(170);
-3/sqrt(170) + j*13/sqrt(170);
-3/sqrt(170) + j*15/sqrt(170);
-1/sqrt(170) + j*13/sqrt(170);
-1/sqrt(170) + j*15/sqrt(170);
-11/sqrt(170) + j*5/sqrt(170);
-11/sqrt(170) + j*7/sqrt(170);
-9/sqrt(170) + j*5/sqrt(170);
-9/sqrt(170) + j*7/sqrt(170);
-11/sqrt(170) + j*3/sqrt(170);
-11/sqrt(170) + j*1/sqrt(170);
-9/sqrt(170) + j*3/sqrt(170);
-9/sqrt(170) + j*1/sqrt(170);
-13/sqrt(170) + j*5/sqrt(170);
-13/sqrt(170) + j*7/sqrt(170);
-15/sqrt(170) + j*5/sqrt(170);
-15/sqrt(170) + j*7/sqrt(170);
-13/sqrt(170) + j*3/sqrt(170);
-13/sqrt(170) + j*1/sqrt(170);
-15/sqrt(170) + j*3/sqrt(170);
-15/sqrt(170) + j*1/sqrt(170);
-11/sqrt(170) + j*11/sqrt(170);
-11/sqrt(170) + j*9/sqrt(170);
-9/sqrt(170) + j*11/sqrt(170);
-9/sqrt(170) + j*9/sqrt(170);
-11/sqrt(170) + j*13/sqrt(170);
-11/sqrt(170) + j*15/sqrt(170);
-9/sqrt(170) + j*13/sqrt(170);
-9/sqrt(170) + j*15/sqrt(170);
-13/sqrt(170) + j*11/sqrt(170);
-13/sqrt(170) + j*9/sqrt(170);
-15/sqrt(170) + j*11/sqrt(170);
-15/sqrt(170) + j*9/sqrt(170);
-13/sqrt(170) + j*13/sqrt(170);
-13/sqrt(170) + j*15/sqrt(170);
-15/sqrt(170) + j*13/sqrt(170);
-15/sqrt(170) + j*15/sqrt(170);
-5/sqrt(170) - j*5/sqrt(170);
-5/sqrt(170) - j*7/sqrt(170);
-7/sqrt(170) - j*5/sqrt(170);
-7/sqrt(170) - j*7/sqrt(170);
-5/sqrt(170) - j*3/sqrt(170);
-5/sqrt(170) - j*1/sqrt(170);
-7/sqrt(170) - j*3/sqrt(170);
-7/sqrt(170) - j*1/sqrt(170);
-3/sqrt(170) - j*5/sqrt(170);
-3/sqrt(170) - j*7/sqrt(170);
-1/sqrt(170) - j*5/sqrt(170);
-1/sqrt(170) - j*7/sqrt(170);
-3/sqrt(170) - j*3/sqrt(170);
-3/sqrt(170) - j*1/sqrt(170);
-1/sqrt(170) - j*3/sqrt(170);
-1/sqrt(170) - j*1/sqrt(170);
-5/sqrt(170) - j*11/sqrt(170);
-5/sqrt(170) - j*9/sqrt(170);
-7/sqrt(170) - j*11/sqrt(170);
-7/sqrt(170) - j*9/sqrt(170);
-5/sqrt(170) - j*13/sqrt(170);
-5/sqrt(170) - j*15/sqrt(170);
-7/sqrt(170) - j*13/sqrt(170);
-7/sqrt(170) - j*15/sqrt(170);
-3/sqrt(170) - j*11/sqrt(170);
-3/sqrt(170) - j*9/sqrt(170);
-1/sqrt(170) - j*11/sqrt(170);
-1/sqrt(170) - j*9/sqrt(170);
-3/sqrt(170) - j*13/sqrt(170);
-3/sqrt(170) - j*15/sqrt(170);
-1/sqrt(170) - j*13/sqrt(170);
-1/sqrt(170) - j*15/sqrt(170);
-11/sqrt(170) - j*5/sqrt(170);
-11/sqrt(170) - j*7/sqrt(170);
-9/sqrt(170) - j*5/sqrt(170);
-9/sqrt(170) - j*7/sqrt(170);
-11/sqrt(170) - j*3/sqrt(170);
-11/sqrt(170) - j*1/sqrt(170);
-9/sqrt(170) - j*3/sqrt(170);
-9/sqrt(170) - j*1/sqrt(170);
-13/sqrt(170) - j*5/sqrt(170);
-13/sqrt(170) - j*7/sqrt(170);
-15/sqrt(170) - j*5/sqrt(170);
-15/sqrt(170) - j*7/sqrt(170);
-13/sqrt(170) - j*3/sqrt(170);
-13/sqrt(170) - j*1/sqrt(170);
-15/sqrt(170) - j*3/sqrt(170);
-15/sqrt(170) - j*1/sqrt(170);
-11/sqrt(170) - j*11/sqrt(170);
-11/sqrt(170) - j*9/sqrt(170);
-9/sqrt(170) - j*11/sqrt(170);
-9/sqrt(170) - j*9/sqrt(170);
-11/sqrt(170) - j*13/sqrt(170);
-11/sqrt(170) - j*15/sqrt(170);
-9/sqrt(170) - j*13/sqrt(170);
-9/sqrt(170) - j*15/sqrt(170);
-13/sqrt(170) - j*11/sqrt(170);
-13/sqrt(170) - j*9/sqrt(170);
-15/sqrt(170) - j*11/sqrt(170);
-15/sqrt(170) - j*9/sqrt(170);
-13/sqrt(170) - j*13/sqrt(170);
-13/sqrt(170) - j*15/sqrt(170);
-15/sqrt(170) - j*13/sqrt(170);
-15/sqrt(170) - j*15/sqrt(170)];
% Number of Symbols (Data Points)
N = 10000;
% Change this value and see how the result changes
SNR_dB = 30;
% Convert SNR from dB scale to Linear Scale
SNR_lin = 10 .^ (SNR_dB/10);
% Generate BPSK and AWGN
sBPSK = [];
for i = 1:N
idx = randi([1 length(BPSK)]);
sBPSK = [sBPSK BPSK(idx)];
end;
EavgBPSK = sum(abs(sBPSK) .^ 2)/N;
awgnSigmaBPSK = sqrt(EavgBPSK/(2*SNR_lin));
awgnBPSK = awgnSigmaBPSK*(randn(1,N)+j*randn(1,N));
yBPSK = sBPSK + awgnBPSK;
% Generate QPSK and AWGN
sQPSK = [];
for i = 1:N
idx = randi([1 length(QPSK)]);
sQPSK = [sQPSK QPSK(idx)];
end;
EavgQPSK = sum(abs(sQPSK) .^ 2)/N;
awgnSigmaQPSK = sqrt(EavgQPSK/(2*SNR_lin));
awgnQPSK = awgnSigmaQPSK*(randn(1,N)+j*randn(1,N));
yQPSK = sQPSK + awgnQPSK;
% Generate 16QAM and AWGN
sQAM16 = [];
for i = 1:N
idx = randi([1 length(QAM16)]);
sQAM16 = [sQAM16 QAM16(idx)];
end;
EavgQAM16 = sum(abs(sQAM16) .^ 2)/N;
awgnSigmaQAM16 = sqrt(EavgQAM16/(2*SNR_lin));
awgnQAM16 = awgnSigmaQAM16*(randn(1,N)+j*randn(1,N));
yQAM16 = sQAM16 + awgnQAM16;
% Generate 64QAM and AWGN
sQAM64 = [];
for i = 1:N
idx = randi([1 length(QAM64)]);
sQAM64 = [sQAM64 QAM64(idx)];
end;
EavgQAM64 = sum(abs(sQAM64) .^ 2)/N;
awgnSigmaQAM64 = sqrt(EavgQAM64/(2*SNR_lin));
awgnQAM64 = awgnSigmaQAM64*(randn(1,N)+j*randn(1,N));
yQAM64 = sQAM64 + awgnQAM64;
% Generate 256 QAM and AWGN
sQAM256 = [];
for i = 1:N
idx = randi([1 length(QAM256)]);
sQAM256 = [sQAM256 QAM256(idx)];
end;
EavgQAM256 = sum(abs(sQAM256) .^ 2)/N;
awgnSigmaQAM256 = sqrt(EavgQAM256/(2*SNR_lin));
awgnQAM256 = awgnSigmaQAM256*(randn(1,N)+j*randn(1,N));
yQAM256 = sQAM256 + awgnQAM256;
% Plot the constellation and noise for BPSK
subplot(1,5,1);
plot(real(yBPSK),imag(yBPSK),'ko','MarkerFaceColor',[0,0,0],'MarkerSize',1);
axis([-1.5 1.5 -1.5 1.5]);
hold on;
plot(real(BPSK),imag(BPSK),'ro','MarkerFaceColor',[1,0,0],'MarkerSize',2);
axis([-1.5 1.5 -1.5 1.5]);
title(strcat('SNR=',num2str(SNR_dB),'dB'));
hold off;
% Plot the constellation and noise for QPSK
subplot(1,5,2);
plot(real(yQPSK),imag(yQPSK),'ko','MarkerFaceColor',[0,0,0],'MarkerSize',1);
axis([-1.5 1.5 -1.5 1.5]);
hold on;
plot(real(QPSK),imag(QPSK),'ro','MarkerFaceColor',[1,0,0],'MarkerSize',2);
axis([-1.5 1.5 -1.5 1.5]);
title(strcat('SNR=',num2str(SNR_dB),'dB'));
hold off;
% Plot the constellation and noise for 16 QAM
subplot(1,5,3);
plot(real(yQAM16),imag(yQAM16),'ko','MarkerFaceColor',[0,0,0],'MarkerSize',1);
axis([-1.5 1.5 -1.5 1.5]);
hold on;
plot(real(QAM16),imag(QAM16),'ro','MarkerFaceColor',[1,0,0],'MarkerSize',2);
axis([-1.5 1.5 -1.5 1.5]);
title(strcat('SNR=',num2str(SNR_dB),'dB'));
hold off;
% Plot the constellation and noise for 64 QAM
subplot(1,5,4);
plot(real(yQAM64),imag(yQAM64),'ko','MarkerFaceColor',[0,0,0],'MarkerSize',1);
axis([-1.5 1.5 -1.5 1.5]);
hold on;
plot(real(QAM64),imag(QAM64),'ro','MarkerFaceColor',[1,0,0],'MarkerSize',2);
axis([-1.5 1.5 -1.5 1.5]);
title(strcat('SNR=',num2str(SNR_dB),'dB'));
hold off;
% Plot the constellation and noise for 256 QAM
subplot(1,5,5);
plot(real(yQAM256),imag(yQAM256),'ko','MarkerFaceColor',[0,0,0],'MarkerSize',1);
axis([-1.5 1.5 -1.5 1.5]);
hold on;
plot(real(QAM256),imag(QAM256),'ro','MarkerFaceColor',[1,0,0],'MarkerSize',2);
axis([-1.5 1.5 -1.5 1.5]);
title(strcat('SNR=',num2str(SNR_dB),'dB'));
hold off;