Transmission of xQAM with additive white Gaussian noise

To simulate a transmission of QPSK // 16QAM // 64QAM // 256QAM other a white additive Gaussian noise and display the received constellation, the following code can be used

Transmitter

using Plots
# --- Parameters
snr       = 20;
mcs       = 16;
nbBits    = 1024* Int(log2(mcs));
# --- Binary sequence generation
bitSeq    = genBitSequence(nbBits);
# --- QPSK mapping
qamSeq    = bitMappingQAM(mcs,bitSeq); nothing

Channel

#  --- AWGN
# Theoretical power is 1 (normalized constellation)
qamNoise,  = addNoise(qamSeq,snr,1); nothing

Receiver

# --- Binary demapper
bitDec  = bitDemappingQAM(mcs,qamNoise);
# --- BER measure
ber   = sum(xor.(bitDec,bitSeq)) /length(bitSeq);
# --- Display constellation
plt   = scatter(real(qamNoise),imag(qamNoise),label="Noisy");
scatter(plt,real(qamSeq),imag(qamSeq),label="Ideal");
xlabel!("Real part");
ylabel!("Imag part");

It plots the received constellation impaired by noise (here a 20dB SNR is used) Constellation