DSP Basics Tutorial: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 3: | Line 3: | ||
# Open the attached .grc file. This is the starting point that you will work off of, it just includes a special source I made, and a time and frequency sink (GUI). | # Open the attached .grc file. This is the starting point that you will work off of, it just includes a special source I made, and a time and frequency sink (GUI). | ||
# Run the flowgraph and use the time sink to figure out what this special source is outputting. What it's doing is creating 1's and 0's randomly (the 1's and 0's repeat for 15 samples), for the real part of the IQ signal (I), and then zeros for the imaginary part of the IQ signal (Q). This is called "On Off Keying" because we're just turning the I part of the signal on and off randomly (and we are leaving Q at zero). | # Run the flowgraph and use the time sink to figure out what this special source is outputting. What it's doing is creating 1's and 0's randomly (the 1's and 0's repeat for 15 samples), for the real part of the IQ signal (I), and then zeros for the imaginary part of the IQ signal (Q). This is called "On Off Keying" because we're just turning the I part of the signal on and off randomly (and we are leaving Q at zero). | ||
# When we | # When we receive anything in the real world there will be noise added. So lets add some noise. Add a "noise source" block with amplitude 0.1. The amplitude adjusts how strong the noise is. | ||
# Lets add this noise to our sinusoid to see what it looks like in the time and frequency domain. Use the "add" block, the inputs should be the signal source and the noise source. Reconnect the time and frequency sink to the output of the add block. | # Lets add this noise to our sinusoid to see what it looks like in the time and frequency domain. Use the "add" block, the inputs should be the signal source and the noise source. Reconnect the time and frequency sink to the output of the add block. | ||
# Run the flowgraph and note what changed in both time and frequency. | # Run the flowgraph and note what changed in both time and frequency. | ||
Line 13: | Line 13: | ||
# Add an "Add Const" block right after the On Off Keying source. This block lets us add a constant value to our signal. Use a "constant" of -0.5 So this is more of a subtract constant block. | # Add an "Add Const" block right after the On Off Keying source. This block lets us add a constant value to our signal. Use a "constant" of -0.5 So this is more of a subtract constant block. | ||
# Run the flowgraph and look at the signal in the time domain. It should be centered around zero now. In the frequency domain we should see no more spike at DC. Good job, we are finally transmitting a "decent" signal! | # Run the flowgraph and look at the signal in the time domain. It should be centered around zero now. In the frequency domain we should see no more spike at DC. Good job, we are finally transmitting a "decent" signal! | ||
# If you haven't realized it by now, we are essentially simulating a wireless transmitter. The chain of blocks going into the top port of the Add block is like our transmitter. The Add block combined with the Noise Source is like a simulated wireless channel that adds noise. The Time and Frequency sink show us what we might see at a | # If you haven't realized it by now, we are essentially simulating a wireless transmitter. The chain of blocks going into the top port of the Add block is like our transmitter. The Add block combined with the Noise Source is like a simulated wireless channel that adds noise. The Time and Frequency sink show us what we might see at a receiver. | ||
# Right now this signal is centered around DC (in the frequency domain). The center of the signal is at 0 Hz. Also, there are negative frequencies. This is all because we generated the signal at "baseband". This may or may not be a problem. When we transmit a signal with an SDR we typically tell the SDR what frequency to tune to, then we send the SDR a baseband signal (in the form of IQ samples). But for now lets simulate the process of "upconverting" the baseband signal to a high frequency. | |||
# Our goal is to shift the signal UP in frequency, so that it's transmitted on a "carrier". Lets use a carrier of 10 kHz. To do this we need to multiply our signal by a 10 kHz sinusoid (i.e. a 10 kHz carrier). | |||
# Create a Signal Source block, using a cosine waveform, with a 10k frequency. Also add a "Multiply" block. The output of the Low Pass Filter should connect to one input of the Multiply block. The new signal source (our carrier) should be connected to the other input of the multiply block. | |||
# Reconnect it so the output of the multiply block goes into the input of the Add block. | |||
# Run the flow graph and spend some time observing the time and frequency domain changes, and think about what has happened here. Remember our Fourier transform pairs. |
Revision as of 20:00, 18 September 2018
Note that this tutorial purposefully does not have screenshots of the flowgraphs, to encourage you to assemble them without just copying what you see.
- Open the attached .grc file. This is the starting point that you will work off of, it just includes a special source I made, and a time and frequency sink (GUI).
- Run the flowgraph and use the time sink to figure out what this special source is outputting. What it's doing is creating 1's and 0's randomly (the 1's and 0's repeat for 15 samples), for the real part of the IQ signal (I), and then zeros for the imaginary part of the IQ signal (Q). This is called "On Off Keying" because we're just turning the I part of the signal on and off randomly (and we are leaving Q at zero).
- When we receive anything in the real world there will be noise added. So lets add some noise. Add a "noise source" block with amplitude 0.1. The amplitude adjusts how strong the noise is.
- Lets add this noise to our sinusoid to see what it looks like in the time and frequency domain. Use the "add" block, the inputs should be the signal source and the noise source. Reconnect the time and frequency sink to the output of the add block.
- Run the flowgraph and note what changed in both time and frequency.
- One issue with transmiting 1's and 0's directly is that the frequency domain of our signal is VERY "wide", i.e. the signal takes up a huge amount of spectrum/bandwidth.
- Lets filter the signal to reduce the amount of bandwidth it uses. Add a "Low Pass Filter" block right after the On Off Keying source. Use Cutoff Freq of 2500 and transition width of 500.
- Run the flowgraph. Notice how the spikes in the frequency domain stop around 2500. That's what setting a cutoff frequency of 2500 did. The transition width just tells it how quickly the passband (frequencies we pass) transitions to a stopband (frequencies we block).
- Now look at the time sink. It doesn't go immediately from on-to-off anymore does it? By limiting the frequencies our signal can be composed of, we prevent ourselves from being able to create a steep edge of a square wave.
- You may have noticed that there is a lot of energy at "DC" (a spike at 0 Hz in the frequency sink). This is because our signal goes between 0 and # So the average value of our signal (in the time domain) is definitely not zero. Lets try to make it zero (you will soon see why we want to).
- Add an "Add Const" block right after the On Off Keying source. This block lets us add a constant value to our signal. Use a "constant" of -0.5 So this is more of a subtract constant block.
- Run the flowgraph and look at the signal in the time domain. It should be centered around zero now. In the frequency domain we should see no more spike at DC. Good job, we are finally transmitting a "decent" signal!
- If you haven't realized it by now, we are essentially simulating a wireless transmitter. The chain of blocks going into the top port of the Add block is like our transmitter. The Add block combined with the Noise Source is like a simulated wireless channel that adds noise. The Time and Frequency sink show us what we might see at a receiver.
- Right now this signal is centered around DC (in the frequency domain). The center of the signal is at 0 Hz. Also, there are negative frequencies. This is all because we generated the signal at "baseband". This may or may not be a problem. When we transmit a signal with an SDR we typically tell the SDR what frequency to tune to, then we send the SDR a baseband signal (in the form of IQ samples). But for now lets simulate the process of "upconverting" the baseband signal to a high frequency.
- Our goal is to shift the signal UP in frequency, so that it's transmitted on a "carrier". Lets use a carrier of 10 kHz. To do this we need to multiply our signal by a 10 kHz sinusoid (i.e. a 10 kHz carrier).
- Create a Signal Source block, using a cosine waveform, with a 10k frequency. Also add a "Multiply" block. The output of the Low Pass Filter should connect to one input of the Multiply block. The new signal source (our carrier) should be connected to the other input of the multiply block.
- Reconnect it so the output of the multiply block goes into the input of the Add block.
- Run the flow graph and spend some time observing the time and frequency domain changes, and think about what has happened here. Remember our Fourier transform pairs.