# AWGN noise variance in upsampled BPSK signal

When I simulate BER for basic PSK schemes, I set the IQ complex noise variance to

$$\sigma^{2} = \frac{E_{s}}{2*R_{m}*R_{c}}*\left( \frac{Eb}{No}\right)^{-1}$$

where

$$E_{s}$$ = Energy per modulated symbol

$$R_{m}$$ = Modulation rate (1 for BPSK, 2 for QPSK)

$$R_{c}$$ = Coding rate

I have now introduced shaping and matched filters as shown below. Both filters have 0 dB DC gain (the SRRC Filter from GNU Radio Firdes Class). I was wondering what value of noise variance $$\sigma^{2}_{N}$$ I should use in this case. I have tried to use $$\sigma^{2}_{N} = \frac{\sigma^{2}}{N}$$ but it gives different values for different values of N.

• but $E_S$ already is "Energy per modulated symbol", i.e. it's the constellation point magnitude times the pulse energy – nothing changes in principle! Aug 4, 2021 at 13:13
• Okay. But in the first case, $E_{s}$ is just average energy from the constellation (before pulse shaping). That is $(1^{2} + 1^{2})/2$ for BPSK. The question is what will be the value of $E_{s}$ after upsampling by N by the SRRC filter? Aug 5, 2021 at 9:09
• I’m quite curious, did you progress on this? Aug 16, 2021 at 10:18

I think the problem is caused by the oversampling issue. Let us say $$\gamma = E_s/N_o$$ is the SNR where $$E_s$$ is the energy per symbol and $$N_o$$ is the power of the noise per sample). First thing to be checked is whether the symbol mapping is performed to satisfy unit average energy per symbol. Secondly,please check that your pulse shaping filter taps (array) have unit energy. Let filter taps are denoted by $$\mathbf{h} = [h_1,h_2,\dots,h_N]$$. You can easily check the energy of the filter taps by $$E_h = \sum_{i=1}^N |h_i|^2$$ or in python
E_h = np.mean(np.abs(h)**2)

If the value is not equal to 1, than you can simply normalize the taps as $$\mathbf{h}_{normalized} = \mathbf{h}/\sqrt{E_h}$$ or in python
h_normalized = h/np.sqrt(E_h)