Random Quote Board

Quick Rather Deep Overview of SDRangel

Gary Schafer, May 2023

I've used most of the popular SDR programs. This includes CubicSDR, SDR#, SDR++, GQRX, SDRuno, SDRConsole, HDSDR, and SDRangel. To me, they all provide the same basic information (center frequency display, spectral display). It's what they do after that that sets them apart. For example, SDR#, SDRangel, and SDRuno all provide a bunch of other processing, such as different types of signal demodulation and signal decoding.

The hard part? Trying to figure out how to get the blasted program to do what you need it to do. The only thing that is "intuitively obvious to the casual observer" about these programs is that no one from Apple's user interface crew showed up to help them design their interfaces.

Today, I'm going to start with a walk through SDRangel. I'd originally planned on making this a quick overview. It quickly expanded. It's now going to be a rather deep overview. I'm going to use both Gnu Radio and SDR hardware images to explain the general signal flow for SDRangel. I'm using SDRangel version 7.11.0 which I built from source in March 2023. I'm running it on Linux Mint 21.1 Cinnamon. The general flow should be the same for the same version regardless of OS.

You're presented with a blank screen the very first time you open SDRangel.

Initial SDRangel screen. SDRangel uses the concept of a "workspace". It can have open multiple workspaces within this main window. NOTE: If there are icons below the menu entries, then click on "Workspaces -> New".

Getting the Hardware Running

The first thing that is required in order for a SDR program, any SDR program, to work is to get samples off of the SDR hardware. This means ensuring that the drivers are working. Sorry, but I can't help you with that. The permutations of operating system and dependencies is too great.

After that, you need to have the SDR set to give you the right samples. "Right samples" means at the correct frequency with enough bandwidth and with the correct amplitude. This requires a few basic settings. These are:

You have to add a window to control the SDR hardware. I'm going to add a RTL-SDR as my SDR hardware. I first ensured that the RTL-SDR was plugged into my computer. I clicked on the "Add Rx Device" icon, then selected the RTL-SDR from the dropdown menu.

This is the icon for adding the SDR hardware.
Dropdown menu showing selection of RTL-SDR radio. If the radio is plugged in but not showing, press the "Refresh" icon. If it still does not show, try these steps.

Once you select the desired receiver and press "OK", you're presented with two windows, as shown below.

Basic Rx control and spectral display windows that open when you select the RTL-SDR hardware. The window on the left is for control of the SDR hardware. It allows you to set the center frequency, sample rate (which also sets the total, available bandwidth), and the gain. The window on the right is spectral displays. It provides a spectral trace (top) and spectrogram (bottom). Note the "R:0" in the upper, lefthand corners of each window. This shows you that these windows are both tied to the same radio, the one that SDRangel has tagged as "RTL-SDR[0]", in this instance.

The window in the upper, left will control the actual hardware. For the RTL-SDR, here's an overview of what those settings will control.

Interior of a RTL-SDR.com v3 radio showing the two primary chips. The first chip (the Rafael Micro R820T2) is the RF front end; the second (the RTL2832U) performs the digitizing and quadrature demodulation (convert real signals to complex). The Rx control window sets certain parameters on these two chips, as shown here. The center frequency and gain settings control the RF front end. The sample rate sets the digitizer.

The window on the right, the one with the spectral displays, is quite small, and doesn't really show the displays large enough to be useful (in my opinion). I recommend that you click on the icon labeled as "Stack sub windows in columns". This will place the windows (probably) as shown below.

Rx control and spectral display windows after pressing the "Stack sub windows in columns" icon. This allows the spectral displays to take up more room and be more usable.

Time to kick things off. Press the blue arrow key. This is the "Start/Stop Acquisition" button and will toggle the SDR on or off.

This is how the system appears when it first starts running and without changing any of the default values. The RTL-SDR only has one input, so there's no selection available for that. The center frequency is set to 435,000 kHz, which is equal to 435.0 MHz. The sample rate is set to 1.024 MSam/s, but is decimated by a factor of 16. So the actual sample rate is 1.024 MHz/16 = 64 kHz. The 64.0 kHz sample rate is shown both just below the "Start/Stop Acquisition" button in the control window, and just above the spectral trace in the spectral displays window. At this frequency, there does not appear to be any signals visible. The spectral line at the center of the spectral trace and spectrogram is the LO feedthrough from the SDR hardware.
Here are the two spectral displays annotated. A spectral trace is a two-dimensional display showing frequency on the horizontal axis and signal amplitude on the vertical axis. The spectrogram is a (pseudo) 3D display. It consists of multiple spectral traces next to each other, but turned so that you're essentially looking at them from above. The spectrogram shows frequency on the horizontal axis (and is aligned with the spectral trace above it), time on the vertical axis, and amplitude is denoted by a color scale.

At this point, you have a running SDR that is collecting samples and sending them to your computer. The spectral trace and spectrogram show you all of the signals available within your instantaneous or stare bandwidth. This is the full bandwidth that can be used to demodulate a signal, or multiple signals, at one time.

I want to see some signals. I'm going to tune to the FM broadcast band. Specifically, I'm going to select some classical music stations centered around 90.9 MHz.

This is how an FM broadcast station appears when I tuned to it from the default frequency of 435 MHZ. Note how the signal takes up the entire spectrum. The reason is the sample rate. My raw sample rate is 1.024 MHz, but it is decimated by a factor of 16. This means my actual sample rate is 1024 kHz / 16 = 64 kHz. The sample rate must be greater than the bandwidth of the signal being processed. Otherwise, the signal is aliased and/or distorted.

Setting the Sample Rate

SDRangel is currently set to a sample rate of 64 kHz. This is shown in two places. One is in the control window, just below the "Start/Stop Acquisition" button. The other place is at the top of the spectral display window.

SDRangel control window and top corner of spectral display showing two places where the sample rate is displayed.

This program lets you set the sample rate by both setting a certain sample rate plus a decimation value. The sample rate itself should set the actual sample rate of the digitizer within the hardware. The decimation value is (most likely) done in software within SDRangel once it receives the samples from the hardware. Now, you might asking, "Why do this two-step? Why not just set the sample rate to whatever you desire?" The reason is that most hardware has fixed limits on the sample rate you can set. The RTL-SDRs, for example, are limited to values within two ranges (225.001 kHz - 300 kHz, 900.001 kHz - 3.2 MHz). If you try to set the sample rate to 400 kHz, for example, the RTL-SDR would say, "No." SDRangel gives you a work-around for this. The RTL-SDR does allow for a 1.6 MHz sample rate. We could set the sample rate to 1.6 MHz, then decimate by 4. This would give us a 400 kHz sample rate. Again, just an example.

This is the decimation setting in the receiver control window. The final sample rate will be the set sample rate (1.024 MHz in this example) divided by this value. 1.024 MHz / 16 = 64 kHz.

A major rule of digital signal processing is that the complex sample rate must be greater than the bandwidth of the signal being processed.

A major rule of digital signal processing is that the complex sample rate must be greater than the bandwidth of the signal being processed. Right now, our sample rate is 64 kHz. I'm trying to process a FM broadcast signal. That requires roughly 200 kHz of bandwidth. I need to either raise the sample rate or lower the decimation value. Or a combination of the two. SDRangel only allows decimation values that are powers of 2. By lowering the decimation value to 4, the sample rate will be 1024 kHz / 4 = 256 kHz. This is greater than the bandwidth. It will be plenty for processing this signal.

FM broadcast signal with an effective sample rate of 256 kHz (1.024 MHz decimated by a factor of 4). This sample rate provides enough bandwidth to process this signal.

Note that spectral line at the center of the spectral display above. That's due to something called "DC leakage" or "LO feedthrough". It's a problem created between the RF front end and the quadrature demodulator circuit. To get rid of it, SDRangel provides a button marked (appropriately enough) "DC". Pressing that button will eliminate most, if not all, of this.

By pressing the "DC" button in the receiver control window, you can reduce, if not outright eliminate, the DC leakage signal at the center of the spectrum.

Setting the Gain

You want the signal to take up as many of levels of the quantizer as possible without going over.

Gain can be easily misunderstood. Yes, it amplifies the signal. It's not a case of "more is always better". Don't just crank it up to the max and think, "It's good!" There's also a thing called "too much gain". The gain, in this case, controls how much signal level gets to the digitizer. One of the main components of a digitizer is a quantizer. The quantizer converts the analog amplitude into a set of digital bits. Every quantizer has a maximum number. The RTL-SDR uses 8 bits. 28 = 256 levels. This means each sample will be forced to fit to one of those 256 levels. You can't over 256. You want the signal to take up as many of those levels as possible without going over. That's right. Setting the amplitude going into the quantizer is like guessing the value on "The Price is Right". Get as close as possible, but don't go over.

Let me just get this out of the way. DO NOT SELECT AUTOMATIC GAIN CONTROL!

Let me just get this out of the way. DO NOT SELECT AUTOMATIC GAIN CONTROL! I've never gotten it to work reliably. This is not a slam on SDRangel. NO one's SDR software gets AGC correct. Why? No idea. It just doesn't work. Instead, I'm going to show you how to set it properly manually.

How do you do that? How do you set the gain so that you're covering as much of the quantizer as possible, but without overdoing it? If we were using Gnu Radio Companion, it would be pretty straightforward. With a RTL-SDR, the optimal gain is achieved when the raw IQ out of the SDR going into a time sink has the levels set just below +/- 1.

Gnu Radio Companion flowgraph used to find the best gain for maximizing the level going into the quantizer.
This is initial spectral and IQ time domain displays when the flowgraph is first run. The RTL-SDR gain is 0. The time domain display shows that the IQ samples coming out of the RTL-SDR are nowhere near the limits of the quantizer, denoted by the red lines near the top and bottom of the display. The result is seen in the spectral display. It shows that the signals have very little signal-to-noise ratio (SNR).
The gain has been set such that the amplitudes of the IQ samples are near (but not over!) the limits of the quantizer (denoted by the red lines). This is the "Goldilocks Zone" for the gain for this particular setup. Note how the spectral display shows the signals very prominently.
This is the gain set too high. The signal amplitude has passed the upper limit of the quantizer. It's clipping, denoted by the flat top and bottom of the signal. Note the spectral display. The distortion of the clipping has created a wide bandwidth noise. The spectral display shows the effects. The SNRs of the signals are not nearly as high as when the gain was set properly.

The problem is that SDRangel does not provide a means to look at the IQ time domain samples unfiltered. The best that is available is to use the receiver control spectral displays. This requires a bit of experience to set correctly. In the end, so long as the signal you're trying to receive sounds correct, or it provides the information in which you are interested, then your gain is good enough.

SDRangel running with a RTL-SDR radio. The gain is set to 0.
SDRangel running with the RTL-SDR radio. The gain is set too high. Note the spectral display, and how it compares to the spectral display below. The SNR of the displayed signal at the center is not as high as it is in the display below.
SDRangel running with a RTL-SDR radio, and the gain set to maximize the SNR of the displayed signals.

Setting the Display Scales

I prefer to look at spectral displays with the amplitude scales properly set. For SDRangel, this means setting the reference level and range. These controls are at the bottom of the spectral displays. Fortunately, SDRangel makes this pretty simple using it's "Autoscale" button. Pressing this icon automatically adjusts the reference level and ranges to pretty much what I would have selected if I did it manually. I can also tweak either setting if I don't like how it looks.

The controls for setting the scales of the spectral displays is just beneath the spectrogram. It's highlighted here. I suggest just hitting the "A" (Autoscale), and continuing on. The "Autoscale" works pretty well, and gets you close enough for pretty much anything you need to do.

Demodulating and Processing a Signal

Once you have a radio sending samples to SDRangel, SDRangel can further process the samples. The only processing that has been done thus far is to create some spectral displays. If I were to replicate this in Gnu Radio Companion (GRC), it would look something like this:

This is roughly a Gnu Radio flowgraph that mimics SDRangel's receiver control and spectral displays. I've not included the actual controls, but these source block has the ability to set the center frequency, sample rate and gain for the SDR, and the spectral displays show the corresponding spectrum around the center frequency.
This is the corresponding displays when I run the basic receiver control flowgraph. It has a spectral trace (top) and spectrogram (bottom), just as in SDRangel. This does not show all of the controls possible as with SDRangel.

You've not demodulated or decoded anything. There are some basic steps that you have to do next. Those steps are (in order):

  1. Center the signal: The first step of processing signals that are in complex format is to center them at 0 Hz. NOTE: This does not mean that the signal has to be centered in the spectrum in order for SDRangel to demodulate and process it.
  2. Filter the signal: You want to filter the signal so that only that one signal is left. All other signals and noise needs to be removed.
  3. Demodulate the signal: At this point, you can demodulate the signal.
  4. Process the demodulated signal: This includes any post processing required for baseband signals, either analog or digital, to recover whatever information is on it. For example, this might be the stereo signal or RDS from a FM broadcast station, or the digital video stream from an over-the-air television broadcast station.

Let me show you what I mean using the signal that is currently displayed on SDRangel's spectral displays. I have a FM broadcast signal at the center of my spectrum.

Adding a Channel

SDRangel uses the terms of "radio" and "channel". The "radio" is what provides the samples to the computer. The "channel" is where SDRangel centers, filters, demodulates and processes the signal.

To perform the steps I outlined above, SDRangel creates a channel. SDRangel uses the terms "radio" and "channel". The "radio" is what provides the samples to the computer. The "channel" is where SDRangel centers, filters, demodulates and processes a signal. I'm going to add a "channel" here to demodulate this FM station. The "channel" options are opened by clicking on the "channel" icon at the top of the receiver control window. Clicking on this icon opens a window that lists allllllllllll of the available demodulation and processing options.

The "Channels" icon is at the top of the receiver control window. Clicking on this icon opens the list of channel options.
This is the list of available "Channel" options in SDRangel. I built this from source code, and I explicitly tried to add all possible channels available at the time. For demodulating this FM station, we have three possible options. This includes Broadcast FM Demodulator, NFM Demodulator and WFM Demodulator.

I first selected "NFM Demodulator". (NOTE: For those of you wondering, "Why not use the 'Broadcast FM Demodulator', I'm getting to it. Be patient.) "NFM" stands for "narrowband frequency modulation". When it comes to FM, there's a tendency to think in terms of "narrowband" and "wideband". FM deviates the carrier above and below its center frequency. The difference between "narrowband" and "wideband" has to do with the ratio of the maximum modulation frequency to the deviation of the carrier. This ratio is typically called the modulation index. If that index is less than 1, it's narrowband; one or greater is wideband. Frankly, nowadays, I find that distinction more annoying than anything. I believe it made a difference in the days of analog circuitry because it meant you could use different circuits. Made them more economical. Nowadays, with digital processing, FM is FM. Modulation index doesn't enter into it.

ANYWAY, I selected "NFM Demodulator". It sounded like crap. The NFM did not provide enough bandwidth. The maximum is 40 kHz. FM broadcast here in the good, ole US of A is 180-ish kHz. If you filter too much of a signal, you distort it. That's what happened here. It sounded like crap. Yes, it demodulated. But demodulating a 180 kHz wide signal with a 40 kHz filter means most of the signal is removed.

Moving on, I next tried the "WFM Demodulator". "WFM" means (as you may have guessed) "wideband frequency modulation". Let's take a look at what this "channel" does for us. As I said, we need to center a signal, filter it, demodulate it, then process the demodulated signal. When you first add a "channel", it sets the offset from the center of the spectrum to 0, filters it, demodulates it, and presents the information to the user. This latter part might be sending audio to the speakers or giving you a real-time map of airplanes in the area.

Opening the "WFM Demodulator" channel shows as a blue band in the center of the spectrum. The width of the band shows the amount of signal that is being allowed to pass through. Anything not inside of the band is being filtered out.

Adding a "WFM Demodulator" channel shows a blue band at the center of the spectral displays. This shows the placement (frequency offset) and width of the filter. Whatever is inside of the blue band will pass through; everything outside will be filtered out. The output of the filter is fed to a FM demodulator.

Let's take a look at the controls. You'll see many of the same controls regardless of the "channel" type you select. The top, left corner shows "R0:0". This is the "radio / channel" model that SDRangel uses. The first "R0" means that this channel is operating on the samples coming from "R0". That's my RTL-SDR. The ":0" means that this is the first channel operating on the samples from "R0". At the top of the window is frequency offset, denoted by "Δf". This sets the placement of the channel within the span denoted in the spectral displays. This gives you the ability to control which signal you'll process. This frequency offset occurs solely within software; it has no effect on the center frequency of the SDR hardware. The frequency offset occurs only on the samples coming off of the SDR. This means it's limited to whatever is within the spectral display. Below the frequency offset is a "dB" meter. This gives you an idea of signal level. Note that this is not an absolute level, such as dBm or dBW. The other, important control here is the "RFBW" (RF bandwidth). This is set to 80 kHz. Broadcast FM here in the US is 180 kHz. The audio sounds distorted, as it should be. By adjusting the bandwidth up to 180 kHz, the output audio sounds fine. I'm receiving the L+R baseband channel that extends from 0 - 15 kHz in all FM broadcast stations.

"WFM Demodulator" control window. The top, left corner says that this is the first channel (":0") on radio "R0" (the RTL-SDR connected to SDRangel). At the top is the frequency offset ("Δf"). This shifts the center of the channel to anywhere between +/- 1/2 of the sample rate. The bandwidth of the filter is set below using the value next to "RFBW" (RF bandwidth). This shows the bandwidth set to 80 kHz. The controls below these are specific to this demodulator. This "channel" provides control of the audio frequency bandwidth ("AFBW"), volume control, and squelch control.

If I were to create a similar capability in Gnu Radio Companion, it would look something like this flowgraph.

GRC flowgraph that is roughly equivalent to the SDRangel with a WFM demodulator. The only thing missing is the squelch.

Before continuing on, I'm going to increase the sample rate. I want to have more signals within my spectral display so that I can have multiple channels running. (Yes, I have a signal at the left edge of my display, but it's not ideal.) Increasing my sample rate to 2.4 MHz, I get the following spectrum.

This is the spectrum when the sample rate is increased to 2.4 MHz. I now have several signals that I can process.

Now I'm going to add another channel, this time a "Broadcast FM Demodulator". Once again, I click on the "Add channels" icon in the receiver control window. I get the list of options, and select "Broadcast FM Demodulator". I get a larger window than with the "WFM Demodulator".

This is the control window for the broadcast FM demodulator. Note the number in the top, left corner, "R0:1". This means its the second channel (":1") of the first radio ("R0"), the RTL-SDR connected to SDRangel. The bandwidth defaults to 180 kHz. The difference between this "channel" and the "WFM demodulator" is that it allows for stereo demodulation and (allegedly?) RDS decoding. The controls allow for RF bandwidth ("RF BW"), audio bandwidth ("AF BW"), volume and squelch. The window also provides a baseband (demodulated) spectrum and corresponding spectrogram. Below that is the RDS output. NOTE: As of this date (May 2023), I've not been able to get the RDS to actually work. This appears to be a bug. I don't think it's something I've done.

The difference between the "WFM Demodulator" and the "Broadcast FM Demodulator" is that the latter can demodulate the stereo subcarrier at 38 kHz (assuming there is one), add a deemphasis filter to the L and R audio signals, and demodulate and decode (theoretically) the RDS signal at 57 kHz. The WFM signal, when applied to a broadcast FM signal, would only be able to deal with the baseband signal. The WFM demodulator, however, would be able to handle any wideband FM signal. The broadcast FM demodulator is only set for broadcast FM signals. Any other type of FM signals may be a problem.

I want you to understand what's happening here. The "radio" (an RTL-SDR, in this instance) is feeding samples covering a certain amount of bandwidth to SDRangel. Right now, I'm feeding 2.4 MHz of bandwidth to SDRangel. There are 4 signals within that 2.4 MHz bandwidth centered on 90.9 MHz. I can add "channels" to demodulate each one separately. The "channels" operate on the samples fed from the SDR; the "channels" have no direct control on the SDR itself. Once the samples are fed to a "channel", all I have to worry about is whether I have the processing power to process the signals in each channel.

I'm going to set the frequency offset of the broadcast FM demodulator to cover one of the other signals in the spectral display. Using my cursor over the 100 kHz position, I adjusted the frequency to 600 kHz. Here's how my display looks now.

This is the full SDRangel window after setting the frequency offset of the broadcast FM demodulator. The offset is +600 kHz. The spectral displays show two blue bands. The one at the center is for the WFM demodulator; the one on the right is for the broadcast FM demodulator. I can literally listen to the audio from both at the same time.

Trying the ADS-B Demodulator

Let's try a different demodulator. Let's try the ADS-B channel. That means having the tune the SDR to a different frequency. ADS-B is centered on 1090 MHz (mostly). First, I closed the two, current channels that were running (the "WFM Demodulator" and the "Broadcast FM Demodulator"). I set the receiver control to 1090 MHz (1,090,000 kHz). This gave me a flat spectrum. ADS-B is not typically going to be a strong signal. I'm picking it up from a discone in my attic. The signal will not be strong regardless. This means I need to crank the gain. TO THE MAX!

Receiver control set to the center frequency of the primary ADS-B transmissions. The gain of the receiver has been set to the maximum.

ADS-B is a pulsed transmission system. The best way (IMO) to see the pulses is to look at the amplitude demodulated time domain. There's only one way in SDRangel to see such a display. That's with the "Channel Analyzer" channel. Selecting "Add channel" from the receiver control window, I selected "Channel Analyzer". I went ahead and maximized it in SDRangel. I don't need the spectral display, so I minimized the "Channel Spectrum" portion of the window. I also maximized the "BP" (bandpass) setting to give me the full bandwidth of the SDR. ADS-B primary bandwidth is roughly 3 MHz. Might as well max out the bandwidth if all I have is 2.4 MHz.

"Channel Analyzer" display with "Channel Spectrum" minimized and the "BP" (bandpass) setting set to the maximum. This shows the time domain view of the real samples coming off of the RTL-SDR. The "Real" shown in the "Tra X" setting can be changed to select either the "Real" part (default, which is the real part of the IQ stream), the "Imag" (imaginary part of the IQ stream), and "Mag" (magnitude, which is essentially the noncoherent AM demodulated output).

Let's talk about the time domain display. This is what many people call an oscilloscope or just o-scope. Frankly, the controls here leave a lot to be desired. An oscillscope has a couple of basic settings. These are the amplitude setting (controls the vertical axis), the time setting (controls the horizontal axis), and a trigger (controls when the system actually creates a trace). Trying to figure out how SDRangel performs each of these tasks is... daunting. When you first activate the "Channel Analyzer", the trigger is set to "free run". This means its just gonna create traces as fast as it can regardless of what is happening with the signal itself. I want to trigger on the actual pulses. To actually activate the trigger, I clicked on the "F" icon in the lower, righthand corner. After messing around with the different controls, I finally managed to capture a burst.

SDRangel "Channel Analyzer" showing a set of ADS-B bursts.

Frankly, it dawned on me that this display alone will require its own blog post. Maybe later.

Closing the "Channel Analyzer", I clicked on "Add channel", then selected the "ADS-B Demodulator". This selection is more than a demodulator. It's also a decoder. ADS-B uses pulses that are modulated onto the carrier using on-off keying (OOK). Once the SDRangel demodulator has demodulated the pulses from the carrier, it also decodes the pulses to extract the information they carry. SDRangel further posts this information onto a map showing the aircraft whose information it has gathered and decoded. This is one of the best ADS-B systems I've seen without having to go to websites such as flightradar24.com or flightaware.com

SDRangel running the "ADS-B Demodulator". This shows the aircraft flying around my house. If I zoom out, there are more planes visible. But the icons get too small.

Once I had the ADS-B demodulator running for awhile (tens of minutes), and I tried to close it, SDRangel crashed. This happened more than once. I'm figuring its another bug.

I think that's enough for now. This has already turned into a major wall of text and images. I may come back to SDRangel at some point in the future. Most likely, I'll take a look at some of the other SDR programs, such as SDR# or SDRConsole. In the meantime, if you're using SDRangel, just remember that it consists of a "radio" (getting samples from the antenna into your computer) followed by "channels" (actually processing some or all of the samples coming in).


SDR Radio Doesn't Show on Rx Device List

This happened to me. As I was putting together this blog post, I made sure my RTL-SDR was plugged in, started SDRangel, clicked on the "Add Rx Device" icon, then checked the dropdown list. There was no RTL-SDR hardware listed. Weird. Restarted SDRangel. Still no RTL-SDR listed. Rebooted the computer. Still the same. It wasn't until I did a web search that I discovered the problem. SDRangel already had a window opened for my RTL-SDR. Here's a quick test to tell. Look at the SDRangel window. If you see scroll bars on the bottom and/or sides, then you have windows opened somewhere. The quick solution? Press one of the "Windows" icons at the far right of the workspace icons in SDRangel. There's an icon for "Cascade", one for "Tile", two for "Stack" (one vertical and one horizontal), and an icon to open each window in its own tab. If you press one of those icons and your SDR control window shows up, there you go. Problem solved.

SDRangel workspace in which the Rx control window and spectral display window are offscreen. Note the scroll bars at the bottom and side of the workspace. This indicates that something is offscreen. In this case, it was the Rx control and spectral display windows for my RTL-SDR. When I pressed the "Tile Window" icon, they popped into view.

Here's a Random Fact...