Solid State
160m/80m vee
   beam array
SDR for
   the FT-920
SDR on Linux

Some SDR Programs for Linux

I have been looking at some of the main SDR programs for Linux, to see what they can offer to improve reception of the typical signals I work with. My FT-920 has quite a bit of filtering added to it, namely a 69MHz roofing filter, cascaded IF filters from Inrad, plus a DSP audio filter. It hears quite well, but I still would like more selectivity at times. So one thing I look for in the added SDR receive channel is very narrow filtering. I also need to have good adjacent strong signal rejection, so I am curious to see how an sdr can compare to a decent analog rig. Any noise reduction or other exotic software enhancements are of course a bonus, but the previous are most important. Also, listener fatigue is a factor, as some signal processing can sound harsh and "edgy".

SDR-Shell and DTTSP

The above screen shot shows sdr-shell running in Ubuntu 10.10, using qjackctl to control the jack audio server. DTTSP is the DSP core of sdr-shell, which does all the I-Q conversion, spectrum calculations, and filtering. It is the same DSP core that is used in the FLEX-5000 software. It is a little bit of an adventure to get all the seperate pieces running, and you need to know your way around Linux a bit, but the end result is very worthwhile. There are a number of versions of this software scattered over the internet, so it was confusing at first which was the one to use. Here is what I ended up doing:

The first step is to install jack, qjackctl, svn, automake 1.10, and the development essentials (make,etc) from the Ubuntu repositories. Make sure your audio system is working properly through jack, with whatever I-Q receiver you have. It should be possible to hook your inputs and outputs together using the connections window in qjackctl, as a test, resulting in a direct conversion receiver with no filtering. I don't use the real time kernel, but installing that is helpful to keep the audio clear with higher CPU use.

Next, look at the DTTSP wiki, which has some rather laconic instructions:
This lists some dependancies, but actually all are not really needed. (I don't have firewire, so FFADO is not needed.) Use svn to checkout the latest version of dttsp, as shown. The most recent work is in the "ab2kt" branch of the file hierarchy. When I compiled the source in the less current "trunk" branch, the usual "./configure" and "make" worked. In the "ab2kt" branch, the source folder is missing some files, namely: configure, Makefile.in, config.sub, config.guess, depcomp, install-sh, missing. Copy these from the "trunk" source folder to the "ab2kt" folder, and run "./configure" and make, and hopefully you will get a good compilation. Place the sdr-core executable so made in a folder of your choice, to use with the other pieces of software. With qjackctl running jack, you can open a terminal in you sdr-core folder, and type:

./sdr-core --spectrum --metering --client-name=sdr --buffsize=2048 --ringmult=4 --command-port=19001 --spectrum-port=19002 --meter-port=19003&

That should create a new set of ports in the connections window. As another test, if you hook the sdr outputs to the jackd inputs, and vice-versa, you should be able to hear signals running through dttsp, which comes up in AM mode by default.

The next step is download the recent QT4 based sdr-shell version using subversion, which has been updated from the QT3 version to QT4 by Glen, KC0IYT (and others). sdr-shell is the gui portion of the system, which controls the functions of dttsp and displays the result. This is the rxtx version, which has transmit capabilities, but are not used for receive only. It is being extended by several coders, on the Yahoo discussion group page: http://groups.yahoo.com/group/dttsp-linux/. The svn command is:
"svn co http://sdr-shell.googlecode.com/svn/branches/sdr-shell-v4/"
Again, there are some dependancies, which can be had from the QT4 make essentials in the Ubuntu repositories.

Once the repository has been downloaded, you can follow the compile instructions in the README file. A successful compile will result in the sdr-shell executable. Place that binary in the folder with sdr-core.

Finally you need to create a startup shell command script, to get all these pieces started in the right order, and connected to each other. In reading the various sources of dttsp info, you will again find a bewildering variety of startup scripts to get sdr-core and sdr-shell talking to each other. Using the latest version of both programs, the startup script is simple: (note: I start qjackctl manually)

export SDR_DEFRATE=48000

./sdr-core --spectrum --metering --client-name=sdr --buffsize=2048 --ringmult=4 --command-port=19001 --spectrum-port=19002 --meter-port=19003&

sleep 1

jack_connect system:capture_1 sdr:ir
jack_connect system:capture_2 sdr:il
jack_connect sdr:ol system:playback_1
jack_connect sdr:or system:playback_2

sleep 1


I open a terminal and cd into the directory containing the sdr software and the above script. I start it with

and then use the terminal window to see the commands going to sdr-core from sdr-shell. The SDR_DEFRATE variable specifies the sample frequency. The option --buffsize tells dttsp the buffer length that is used by jackd, as set in qjackctl. The jack_connect can also be left out and done manually with qjackctl, to allow for experimenting with different hardware. The sleep lines are to allow the programs to load.

Once you have the GUI running, click the "CFG" box to get some parameters to set. The keys "U-I-O-P" move the filter edges up and down. The keys "[ ]" tune the passband up and down. The keys "Z-X-C-V" move the dB levels of the high and low apetures of the spectrogram display. Use those to get the right contrast and sensitivity. The "1-2-4-8" keys will expand the spectrum width, depending on your sampling speed. Clicking on a signal in the spectrum centers it in the passband. The Up-Down arrows move the tuning steps, indicated by the underscores on the frequency readout. The Left-Right arrows tune up or down in accordance with the selected step.

sdr-shell sounds quite good, and has better selectivity than my FT-920 with all the optional filters. It has a very low level of digital artifacts. The software is receiving attention, so it continues to improve. Join the dttsp-linux Yahoo group to keep up to date.


Linrad is shown above. This program is mainly the efforts of Leif, SM5BSZ, who has been working on it for many years. His focus is with moonbounce and weak signal modes on UHF. There is a wealth of technical information at http://www.sm5bsz.com . There is also an active Google group at http://groups.google.com/group/linrad/ . His pages are quite complete with instructions on how to install. The latest version is always the best place to start. One needs to go to the Portaudio website first, and install the last version availabe from there: http://www.portaudio.com/download.html. Portaudio is a cross platform audio interface, which makes for easier porting of Linrad.

Linrad is very configurable, and has a bit of a steeper learning curve to it. It is oriented for the technical types out there, and requires a bit more reading of the help available. Once running, it has a very low CPU requirement, even though it can have several spectrums and a couple of waterfalls running. It also has a remarkable noise blanker that is not easy to grasp at first, but does work on the pulse radar signals that can plague 40m at times. In the above shot, there is a broad section of the waterfall that is completely wiped out by the pulse signals. The section of the waterfall that is in the lower window shows a weak carrier that is lost in the noise without the blanker, but is now clearly audible. The shot below is what the same situation looks like with no blanker:

Linrad has roots back in a much slower era of computers, so the code is oriented for low CPU use. With 3.18, Leif has updated the baseband output code to allow for better filtering, which results in much better output quality with only a small increase of CPU usage. Note: make sure to use the number "2" option (FIR filter) for the base band processing.


Quisk is shown above. This program is a very simple SDR, but does most of what one needs, and is very easy to learn and use. The homepage is at http://james.ahlstrom.name/quisk/. There have been no recent efforts on the program, and it is probable that the author's goals have been met. Quisk, is written in Python, and so has good prospects for others to dive into the code and make improvements. However, it also has higher CPU requirements, compared to the above programs, so there is a tradeoff. The installation instructions are clear, but the installation of a Python "egg" is anything but clear to this Python novice, at least when I tried it. I did manage to poke around in the downloaded archive and sort things out. The program useage is mostly self explanatory.

There are some creature comforts that would be on my wish list. There is no passband tuning, or any way to adjust the BFO tone on receive. The preset filters are easy to use, but I would have liked the option of steeper skirts, as that is why we are looking at these porgrams in the first place. The spectrum display needs to have its high and low dB scales configurable, would benefit from averaging, and the waterfall display palette could be easier on the eyes. (This latter should be easy to fix). AGC1 seems to work, AGC2 can generate some pops and clicks. Quisk sounds quite good in low noise situations, but seems to generate a bit more noticeable digital artifacts when used with weak signals.


Winrad, by I2PHD, is a Windows program, but works using Wine. It has some nice slider controls to customize the display. I have not used it enough to get a feeling for it, but it is worth looking at if you have a standard alsa sound card setup, as it should find that OK in its sound card setup page. It does not use a standard window, so it is a little inconvenient to use with other windows. The program is being actively worked on, and the author is involved with SDR technology in general.

One program that will be of interest eventually is PowerSDR, used in the Flex radios. It is being redesigned to be cross-platform capable, so we will have a new option for Linux SDRs if that effort reaches its final stages. Stay tuned....

Website templates