I would like to calculate $E_b/N_0$ when the code rate is $R_c$ for BPSK signal. What I got this

$$ E_b/N_0= \frac{1}{2R_mR_c \sigma^2} $$ and that is the case also according to this page.

$R_m=1$ for BPSK and $\sigma$ is standard deviation of the noise. Therefore I can say new $E_b/N_0$ is equal to old $E_b/N_0$ multiplied by $1/R_c$, therefore in $\log$ scale $$ {E_bN_0}_{[\rm db]}={E_bN_0}_{[\rm db]}(\textrm{old})-10\log10(R_c) $$ however this is different from what MATLAB help says since according to them

CodedEbNo = UncodedEbNo + 10*log10(codeRate);
  • Can anyone explain where might be the problem?
  • And why my equation is not the same as Matlab help?

1 Answer 1


The energy per bit, $E_b$, is independent of the coding rate. Note that $E_b$ measures the energy per transmitted information bit, not per transmitted symbol.

Let's say you're willing to spend one joule per information bit, so $E_b=1$. You use uncoded BPSK, so that each transmitted symbol carries one bit of information and so it also has energy one. Let us say that $E_s=1$, where the subscript $s$ denotes "symbol". Let us further assume that you're operating at an SNR per bit of 10 dB; that is, $E_b/N_0=1/0.1=10$.

Now you decide to try a repetition code, with three repetitions per bit. With this code, a bit 1 is transmitted as three consecutive positive symbols, and a bit 0 as three negative symbols. If you're unwilling to increase the energy per bit, then each symbol must have energy equal to 1/3 of a joule: $E_s=1/3$. In this way, you still have $E_b=3E_s=1$.

Now, in the channel, the SNR of each symbol will be reduced: since each symbol has energy 1/3, then each symbol has SNR $E_s/N_0 = (1/3)/0.1 = 5.2 \text{ dB}$. However, the SNR per information bit hasn't changed; it remains $E_b/N_0=1$.

  • $\begingroup$ Are you suggesting that both above equation and Matlab help are wrong ? becasue they derive that equation according to EbN0. However I wonder can you tell me which one makes sense to you, assuming EsN0 not EbN0? $\endgroup$
    – justin
    Commented Aug 22, 2016 at 18:37
  • 1
    $\begingroup$ The equations in your question are not wrong, they just make different assumptions, and they confuse matters by not identifying clearly the SNR per information bit $E_b/N_0$ and the SNR of the transmitted symbols $E_s/N_0$. If you look closely at what I did, you'll see that it matches the first equation in your question. MATLAB's equation, though, is assuming that you want to keep the symbol energy constant ($E_s=1$) and increase $E_b$, so that in my example you'd end up with $E_b=3E_s$. This is confusing, but just keep your definitions clear and consistent, and it'll make sense in the end. $\endgroup$
    – MBaz
    Commented Aug 22, 2016 at 18:46
  • $\begingroup$ Just one question, If I just receive a signal with a given EbN0 how do I know which one (is bit energy kept constant or symbol energy )used in them ? Since now I have a coded EbNo and I would like to know what is the uncoded EbN0 ? $\endgroup$
    – justin
    Commented Aug 22, 2016 at 19:30
  • $\begingroup$ I'd suggest looking into the problem, the definitions and what is being assumed. If the EbN0 given to you is measured at the matched filter's output, then it refers to symbol energy to noise power. If it's looking at data after a decoder, then it's probably bit energy to noise power. $\endgroup$
    – MBaz
    Commented Aug 22, 2016 at 19:35
  • 1
    $\begingroup$ I think the confusing thing with the Matlab example linked to in the question is that there, by CodedEbNo they mean the ratio of the channel bit energy to $N_0$, whereas UncodedEbNo refers to the actual information bit energy. $\endgroup$
    – Matt L.
    Commented Aug 22, 2016 at 19:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.