Frequency Shifting

From GNU Radio
Jump to navigation Jump to search
Beginner Tutorials

Introducing GNU Radio

  1. What is GNU Radio?
  2. Installing GNU Radio
  3. Your First Flowgraph

Flowgraph Fundamentals

  1. Python Variables in GRC
  2. Variables in Flowgraphs
  3. Runtime Updating Variables
  4. Signal Data Types
  5. Converting Data Types
  6. Packing Bits
  7. Streams and Vectors
  8. Hier Blocks and Parameters

Creating and Modifying Python Blocks

  1. Creating Your First Block
  2. Python Block With Vectors
  3. Python Block Message Passing
  4. Python Block Tags

DSP Blocks

  1. Low Pass Filter Example
  2. Designing Filter Taps
  3. Sample Rate Change
  4. Frequency Shifting
  5. Reading and Writing Binary Files

SDR Hardware

  1. RTL-SDR FM Receiver
  2. B200-B205mini FM Receiver

This tutorial describes how to perform frequency shifting, causing the frequency of a signal to change.

Frequency shifting is useful in several scenarios, including:

  • avoiding the LO feedthrough signal present on many SDRs
  • tuning within an IQ file, where its not possible to tune using a hardware-based tuner
  • tuning at frequency resolutions that are not possible with the available hardware-based tuners

The previous tutorial, Sample Rate Change, describes how to both increase and decrease the sampling rate. The next tutorial, Reading and Writing Binary Files, describes how to read and write radio waveform captures as binary files.

Frequency Shifting

Frequency shifting is the process of changing the position of a signal within the frequency domain. Equivalently, it can be stated that frequency shifting is the process of changing the center frequency of a signal. Frequency shifting can be implemented many different ways, although this tutorial will focus on the simple method of multiplication by a complex sinusoid.

Multiplying a signal by a complex sinusoid with frequency f Hz will translate or shift the center frequency of the signal by f Hz. For example, to frequency shift a signal by 1 MHz a complex signal must be generated with frequency 1 MHz, and then multiplied against the desired signal in order to frequency shift it.

Build Example Signal

First an example signal needs to be built. A simple signal of filtered noise is created. Drag in the following blocks and connect them:

  • Noise Source
  • Throttle
  • Low Pass Filter
  • QT GUI Frequency Sink

Frequency shifting flowgraph.png

The flowgraph is an offline simulation to the choice of sampling rate is somewhat arbitrary, but a sample rate of 10 MHz is chosen to realistic number.

Frequency shifting samp rate properties.png

The low-pass filter properties are updated to define the cutoff frequency and transition width:

  • Cutoff Freq: samp_rate/8
  • Transition Width: samp_rate/16

Frequency shifting low pass properties.png

Running the flowgraph then displays a simulated signal:

Frequency shifting example signal.png

The signal has not been shifted yet and therefore has a center frequency of 0 Hz.

Create Complex Sinusoid

A complex sinusoid is added to the flowgraph which will be used later to perform the frequency shifting. Add the following blocks and connect them to the flowgraph:

  • Variable
  • Signal Source

Frequency shifting flowgraph sinusoid.png

The flowgraph is an offline simulation to the choice of sampling rate is somewhat arbitrary, but a sample rate of 10 MHz is chosen to be a realistic number.

Frequency shifting new center frequency properties.png

The variable new_center_frequency is then used for the frequency in the signal source block:

Frequency shifting signal source properties.png

Increase the number of ports on the QT GUI Frequency Sink:

Frequency shifting frequency sink properties.png

Now run the flowgraph:

Frequency shifting run flowgraph.png

You can now see the new complex sinusoid that has been created and displayed in red:

Frequency shifting signal and complex sinusoid.png

The frequency shifting process will apply the blue signal against the red complex sinusoid, centering it at 1 MHz.

Perform Frequency Shifting

Add the Multiply block into the flowgraph and connect it such that it accepts the outputs from Low Pass Filter and Signal Source:

Frequency shifting flowgraph multiply.png

The multiply block now performs the frequency shifting, moving the center frequency of the signal up to 1 MHz. Running the flowgraph shows the input signal centered at 0 Hz and the frequency shifted version at 1 MHz:

Frequency shifting centered 1MHz.png

The frequency shifted value can be positive or negative. Update the new_center_frequency variable to be -3 MHz:

Frequency shifting update new center frequency.png

Running the flowgraph now shows the signal centered at -3 MHz:

Frequency shifting neg 3MHz.png

A QT GUI Range block can be used to change the center frequency in real time. Right click on the new_center_frequency and select Disable:

Frequency shifting disable variable block.png

The block will now be grayed out.

Add a QT GUI Range block to the flowgraph:

Frequency shifting qt gui range block.png

Open the QT GUI Range block and update the following properties:

  • ID: new_center_frequency
  • Default Value: 0
  • Start: -samp_rate/2
  • Stop: samp_rate/2

Frequency shifting qt gui range properties.png

Save the properties and run the flowgraph. The QT pop up window will now display a slider bar at the top which can be clicked and slid around to change the frequency and therefore move the frequency shifted signal. The text box can also be modified to set a specific center frequency:

Frequency shifting slider bar.png

The next tutorial, Reading and Writing Binary Files, describes how to read and write radio waveform captures as binary files.