Apply AWGN noise to QPSK-OFDM symbol
Your measurement of the symbol and noise energy is not correct.  Please note that the following is pseudo-code, not valid Python code.  EbN0_dB should be an input to this code, not an output.

Esymbol = sum(real(data*conj(data))) / numSymbolsInData
Eb = Es/numPayloadBitsPerSymbol
Eb_dB = 10*log10(Eb)
N0_dB = Eb_dB - EbN0_dB
N0 = (10.)**(N0_dB/10.)