SNR - Eb/No for FEC and OFDM

21 views (last 30 days)
Sergio Orasch
Sergio Orasch on 30 Nov 2023
Commented: Sergio Orasch on 14 Dec 2023
Hello,
I would like to perform a BER simulation hence I require the SNR for the awgn channel. I am using FEC (RS+CC) and OFDM. In addition QAM modulation is applied to the signal.
I am using following equation: It consists of the actual Eb/N0 + Bits/Symbol * Coding Rate - samples per symbol + message length/code length + (data carriers size / fft size + fft size/(fft size + cyclic prefix size))
I want to calculate the corresponding SNR of an actual data bit. Is this the correct formula?
Thanks a lot
snr_tot_dB = EbNo_tot + 10*log10(k*codeRate) - 10*log10(sps) + 10*log10(K/N) + (10*log10(DC/NFFT) + 10*log10(NFFT/(NFFT+NCP));
snr_tot = 10.^(snr_tot_dB./10);
awgnChanOut = awgn(OFDM_TX_serial,snr_tot,'measured','linear');

Answers (1)

Rich Simeon
Rich Simeon on 8 Dec 2023
Based on your question, you are looking to calculate the overall SNR to apply the correct amount of AWGN to the signal to produce a bit error rate curve. Also I will assume that the EbNo is the EbNo per OFDM subcarrier.
The coding rate is defined as the message length divided by the code length, so it appears you have that accounted for twice in your equation. I believe the "10*log10(K/N)" is redundant, since it is covered by "Coding Rate" and should be removed.
Also, cyclic prefix should not be included in the calculation. This is because the receiver will immediately remove samples related to the cyclic prefix when demodulating the signal. Because the receiver never sees the energy of those samples in the cyclic prefix, it should not count towards the SNR. So the last term in your equation should be removed as well.
You can refer to the documentation on the Communictions Toolbox function convertSNR (convertSNR) to see more of an explanation on how EbNo is calculated. Also, there is an explanation for how SNR is calculated in multicarrier (OFDM) systems. You have correctly included the "+10*log10(DC/NFFT)" factor in your calculation (this assumes that all subcarriers are transmitting at the same power) to account for the possibility that not all subcarriers will be filled with energy.
Finally, it is not necessary to compute the linear SNR value for the awgn function. By default, the awgn function accepts SNR in dB, so you may use this instead:
awgnChanOut = awgn(OFDM_TX_serial,snr_tot_dB,'measured');
  1 Comment
Sergio Orasch
Sergio Orasch on 14 Dec 2023
Hi Simeon,
thanks for your answer! I would like to share my thoughts with you.
The coding rate is defined as the message length divided by the code length, so it appears you have that accounted for twice in your equation. I believe the "10*log10(K/N)" is redundant, since it is covered by "Coding Rate" and should be removed.
I included the term 10*log10(k*codeRate) for the convolutional coder. The term 10*log10(K/N) refers to the Reed-Solomon Coder hence K = Message Length, N = Code Length. As far as I know this term needs to be added since two channel codes are implemented.
I tried out some stuff and I came up with this equation
BER.snr_tot_dB = BER.EbNo_tot + 10*log10(BER.param.bps*BER.param.codeRate) - 10*log10(BER.param.sps) + ...
10*log10(BER.param.messagelength/BER.param.codelength) + (10*log10(BER.param.DCsize_burst/BER.param.FFTsize_burst) ...
- 10*log10(BER.param.FFTsize/BER.param.OFDM_symbolsize));
it's basically the same as seen in my question however the sign of the last term changed. I performed a OFDM AWGN channel scenario and compared it to the theoretical BER. The results seem to be accurate as seen in the attached figure. The corresponding formula can be found in the figure.
Finally, it is not necessary to compute the linear SNR value for the awgn function. By default, the awgn function accepts SNR in dB, so you may use this instead
Oh thanks for the info!
Best regards
Sergio

Sign in to comment.

Categories

Find more on Propagation and Channel Models in Help Center and File Exchange

Products


Release

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!