# GMSK/GFSK BER simulation in GNU Radio : How to specify signal energy

In GNU Radio, BER vs SNR can be measured by fixing the signal energy and varying the amplitude of the noise source block. For example, in BPSK, we have transmitted signal $s\left(t\right)$ with a given bit energy $E_{s}$ and symbol period $T_{s}$

# $s\left(t\right) = \sqrt{\frac{2E_{s}}{T_{s}}} \cos\left(2\pi f_{c}t + \phi _{n}\right)$

I calculated the average energy of this signal as

# $E_{avg} = \frac{\left(\sqrt{\frac{2E_{s}}{T_{s}}}\right)^{2} + \left(\sqrt{\frac{2E_{s}}{T_{s}}}\right)^{2}}{2} = \frac{2E_{s}}{T_{s}} = \frac{2E_{s}}{SamplesPerSymbol} = \frac{2\times 1}{SamplesPerSymbol}$

Given noise spectral density $N_{o}$, The SNR can be calculated as

# $SNR = 10\log\left(\frac{\frac{2E_{s}}{T_{s}}}{N_{o}}\right)$

The noise voltage amplitude is then calculated as

# $V_{n} = \sqrt{\frac{N_{o}}{2}} = \sqrt{\frac{1}{SamplesPerSymbol\times 10^{SNR/10} }}$

The analysis above works perfectly for BPSK.

Below is a flowgraph I use for running BER vs SNR tests for GFSK/GMSK. The sample rate is fixed at 2M. A GFSK transmitted signal $s\left(t\right)$ with a given bit energy $E_{s}$ and symbol period $T_{s}$ is given by (in IQ format)

# $s\left(t\right) = \sqrt{\frac{2E_{s}}{T_{s}}}[ \cos \phi\left(\alpha , t \right)\cos\left(2\pi f_{c}t\right) - \sin \phi\left(\alpha , t \right)\sin\left(2\pi f_{c}t\right)]$

By looking at the output of the GFSK modulator, the signal level amplitude is in the $\pm 1$ range no matter how many samples I used. I, therefore, decided that the average energy is

# $E_{avg} = \frac{1^{2} + 1^{2}}{2} = 1$

Using the average energy above, noise voltage amplitude is now

# $V_{n} = \sqrt{\frac{N_{o}}{2}} = \sqrt{\frac{1}{2\times 10^{SNR/10}}}$

As you might have guessed, it doesn't work as I hoped. The BER gets better when I increase the number of samples per symbol. In one case, I used 100 samples per symbol at 0dB SNR and the BER was 0.

My question is how to calculate $E_{avg}$ for GFSK/GMSK?

Regards, M.