How to explain this BER vs SNR behaviour?
In a BPSK system, the SNR at the output of the receiver's matched filter is $$\text{SNR}=\frac{E_b}{\sigma^2_n}.$$ In this formula, $E_b$ is the energy used to transmit one bit, and $\sigma_n^2$ is the power of the noise at the filter output.

Assuming an AWGN channel, the noise process at the filter input has constant PSD; this value is usually denoted $N_0/2$. The Wiener-Khinchine theorem relates the PSD and $\sigma_n^2$: $$\sigma_n^2=\frac{N_0}2,$$ so the SNR may be written as $$\text{SNR}=\frac{2E_b}{N_0}.$$

Note that the convention is to plot the bit error rate vs $E_b/N_0$ (note the missing $2$ in the numerator). The reason is that for quadrature systems, the total noise power in the receiver is $N_0$.

In a coded system, each information bit is transmitted using several coded bits. For example, a Hamming (7,4) code uses 7 coded bits to transmit 4 information bits; the code rate is $R=4/7$. In gneral, $R=k/n$, for a code that transmits $k$ information bits using $n$ coded bits.

To make a fair comparison between different codes, we usually keep $E_b$ constant. This means that the energy of each code bit depends on the code rate: $$E_c=RE_b,$$ or $E_b=E_c/R$.

In simulation, it is often convenient to set $E_c=1$. Then, we have $$\frac{E_b}{N_0}=\frac{E_b}{2\sigma_n^2}=\frac{E_c}{2R\sigma_n^2}=\frac{1} {2R\sigma_n^2}.$$