From GNU Radio
Revision as of 13:37, 23 August 2020 by Duggabe (talk | contribs)
Jump to: navigation, search

Simulation example: BPSK Demodulation

This tutorial is a follow-on to the Example Usage of GNU Radio: PSK Modulation / Demodulation tutorial to present the use of BPSK rather than QPSK. It is imperative that all of the prerequisites are studied before doing this one.


Transmitting a Signal

The first stage is transmitting the BPSK signal. We generate a stream of bits and modulate it onto a complex constellation. To do this, we use the Constellation Modulator block, which uses a Constellation Object and other settings to control the transmitted signal.

The constellation object allows us to determine how the symbols are coded. The modulator block can then use this modulation scheme with or without differential encoding. The constellation modulator expects packed bytes, so we have a random source generator providing bytes with values 0 - 255.

When dealing with the number of samples per symbol, we want to keep this value as small as possible (minimum value of 2). Generally, we can use this value to help us match the desired bit rate with the sample rate of the hardware device we'll be using. Since we're using simulation, the samples per symbol is only important in making sure we match this rate throughout the flowgraph. We'll use 4 here, which is greater than what we need, but useful to visualize the signal in the different domains.

Finally, we set the excess bandwidth value. The constellation modulator uses a root raised cosine (RRC) pulse shaping filter, which gives us a single parameter to adjust the roll-off factor of the filter, often known mathematically as 'alpha'.

Bpsk stage1 fg.png

In the constellation plot, we see the effects of the up-sampling (generating 4 samples per symbol) and filtering process. Note that all of the points lie along the In-phase axis. The RRC filter adds intentional self-interference, known as inter-symbol interference (ISI). ISI is bad for a received signal because it blurs the symbols together. We'll look into this in-depth during the timing recovery section. Right now, let's just see what we're doing to the signal. If you are just looking at the transmitted signals from this graph, then you should see that the frequency plot is showing a signal with a nice shape to it and that rolls-off into the noise. If we didn't put a shaping filter on the signal, we would be transmitting square waves that produce a lot of energy in the adjacent channels. By reducing the out-of-band emissions, our signal now stays nicely within our channel's bandwidth.

Bpsk stage1 out.png

On the receive side, we get rid of the ISI by using another RRC filter. Basically, what we've done is used a filter on the transmitter, the RRC filter, that creates the ISI but controls the bandwidth and then another RRC filter at the receiver. When we convolve the two RRC filters, we get a raised cosine filter. The output of the receive-side RRC filter is a raised cosine shaped signal with minimized ISI.

Adding Channel Impairments

Adding channel impairments is exactly the same as described in the QPSK tutorial section Adding Channel Impairments.

Recovering Timing

Here is the output for the BPSK:

Bpsk stage3 out.png

Phase and Fine Frequency Correction