simpleFE can be used as a software defined radio (SDR) baseband system. It is equipped with an I+Q ADC and an I+Q DAC that runs at up to 7.5 MHz. You can build quite a few applications on top of simpleFE. Let’s start with the "hello world" of communication applications: BPSK modulation.
Suppose our message is a random sequence of bits, 01011101...
. The first step before sending this signal to air involves mapping those to symbols. BPSK modulation maps the bits to 1, -1, 1, -1, -1, -1, 1, -1, etc. Then the waveform is generated using the root raised cosine pulse shaping.
This aritcle explains the details of a typical pulse shaping design. The symbol rate R
is set to 100 kHz.
Now we will use simpleFE to make this waveform real! But first, download and install the software, load the firmware, and boot simpleFE.
SimpleFE is now ready to interface with GNURadio. Install GNURadio, then build and install gr-simplefe
, which is included in the source tree. After that, run:
gnuradio-companion
You will see that the simpleFE sink and source are now available.
Next, create a flow graph like this:
Set the Sample Rate to 1 MHz. This will mean that, for each symbol period, there will be 10 samples and thus the Samples/Symbol should set to 10. For BPSK, the number of constellation points is set to two, and there is no difference whether or not we use differential encoding. The raised cosine filter roll-off factor is set to 0.35. This means the bandwidth of the signal will be 50 k * 1.35
.
And that’s it! You’ve turned simpleFE into a BPSK modulator.
GNURadio is both powerful and easy to use. Once you are familiar with the various processing blocks, you will be dragging, dropping, and connecting them in no time, which is quite handy for certain types of research work.
But you can also write your own code, especially if you want to:
To get started, refer to the sample code in examples/bpsk
. But first, you will first need to compile libdsp:
cd libdsp
mkdir build
cd build
cmake ..
make
This will provide a block convolution engine using overlap-and-add. Next, go to examples/bpsk
and type:
make
./bpsk
You should see a waveform generated from the TX_I port:
We designed a simple Sallen-Key 500 kHz low pass filter. You can easily home brew this circuit yourself (or just use a breadboard, as it’s rather low frequency and the layout is not very important).
With this filter, the waveform now looks like:
Which is quite pretty!