User:Duggabe: Difference between revisions

From GNU Radio
Jump to navigation Jump to search
No edit summary
mNo edit summary
 
(33 intermediate revisions by 3 users not shown)
Line 1: Line 1:
= Simulation example: BPSK Demodulation =
Barry Duggan is a graduate of Georgia Tech in Electrical Engineering and is a career computer programmer specializing in real-time control, data communication systems, and email security. He has been an amateur radio operator since 1953.


This tutorial is a follow-on to the [[Guided_Tutorial_PSK_Demodulation|'''Example Usage of GNU Radio: PSK Modulation / Demodulation''']] tutorial to present the use of BPSK rather than QPSK. <b>It is imperative that all</b> of the prerequisites are studied before doing this one.
Barry started working on the GNU Radio project in 2019 and now devotes most of his time doing Wiki documentation, and development of amateur radio applications. He is a member of the GRCon24 Organizing Committee.


== Prerequisites ==
Summary of programming languages used (roughly in chronological order):
 
* FORTRAN
* Tutorials:
* assembly languages of various computers
** [[Guided_Tutorial_Introduction|'''A brief introduction to GNU Radio, SDR, and DSP''']]
* COBOL
** [[Guided_Tutorial_Hardware_Considerations|'''Using GNU Radio with Hardware''']]
* C
** [[Guided_Tutorial_PSK_Demodulation|'''Example Usage of GNU Radio: PSK Modulation / Demodulation''']]
* Pascal
 
* HTML5
== Transmitting a Signal ==
* CSS3
 
* XML
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|Constellation Modulator block]], which uses a [[Constellation_Object|Constellation Object]] and other settings to control the transmitted signal.
* JavaScript
 
* JSON
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.
* node.js
 
* PHP
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.
* Python
 
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'.
 
[[File:Bpsk_stage1_fg.png|751 px]]
 
In the constellation plot, we see the effects of the [https://en.wikipedia.org/wiki/Upsampling 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.
 
[[File:Bpsk_stage1_out.png|800 px]]
 
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 [http://en.wikipedia.org/wiki/Raised-cosine_filter 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 [[Guided_Tutorial_PSK_Demodulation#Adding_Channel_Impairments|Adding Channel Impairments]].
 
== Recovering Timing ==
 
Here is the output for the BPSK:
 
[[File:Bpsk_stage3_out.png|800 px]]
 
== Phase and Fine Frequency Correction ==
 
== Decoding ==

Latest revision as of 16:37, 26 October 2023

Barry Duggan is a graduate of Georgia Tech in Electrical Engineering and is a career computer programmer specializing in real-time control, data communication systems, and email security. He has been an amateur radio operator since 1953.

Barry started working on the GNU Radio project in 2019 and now devotes most of his time doing Wiki documentation, and development of amateur radio applications. He is a member of the GRCon24 Organizing Committee.

Summary of programming languages used (roughly in chronological order):

  • FORTRAN
  • assembly languages of various computers
  • COBOL
  • C
  • Pascal
  • HTML5
  • CSS3
  • XML
  • JavaScript
  • JSON
  • node.js
  • PHP
  • Python