Editing Guided Tutorial GRC

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
 +
<. [[Guided_Tutorial_Introduction|Previous: Introduction]]
 +
>. [[Guided_Tutorial_GNU_Radio_in_Python|Next: Programming GNU Radio in Python]]
 +
 +
= Tutorial: GNU Radio Companion =
 +
 
== Objectives ==
 
== Objectives ==
  
 
* Create flowgraphs using the standard block libraries
 
* Create flowgraphs using the standard block libraries
 
* Learn how to debug flowgraphs with the instrumentation blocks
 
* Learn how to debug flowgraphs with the instrumentation blocks
 +
* Understand how sampling and throttle works in GNU Radio
 
* Learn how to use the documentation to figure out block's functionality
 
* Learn how to use the documentation to figure out block's functionality
  
 
== Prerequisites ==
 
== Prerequisites ==
  
 +
* Basic knowledge of git
 
* [[InstallingGR|GNU Radio 3.8.0.0 or later]]
 
* [[InstallingGR|GNU Radio 3.8.0.0 or later]]
* [[Guided_Tutorial_Introduction|A brief introduction to GNU Radio, SDR, and DSP]]
+
* [[Guided_Tutorial_Introduction|Tutorial 1: Intro to GNU Radio]]
 +
 
 +
 
 +
-----
 +
 
 +
== Setting up the Tutorials ==
 +
 
 +
Before we can begin, we need to mention that the solutions (including the images, grc files, and module files) are available on [https://github.com/gnuradio/gr-tutorial gr-tutorial github] if you wish to have them.  We will be referencing the files but will for the most part be making our own files so that we can get practice and build intuition.  Thus, we recommend not downloading and installing them until you finish these tutorials or are stuck on a step.  For instructions on installing these solutions, see [[Installing the Tutorials Modules]].
  
 
== Getting to Know the GRC ==
 
== Getting to Know the GRC ==
  
We have seen in [[Guided_Tutorial_Introduction|A brief introduction to GNU Radio, SDR, and DSP]] that GNU Radio is a collection of tools that can be used to develop radio systems in software as opposed to completely in hardware. In this tutorial, we start off simply and explore how to use the GNU Radio Companion (GRC), GNU Radio's graphical tool, to create different tones. We should keep in the back of our mind that GRC was created to simplify the use of GNU Radio by allowing us to create python files graphically as opposed to creating them in code alone (we will discuss this more later).
+
We have seen in Tutorial 1 that GNU Radio is a collection of tools that can be used to develop radio systems in software as opposed to completely in hardware. In this tutorial, we start off simple and explore how to use the GNU Radio Companion (GRC), GNU Radio's graphical tool, to create different tones. We should keep in the back of our mind that GRC was created to simplify the use of GNU Radio by allowing us to create python files graphically as opposed to creating them in code alone (we will discuss this more later).
  
The first thing to cover is the interface. There are five parts: <span style="color:gray">Library</span>, <span style="color:red">Toolbar</span>, <span style="color:green">Terminal</span>, <span style="color:blue">Workspace</span> and <span style="color:rgb(255,200,0)"> variables.
+
The first thing to cover is the interface. There are five parts: <span style="color:gray">Library</span>, <span style="color:red">Toolbar</span>, <span style="color:green">Terminal</span>, <span style="color:blue">Workspace</span> and <span style="color:yellow"> variables.
  
 
[[File:unity-2d-shell_008.png|600px|]]
 
[[File:unity-2d-shell_008.png|600px|]]
  
The tutorial is meant to be hands on, so please take a few breaks from reading here and there to experiment. We will reiterate that these tutorials are simply meant as guides and that the best way to learn something is to try it out: come up with a question, think of a possible solution, and try it out. Let us begin by starting up the GRC! This is usually done by opening up a terminal window (ctrl+alt+t in Ubuntu) and typing:
+
The tutorial is meant to be hands on, so please take a few breaks from reading here and there to experiment. We will reiterate that these tutorials as simply meant as guides and that the best way to learn something is to try it out: come up with a question, think of a possible solution, and try it out. Let us begin by starting up the GRC! This is usually done by opening up a terminal window (ctrl+alt+t in Ubuntu) and typing:
  
 
<pre>$ gnuradio-companion</pre>
 
<pre>$ gnuradio-companion</pre>
Line 25: Line 39:
 
=== Searching for Blocks ===
 
=== Searching for Blocks ===
  
The Library contains the different blocks installed in the GRC block paths. Here we find blocks that are preinstalled in GNU Radio and blocks that are installed on the system. At first it seems daunting to look for blocks. For instance, if we want to generate a waveform, what category should we look in? We see there is a '''Waveform Generators''' category, okay not bad. But what if we wanted to find some way to display our data but aren't sure of the best way to display it yet? We know from [[Guided_Tutorial_Introduction|A brief introduction to GNU Radio, SDR, and DSP]] that this is known as a sink; however, looking through the list there is no Sinks category. The solution is to use the Search feature by either clicking the magnifying glass icon or typing Ctrl+f and then start typing a keyword to identify the block. We see a white box appear at the top of the Library with a cursor. If we type &quot;sink&quot;, we can find all the blocks that contain the words &quot;sink&quot; and the <span style="color:blue">categories</span> where we will find each block.
+
The Library contains the different blocks installed in the GRC block paths. Here we find blocks that are preinstalled in GNU Radio and blocks that are installed on the system. At first it seems daunting to look for blocks. For instance, if we want to generate a waveform, what category should we look in? We see there is a '''Waveform Generators''' category, okay not bad. But what if we wanted to find some way to display our data but aren't sure of the best way to display it yet? We know from tutorial 1 that this is known as a sink; however, looking through the list there is no Sinks category. The solution is to use the Search feature by either clicking the magnifying glass icon or typing Ctrl+f and then start typing a keyword to identify the block. We see a white box appear at the top of the Library with a cursor. If we type &quot;sink&quot;, we can find all the blocks that contain the words &quot;sink&quot; and the <span style="color:blue">categories</span> we will find each block in.
  
 
[[File:search.png|200px|]]
 
[[File:search.png|200px|]]
Line 52: Line 66:
  
 
Another key to notice is the different colors present in the fields we can enter information. These actually correspond to different data types which we will cover later in this tutorial.
 
Another key to notice is the different colors present in the fields we can enter information. These actually correspond to different data types which we will cover later in this tutorial.
 
=== Variable Controls ===
 
 
Certain parameters of a block can be modified during run-time. They are denoted in the Parameters section with <b>(''R'')</b> following the parameter name.
 
 
As shown in this screen capture, the parameters 'Taps' and 'Center Frequency' are underlined, denoting that they can be changed during run-time.
 
 
[[File:SSB_test_FIR_parms.png]]
 
  
 
=== My First Flowgraph ===
 
=== My First Flowgraph ===
Line 89: Line 95:
 
[[File:size_mismatch.png|600px|]]
 
[[File:size_mismatch.png|600px|]]
  
We see that <span style="color:green">in the specified connection, there is size mismatch.</span> This is due to our data type size mismatch. GNU Radio will not allow us to chain together blocks of different data sizes, so let's change the data type of all of our subsequent blocks. We can now generate and execute as before. We now see our sine wave on one channel.
+
We see that <span style="color:green">in the specified connection, there is size mismatch.</span> This is due to our data type size mismatch. GNU Radio will not allow us to chain together blocks of different data sizes, so let's change the data type of all of our subsequent blocks. We can now generate and execute as before.
  
 
[[File:tutorial_two_2.png|600px|tutorial_two_2.grc]]
 
[[File:tutorial_two_2.png|600px|tutorial_two_2.grc]]
 +
 +
We now see our sine wave on one channel. We can click on the screen and move the mouse to zoom and rescale.
 +
 +
== A More Complex Flowgraph ==
 +
 +
Now that we are able to create flowgraphs on our own, lets try creating a more complicated flowgraph with many specific parameters.  This example flowgraph demonstrates many new concepts in GNU Radio like using tabbed windows and QT GUI Ranges.  Note that not all block parameters are displayed in the main window, so use the text below (not just the screenshot) to set the parameters of each block.
 +
 +
=== Time &amp; Frequency Flowgraph ===
 +
 +
[[File:tutorial_two_3.png|600px|tutorial_two_3.grc]]
 +
 +
Detailed Changes:<br />
 +
<span style="color:gray">- We are starting a new flowgraph with '''ID''' &quot;tutorial_two_3&quot;</span><br />
 +
<span style="color:blue">- In '''QT GUI Range''', '''ID''' to &quot;samp_rate&quot;, '''Default Value''' to &quot;5*freq&quot;, '''Start''' to &quot;0.5*freq&quot;, '''Stop''' to &quot;20*freq&quot;, '''Step''' to &quot;200&quot;</span><br />
 +
<span style="color:green">- In '''Variable''', '''ID''' to &quot;freq&quot;, '''Value''' to &quot;2e3&quot;</span><br />
 +
<span style="color:purple">- In '''Signal Source''', '''Frequency''' to &quot;freq&quot;, '''Waveform''' to &quot;Sine&quot;</span><br />
 +
</span><br />
 +
- In '''Throttle''', '''Sample Rate''' to 32e3 (more on why later)
 +
 +
Once we have verified our changes, let's '''Generate''', and '''Execute'''. It should produce a window that has two tabs, one showing the time domain and one showing the frequency domain.  There should also be a slider at the bottom to control the sample rate (of the signal source) in realtime.  Changing this slider should change the observed frequency in the time and frequency sinks.
 +
 +
Sampling rate is an interesting subject in GNU Radio -- and, indeed, any software radio platform. Please see the [[Guided_Tutorial_Extras_Sample_Rates|Extras on Sampling Rate]] page that explores how changing the sample rates in the above flowgraph affects the signals.
 +
 +
== Conclusion ==
 +
 +
And that is it for now with GRC. Let us know your thoughts before going on to the [https://wiki.gnuradio.org/index.php/Guided_Tutorial_GNU_Radio_in_Python python] tutorial.
 +
 +
=== Some Questions We Now Know! ===
 +
 +
1. If you put down a Signal Source and Abs block onto a canvas and connect them together without changing anything, an error occurs.<br />
 +
1a. How do we know there is an error?<br />
 +
1b. How do we figure out what the error is?<br />
 +
1c. How do we correct the error?
 +
 +
2. Say that we have two signals in our flowgraph that we wish to multiply together.<br />
 +
2a. How would we find a block that multiplies signals?<br />
 +
2b. How do we use the multiply block in GRC?<br />
 +
2c. What else can we do and change in this block?
 +
 +
3. If you saw a block had an unused, light gray input port on it, what kind of port would that be?
 +
 +
4. If you run a flowgraph and see the &quot;AttributeError: 'top_block_sptr' object has no attribute 'top_layout'&quot;, what is wrong and how can you fix it?
 +
 +
5. Signal processing questions
 +
 +
* Say we want to process speech audio data, and we have a microphone that won't let any frequencies in higher than 8 kHz. What is the minimum sampling rate we must use?
 +
* Now we want to digitize a radio signal that goes from 99.9 MHz to 100.1 MHz. How large is the minimum applicable sampling rate?
 +
 +
6. Answers
 +
* 16 kHz (2 * 8 kHz)
 +
* The bandwidth is 200 kHz, so we must sample at least at 400 kHz -- or 200 kHz if we have complex sampling, as we usually do in software radios.<br />
 +
 +
 +
=== Links to Further Resources ===
 +
 +
Links that are accessible without knowing much about how GNU Radio interacts with code. Not necessary to proceed.
 +
 +
* [[TutorialsCoreConcepts|Core Concepts]]
 +
* [[Hardware|Hardware]]
 +
 +
[[Category:Guided Tutorials]]
 +
 +
 +
 +
-----
 +
&lt;. [[Guided_Tutorial_Introduction|Previous: Introduction]]
 +
&gt;. [[Guided_Tutorial_GNU_Radio_in_Python|Next: Programming GNU Radio in Python]]
  
 
[[Category:Guided Tutorials]]
 
[[Category:Guided Tutorials]]

Please note that all contributions to GNU Radio are considered to be released under the Creative Commons Attribution-ShareAlike (see GNU Radio:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel | Editing help (opens in new window)