Linrad, a software radio for PC computers. The RX development page.
(March 1 2023)

General purpose DSP radio

Modern computers have the processing power to outperform conventional radios in receiving signals with poor S/N. Particularly when the poor S/N is due to interference rather than to white (galactic) noise the computer can remove interference within the narrow bandwidth of the desired signal by use of the information about the interference source retrieved by use of larger bandwidths. The signal processing can be far more clever than what has been possible before. Each interference source can be treated as a signal and the DSP radio can receive AND SEPARATE a large number of signals simultaneously. The DSP radio package is under development with flexibility and generality as important aspects. This page contains links to pages that describe different aspects of digital radio processing in the order they are encountered in the ongoing development. The DSP-radio for LINUX is designed for all narrow band modulation methods for all frequency bands. To start with the following modes will be included:

Weak signal CW (primarily EME)
Normal CW
High speed CW (meteor scatter)

Fig 1. Block diagram for the Linux dsp radio in weak signal CW mode. Blue signals are in the time domain, red signals are in the frequency domain. Green signals are power vs. frequency, and black lines represent control parameters.

Hardware combinations

For SSB bandwidth, using a conventional SSB receiver and a single antenna a 486 computer and almost any conventional audio board will do. Of course the limited bandwidth will limit the performance; obviously the FM mode will not work at all. The interference rejection routines will have limited information about the interference sources and will have reduced capacity. If the SSB receiver has adequate noise blanking and the S/N of the desired signal is essentially determined by white noise the weak signal performance will be without degradation. Under the development phase I use a TS520 as the SSB radio together with a Pentium 66MHz (16MB RAM) and a Soundblaster 16 to check performance both on HF and VHF.

For 40kHz bandwidth and a single antenna a Pentium MMX and a standard 16 bit stereo audio board will give a reasonable performance. By use of two frequency mixers in quadrature the RF signal is converted to a pair of audio signals which are sampled in stereo at 44.1kHz The dynamic range will be somewhat limited within the 40kHz passband. This is the ideal low cost solution for general usage on all frequency bands below 30MHz.

For 2 x 20kHz bandwidth and two antennas (for example a VHF X-yagi) complex analog hardware is required if a standard 44.1kHz A/D converter is used. This is the configuration I have used extensively with the MS-DOS PC radio. With standard crystal filters the bandwidth is reduced to perhaps 2 x 15kHz and then the hardware for this configuration is pretty simple and easy to build. For further information check the hardware description for the MS-DOS PC radio.

For 2 x 90kHz bandwidth and two antennas a 4 channel A/D converter running at 96kHz and a Pentium III is needed. Each antenna needs two mixers in quadrature. Under the development phase this configuration is tested on a 650MHz Pentium III(128MB) with a Digital River Delta44. The Delta44 is sold as a 24 bit audio board but when sampling at 96kHz only the first 16 bits contain valid information, the lower 8 bits contain random noise.

Practical aspects of signal processing

The links below point to html pages that contain many images that show various interesting aspects of digital processing. These links are placed in chronological order and the most recent version of the entire software package is always at the bottom of the list.

Anti alias filters
External anti alias filters may improve the useful bandwidth. Here is an example for the Delta 44 board.

Selective fading.
Here are some graphs showing selective fading on BC stations. The improvement obtainable by digital processing on AM signals is obvious although that will not be done in the immediate future.

Filter shape and pulse response
Normal receivers have ugly pulse responses because the filters have steep skirts. These graphs show what the pulses look like before any digital processing is done to correct the frequency response of the analog filters. The frequency response is also shown as spectra with a dummy load connected to the antenna input functioning as a natural white noise generator.

Channel balance for direct conversion receiver
A direct conversion receiver uses two mixers with a 90 degree phase shift between them. A real world analog circuit may use 1% components so a typical direct conversion receiver will have an image that is suppressed by something like 40dB only. To avoid tweaking of the analog circuits the Linux DSP package has a digital correction scheme that cancels out this image. This section shows how it works.

Spurious-free dynamic range
Here is a graph that shows the spurious responses of the direct conversion receiver described on this page. Second order distortion dominates. The spur-free dynamic range is about 80dB if the balancing is well done and the signal level is about 15dB below saturation.

Calibration for flat frequency response
By addition of a digital filter the frequency response of the dsp radio is made very flat. The calibration procedure needs a pulse generator. The amplitude and phase response of the entire system can be set by the user and as a result the useful bandwidth is increased and the noise floor is made very flat with precisely known roll-off at the edges of the spectrum. The procedure is described with the 90kHz bandwidth direct conversion receiver as an example.

Calibration at SSB bandwidth
Here are some graphs produced with a TS520 and a Soundblaster 16 board.

A pulse generator for calibration.
Any pulse generator may be used for calibration of the Linux dsp radio. Here is a simple one. Note that selective amplifiers are also needed - otherwise the pulses become too weak. The pulses can NOT be amplified by a wideband amplifier - they are already 5 volts in amplitude and will saturate any wideband receiver front end using amplifiers. This link gives more info.

The baseband graph
When neither AFC nor second fft is enabled the raw data from the A/D converter within a selected frequency band is mixed to the baseband for further processing. Here is some more information about the first mixer and some interesting images showing 7MHz spectra in high and low resolution at the same time.

Timing of the first FFT
The first FFT is usually the most time critical routine. There are several different fft routines to choose from and the relative performance probably depends on the processor type, cache size and maybe other hardware parameters. This link gives the timing information currently available.

The second time function In case second fft is enabled the transforms of the first fft are split in two parts and transformed backwards to twice the number of time functions. In this way strong (uninteresting) signals are separated from the weak (interesting) signals and all sorts of wideband noise. The removal of strong signals is very helpful to allow efficient reduction of impulse noise. This link gives an example at 7MHz where noise blanking is far more difficult than at VHF due to the much larger number of strong signals.

Noise blanker with optimised hardware With optimised analog hardware the flat bandwidth is 90% of the digital bandwidth (or more). A noise pulse becomes very short which is beneficial for the operation of the noise blanker.

Noise blanker with conventional hardware With a conventional radio the flat bandwidth is typically 75% (or less) of the digital bandwidth. Noise pulses have an oscillatory behaviour. Each pulse is an oscillation at the center frequency of the filter with a time constant that is inversly proportional to the bandwidth of the filter (or rather the skirt steepness) The oscillations are not harmful since the exact shape has been pre-recorded into the system - it is the inverse fft of the frequency response of the signal path (combined analog and digital)

The high resolution waterfall graph When a large frequency range is processed there are not enough pixels on the screen to associate one fft frequency bin with each pixel. Typically bandwidths in the order of 1Hz have to be used to detect weak CW signals with optimum sensitivity. When a X-yagi (cross-yagi) is used and a signal arrives with 50% of its power in each polarization the summed power spectra from the two channels give lower visibility compared to when the signal is present in one channel only. To minimise this loss, average channel correlations are used to to calculate the data points for the waterfall graph.

Setting up the first fft When the second fft is enabled, the purpose of the first fft is only to remove strong narrowband signals that would destroy the noise blanker performance if those were left in place. There is no reason to waste computer time doing the first fft too well unless there are very strong signals of very high quality within the passband. Some screen dumps are presented to illustrate this.

Checking the A/D range For good dymamic range it is essential to use all the bits of the A/D converter. There are built in tools to verify that saturation does not occur in the analog circuitry preceding the A/D converter. Here are also some screen dumps showing inadequacies of the Delta44 board (nothing is perfect....)

2 minutes of 144MHz EME The page shows screen dumps and allows you to download a binary file containing the signals from which the screen dumps were obtained. Signals recorded Oct 03 1999 at about 0800 UT. Run it on your computer and listen to several different EME stations.

Half a minute of 7MHz contest (single channel) The page shows screen dumps and allows you to download a binary file containing the signals from which the screen dumps were obtained. Run it on your computer and listen to the myriad of contesters.

Half a minute of 7MHz contest (two channels) The page shows screen dumps and allows you to download a binary file containing the signals from which the screen dumps were obtained. If your computer was fast enough for a single channel with some margin, run this file on your computer and listen to the myriad of contesters.

Installing SIMD support under RedHat 6.1 To use SIMD instructions you need kernel 2.4.xx or later - or you have to install a patch. If you are not an experienced Linux user, look here.

Installing Linux dsp radio under RedHat 6.1 If you are not an experienced Linux user, look here.

Backwards fft as combined mixer and resampler Using the backwards Fourier transform as a frequency mixer is trivial, one just shifts the frequency bins before taking the backward transform. Obviously one can easily implement a filter at the same time by simply zeroing undesired points. By using a subset of the points corresponding to a smaller transform - thus actually using the data for a smaller transform - the number of points is reduced by some power of two. The back transform spans the same time with some power of two fewer points. Although conceptually simple this method needs some care to avoid spurs. Some screen dumps here show ugly spurious sidebands caused by parameters selected for processing speed only. Performance is quite good already with a modest computing effort.

Spurs and dynamic range Using a Pentium III and a Delta44 with the hardware described on other pages of this site, two frequency mixers in quadrature, and anti-alias filters with a 7MHz preamplifier a pretty good receiver is obtained. Some screen dumps show how well a weak signal can be seen on a 90kHz wide screen. A very strong signal at 7MHz is also present. Although there are several spurs of various origin it is no problem to detect a signal 130 db below the strong "undesired" signal. The fft underlying the waterfall graph uses 171072 points with a sine squared window. By expanding the frequency scale by 100 times the sensitivity can be improved by about 10dB. The time to search a wide frequency range then becomes impractical.

Processing normal SSB bandwidth Here are some graphs showing some possibilities using the linux dsp package on a Pentium 60MHz processing the audio output from a TS520. The Pentium 60MHz is fast enough for processing a single channel sampled at 8kHz. Settings for "normal filtering" 25 to 250Hz bandwidth with a small signal delay as well as for very high sensitivity/resolution are demonstrated.

Very low cost radio Just using two cheap standard mixers and a X-tal oscillator one can get a surprisingly good radio receiver. No anti alias filters are needed, the ones built into the sound board are sufficient if dynamic range requirements are modest. Without any amplifier in the chain the noise figure is far from acceptable, so signal amplification in the order of 60dB has to be added. Part of the gain is preferably added as a low noise audio amplifier.

Using ossmix for A/D board setup The sound boards have usually a lot of software controlled switches. There is not really any reason to set them from inside the dsp package.

Setting signal levels in the time domain A/D format and speed, fft sizes and window functions can be changed within wide ranges which leads to large possible variations in digital signal levels on different systems. In principle it could be automated but until that is done, manual adjustment of signal levels is required in case the seconf fft is enabled. This is because the second fft uses 16 bit data to gain speed through the use of MMX instructions. Too low signal levels cause quantization noise and too high signal levels may cause saturation leading to spurious responses and seriously degraded dynamic range. The dsp program has tools to set the levels right.

Setting signal levels in the frequency domain In case the MMX version is selected for the second fft it is necessary to set a signal level parameter to avoid saturation or quantization noise.

Linearity of A/D boards When converting a radio signal to wideband audio the linearity of the mixer and any subsequent audio amplifier is essential. An undesired signal that comes at a low audio frequency will produce overtones that are within the passband. The linearity of the A/D board itself sets the limit for the highest possible spurious free dynamic range. The Delta 44 board is about 1 bit (6dB) better than a standard 16 bit board. The big advantage with the Delta 44 is that it samples faster, thereby allowing more receiver bandwidth and that it has four audio channels allowing two receiver channels in I/Q mode.

Optimized direct conversion receiver for 144MHz Although it is extremely easy to make a reasonably good radio with just two standard Schottky mixers it is not easy to make a direct conversion receiver that preserves the dynamic range of a Delta44 audio board. The problem is that the local oscillator has sideband noise, and in case very good linearity is desired one needs more LO power for a higher level mixer. Increasing both the LO carrier and the LO sidebands means that the audio noise from mixing the LO with its own sidebands grows quadratically. As it turns out, best performance is likely to be obtained with the cheapest low level mixers such as SBL-1 or TUF-1.

AFC, locking to and following a signal To lock to a weak and unstable signal is not easy. One has to use several transforms to find out how the frequency changes with time. To get good enough signal-to-noise ratio (S/N) the transforms have to be averaged which means that the frequency is found with an appreciable time delay. The AFC module can present the delayed signal to the loudspeaker, using the optimum value for the frequency but it can also extrapolate the change with time and present the signal filtered through a filter that is centered to the less accurate extrapolated frequency. AFC is now in a very early stage, in linrad00-19 it is present in single channel mode only - and only if the second fft is enabled. The link shows how the file UNKN422 from AF9Y is received with some different choices of averaging times and fft sizes.

The EME path modulation. Two screen dumps showing the signal of IK3MAC received via the moon. The AFC follows the frequency drift of about 0.5Hz over a 1 minute transmission. The carrier of the signal has a bandwidth of 0.2Hz or less. These graphs clearly show that coherent CW is useful on 144MHz for EME communication. The phase of the carrier can be extracted from a filter with a bandwidth that is about 100 times narrower than the bandwidth required for morse code modulation. This means that the carrier phase will be accurately known below the threshold where a signal can be copied by ear the normal way; thus coherent CW will give a 3dB S/N improvement.

A high doppler meteor. Here is a screen dump showing a meteor (or maybe a satellite) with very high doppler shift that changes by as much as 1kHz per minute!! The AFC will lock well also to very unstable signals as long as the signal frequency changes continuously and does not make sudden jumps. Might be interesting for the microwave bands.

Normal AFC parameters. Details of AFC when locked to the UNKN422.WAV file.

An extremely weak EME signal. Coherent averaging of CW signals This link shows a more than one hour long transmission from a very stable transmitter. This signal is much weaker than what can be copied by any CW operator. This recording shows that averaging over several repetitions of repeated morse code will allow EME at much lower levels than previously possible for CW. Since the carrier can be extracted by use of a bandwidth of about 0.2Hz it will be possible to average coherently which implies a reasonably short time to transfer a message.

Some graphs that illustrate how the AFC operates. Look here to get some idea how the control parameters work.

Blanker demo Normal blanker operation as well as incorrect use of the blankers is shown here. Linrad is currently available in weak cw mode but it is possible to set parameters to fit other modes like ssb and high speed cw. When the weak cw mode is "misused" in this way several things may go wrong. This link shows what may go wrong with the selective limiter causing poor blanker operation. With a good understanding of the processing (or enough happy experimenting) it is possible to get good performance also when "misusing" weak cw mode for SSB at about 2kHz bandwidth.

Running linrad in an EME contest. Here is a screen dump showing the screen at 11.30 UTC Nov 10 2001. A large number of EME signals can be received with my single 14.5dBd yagi (the 2SA13X prototype). The new mouse controls are explained.

Modifications to the Delta44 A/D board. The noise floor of the Delta44 A/D converter can be lowered by 3dB through some simple modifications. The pick up of low frequency interference generated by improper grounding is also eliminated.

Dynamic range of modified Delta44. An iron free band pass filter at 10kHz with 3 LC resonators is used to investigate the dynamic range of the A/D converter.

Spur cancellation. Spurious radiation from computers and other modern electronic equipment causes "spurs". If the spurs are phase stable, i.e. occupy a very small bandwidth, they can be removed. This link shows how spur cancellation is implemented in Linrad by use of digital PLL's.

EME signals in coherent mode. Some screen dumps from strong EME signals showing typical behaviour of the phase of EME signals. One can see that retaining the phase information will improve computerized morse decoding even on signals that suffer from severe chirp. It is also quite clear from these graphs that close to 3dB is gained by coherent processing of weak signals from stable transmitters. The phase of EME signals is stable during QSB peaks while it can twist very rapidly at times when the signal goes through minima.

Moon position and transmit polarization is now presented in the eme window. Linrad reads the popular eme databases and uses the geographical locations to calculate the optimum transmit polarization from moon data and the observed receive polarization.

state of the art VHF crystal oscillators The hardware I am developing for Linrad has used local oscillators with a single transistor running in class C. I have changed the LO of RX10700 and RX70 by addition of an amplitude limiter that makes the common base transistor that loads the crystal run in class AB. As a result the short term frequency stability is about 5 times better. This link shows what one should expect from a good 70 MHz oscillator based on the Leeson model and comparisons of commercial 100 MHz oscillators. Real oscillators are about 20dB better than predicted by the Leeson equation. An explanation is given and the RX70 and RX10700 oscillators are designed accordingly.

A network is added in order to allow a second operator to share the same radio hardware. The RX144 + RX70 + RX10700 + RX2500 hardware will cost a substantial amount of money. For a second operator in a multi-operator station in a contest it is typically not a significant limitation to be limited to the same 95kHz segment as is used by the first operator. For some more information, look at LINRAD NETWORK.

The AFC averaging window The AFC graph has a box by which a window function can be selected or deselected. This page shows the effect of this window. This information is part of the new information about the Linrad AFC linked to from the Linrad home page.

QRSS signals on 137kHz at different bandwidths At low frequencies amateur signals are very weak. Amateurs use ordinary morse code to communicate at very poor S/N ratios. The morse code bit may be up to 120 seconds and the keying is decoded visually on a waterfall diagram. This link shows Linrad waterfall diagrams with fft sizes from 1024 up to 4194304 (N=10 to 22). There are several different sources of interference, the file used for these images is the test input data for development of the qrss mode to become implemented in the next Linrad version.

Interference on 137 kHz As was demonstrated on the previous linked page, the Linrad wideband blanker is not very efficient to improve S/N in processing the qrss test file. This link shows details about the interference. The dominating problem is intermodulation because the test file was made with inadequate analog hardware.

This link: the baseband waterfall graph shows the new linrad screen when the qrss test file (see above) is processed. A waterfall graph with 0.01 Hz per frequency bin and a bin bandwidth of 0.02Hz is no longer a significant load for the cpu despite a total bandwidth of 96kHz in the digital input signal.

The txtest mode is a new feature in linrad-01.05. It allows a quick test of transmitters.

The extended txtest mode makes it easier to see splatter that occurs infrequently. Amateur transmitters typically generate severe interference when the ALC makes large gain changes. The splatter then comes in short bursts and to see how they behave one does no longer have to reset the peak hold spectrum, the new averaged spectrum with a 1 second time constant resets automatically at a suitable speed.

Linrad01-11 has an AM demodulator. This is a trivial addition to the output routines that makes Linrad run as a conventional AM receiver. Some improvement in AM reception is possible by use of the coherent processing routines that were primarily designed for weak CW. Look here for details: Receiving AM modulation with Linrad. Linrad01-11 also has a FM detector, but there is no squelch yet.

Waterfall graphs with extreme resolution can be produced in the baseband waterfall window. This link shows what can be done with a Pentium 166 MHz having 24 megabytes of RAM memory. Sampling is at 22050Hz and the resolution is about 5 mHz (millihertz).

The main receive loop in wcw.c is simplified. Linrad01-21 can be run with 2 * 96 kHz bandwidth on a 266 MHz Pentium MMX without errors although dynamic range is compromized. The current frequency is now shown in the baseband window, it is the center of the bandpass filter except in ssb mode where it is the frequency of the suppressed carrier. The frequency readout as well as some listings of parameter valuse included in Linrad-01.21 are according to suggestions by Pierre ON5GN.

Linrad-01.21 has a time domain oscilloscope that shows the envelope of the RF signal(s) as a function of time. This is a good tool for investigating keying clicks and other problems that transmitters may suffer from. To get to this function, press F4 on the main screen. The envelope is computed from the back transformed first fft and this function will work only when the second fft is enabled and several other parameters are set in a particular way as you will see from the error messages in case you try something that is not compatible with the time domain oscilloscope. Here is an example on how the time domain oscilloscope can be used to understand why the IC706MKIIG produces very strong keying clicks when run at reduced power on 7 MHz.

The F4 time domain oscilloscope also contains a display of frequency vs time. Keying clicks can be produced by frequency/phase modulation and not only by an unsuitable shape of the RF envelope, the AM modulation. For several examples, look here: Keying clicks in the time domain. AM and FM

Linrad-01.25 contains a setup for transmit mode and simulation routine by which Phonetics of random characters can be sent through filters, limiters and AGC/ALC circuits and then through a rx filter into which random noise is also sent. This simulation routine allows a comparison of RF and audio clippers and an optimisation of processing parameters for your own voice. Look here: The Linrad Voice Lab for more info.

The Linrad noise blanker was originally developed for Pentium MMX 200 MHz. It was necessary to use 16 bit MMX instructions because of the limited CPU speed of the time. Today (2004) the fast computers allow the use of 32 bit floating point arithmetics. Starting with Linrad-01.26 the user can avoid the limitations with the 16 bit arithmetics by selecting fft version=0 for both the backwards fft1 and for the forward fft2. Using 32 bit floating point does not improve the reception of weak signals, but it makes the setup less critical and it makes the reception of strong signals better. Look here for details A comparison between 16 bit integer and 32 bit floating point arithmetics for the Linrad noise blanker

A new entry is added in Makefile to make svgalib installation easier.

lir01-37.tbz (375850 bytes) tar archive packed with bzip2. Latest version April 12 2005. This is the last version containing Linrad voicelab. Under Debian Etch with the ASLA sound system it is possible to open a cheap 48 kHz soundcard as if it were a Delta44 with 96kHz sampling frequency. When this is done, the device only reads zeroes and therefore a loop in sellim.c fails since the computed noise floor becomes exactly zero (escape with ctrlC becomes necessary). Linrad-01.37 is immune to this problem, it just shows a zero spectrum. The user should then understand that something is wrong with the input device driver.

The S-meter graph can be used for many purposes. Some examples:
Depolarisation on 10GHz EME. The Linrad S-meter allows true RMS measurements within a narrow bandwith because of the AFC.
144 MHz EME. Signal variation with time on 144 MHz EME can be studied in different time scales.
Peak to average power on SSB. Different stations use speech processing differently. Combining the S-meter information with the simultaneous sound quality from the loudspeaker will allow precise reports about how well speech processors work.

The internal signal generator in Linrad can be used to test Linrad itself and to generate test files to test other SDR software. This link Bits and Dynamic Range shows the effects of truncation on the noise floor.

Running multiple instances of Linrad on a stand alone computer may require the installation of a loopback device. It may also be necessary to disable the loudspeaker output. Read more here multiple instances of Linrad on a single computer.

The window function that selects a part of the spectrum to get a reduced sampling rate after an inverse FFT has been changed from a flat function with a parabolic fall-off to a flat function withg use the gaussian error function erfc fall-off. The subtle differences are discussed here windows for decimation in the frequency domain.

Linrad can transmit the resampled (loudspeaker) output over the network in the same format as used by Linrad for 16 bit raw data. It is for example possible to receive data from a Perseus at e.g. 1 MHz bandwidth and send data to a second instance of Linrad at 96 kHz. The second instance can then send data at 96 kHz to MAP65. The current performance of Linrad used as a resampler is modest however. The dynamic range is about 40 dB only, the resampler was not designed for high speed output. The bandwidth is also limited, the output is undersampled with a bit less than 50% of the possible bandwidth.

lir03-00a.tbz ( 562164 bytes) Tar archive packed with bzip2 Jan 18 2009. The same files are contained here ( 710509 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, the executable for Microsoft Windows and the message files help.lir and errors.lir are contained in ( 331198 bytes) in case you do not want to compile from source code.

Linrad-03.00 has an improved resampler that allows lower timf3 sampling rates without degrading the dynamic range as compared to previous Linrad versions. The general conclusions here windows for decimation in the frequency domain. still hold, but the requirement for a high timf3 sampling rate (CPU load) or small fft1 bandwidth (long time delay) for a high dynamic range is lifted. Have a look at First mixer dynamic range with an fft1 delay of 8.2 milliseconds It is obvious that the window using the Gaussian error function erf(x) is allowing a lower timf3 rate than sin2 or sin3 windows.

The baseband filter is implemented in the frequency domain in earlier Linrad versions. This works well if the selected filter is wider than the frequency response of an individual frequency bin. Previous Linrad versions all used a sine squared window with minimum 5 points on the selected baseband filter but in Linrad-03.00 the user may select other windows with wider frequency responses and steeper skirts. Such windows would require wider baseband filters to work well with filtering in the frequency domain and therefore Linrad-03.00 has an option to select a FIR filter that allows a single bin to be selected for the baseband filter. Have a look here: Frequency domain vs time domain filtering

In Linrad-03.00 and later, the filter curve shown in the baseband window takes the contribution of the frequency response of each individual bin into account. The difference is important when a small size is chosen for fft3, particularly when a narrow window with correaspondingly wide bin response is selected. The windows are sinN for N=0 to N=7. A Gaussian is generated when N=8 and a flat window falling off with the Gaussian error function erf(x) is generated when when N=9. This link the bin response in fft3 has screen dumps that show how the selected window affects the frequency response of an individual frequency bin in fft3.

With the correct baseband filter function now displayed in Linrad it is easier to see the compromise between filter shape and processing delay in Linrad. This link Baseband filter delay vs filter shape shows the performance. Filter shape vs time delay.

Linrad-03.00 new default parameters for the different receive modes. They will be changed on feedback from users and the idea is to make the default parameters fit newcomers.

Linrad-03.00, the very first in the 03.xx series might have various bugs. The changes from 02.58 are done without access to any hardware so testing has been rather limited.

lir03-01a.tbz ( 560557 bytes) Tar archive packed with bzip2 Jan 26 2009 (replacing linrad-03.01.) The same files are contained here ( 707691 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, the executable for Microsoft Windows and the message files help.lir and errors.lir are contained in ( 331462 bytes) in case you do not want to compile from source code.

There is a new parameter under Windows in Linrad-03.01 to select whether to use the WAVEFORMATEX type format or the WAVEFORMATEXTENSIBLE type of format for the Windows device driver. The simple format will only allow 1 or two audio channels and only 16 bit input. It can be used with a 4-channel soundcard by opening a second device with two more audio channels. (Then there would however be an undefined time shift between the two RF channels so polarisation readout might become incorrect.)

The WAVEFORMATEXTENSIBLE format allows 4 audio channels and 24 or 16 bit data. Windows may generously offer 4 audio channels with 24 bit data at 192 kHz on a computer that does not have the corresponding hardware. It does on my Compaq 6510b which actually is limited to 2 channels at 48 kHz with 16 bits. The non-existing channels contain zeroes and there is no information outside the frequency range seen by 48 kHz sampling. The upsampling process is only a waste of cpu resources.

The extended format may allow 192 kHz on a soundcard that actually has that capability, but yet it may deliver only a fraction of the bandwidth. Whether Windows actually reads data at a lower rate and then does upsampling in software or whether it applies a filter is unknown to me. What is important to know is that the extended format sometimes is useless for software defined radios. That means that one will have to limit the number of bits to 16 on some hardware that actually have 24 bit capacity when using Microsoft Windows as a consequence of the need to not select the WAVEFORMATEXTENSIBLE formats.

lir03-02.tbz ( 563499 bytes) Tar archive packed with bzip2 Jan 26 2009 (replacing linrad-03.01.) The same files are contained here ( 711522 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, the executable for Microsoft Windows and the message files help.lir and errors.lir are contained in ( 333254 bytes) in case you do not want to compile from source code.

Linrad-03.02 is a little more verbose than earlier versions. The changes are intended to make it a little easier for newcomers to get started.

lir03-03.tbz (543243 bytes) Tar archive packed with bzip2 Mars 10 2009. The same files are contained here (700580 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, the executable for Microsoft Windows and the message files help.lir and errors.lir are contained in (334142 bytes) in case you do not want to compile from source code.

linrad-03.03 has several changes to adapt it better to MAP65-IQ. There are also several bug fixes.

lir03-04.tbz (543198 bytes) Tar archive packed with bzip2 Mars 26 2009. The same files are contained here (700860 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, the executable for Microsoft Windows and the message files help.lir and errors.lir are contained in (334240 bytes) in case you do not want to compile from source code.

Linrad-03.04 can run the Perseus HF receiver at a sampling rate of 95238.1 Hz which is the data rate expected by MAP65-IQ. The necessary .sbs files are available here

lir03-05b.tbz (543800 bytes) Tar archive packed with bzip2 April 5 2009. The same files are contained here (701388 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, the executable for Microsoft Windows and the message files help.lir and errors.lir are contained in (334918 bytes) in case you do not want to compile from source code.

The only difference from Linrad-03.04 is that a new parameter is added in the setup for SDR-14, SDR-IQ and Perseus. This new parameter can be used to compensate for deviations from the nominal sampling frequency in these units.

lir03-06.tbz (548084 bytes) Tar archive packed with bzip2 May 22 2009. The same files are contained here (705385 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, the executable for Microsoft Windows and the message files help.lir and errors.lir are contained in (337850 bytes) in case you do not want to compile from source code.

When Linrad-03.06 is started for the first time, the user is asked to press S for setup routines as usual, but there is now also a choice, press N for newcomer mode.

Newcomer mode silently sets many parameters to default values and provides a stripped version of Linrad that is intended to make it easier for newcomers to become familiar to Linrad.

In newcomer mode there is no noise blanker, no AFC, no calibration, nothing of the special features of Linrad.

Newcomer mode should make it much easier for someone who does not have the patience to read a lot of text to get started with Linrad. It provides a main spectrum and the associated waterfall graph where the user can select a signal by clicking the mouse. The baseband window is not stripped however. The purpose of newcomer mode is to make new users familiar to the controls provided in the main and baseband windows and how the few parameters that can be changed affect processing.

There are several other changes related to setup procedures. Things motivated by feedback on the Linrad mailing list.

When Linrad is used on a dual core computer it is possible to set parameters that make one thread run 100% of the time. The CPU load does not have to be much above 50% because the other threads may cause a very small load. Still the computer may be overloaded. To allow detection of such problems the T command now displays CPU load individually per thread under Windows where running Perseus at 2 MHz could cause thread overload.

lir03-07.tbz (554970 bytes) Tar archive packed with bzip2 Aug 25 2009. The same files are contained here (716474 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, the executable for Microsoft Windows and the message files help.lir and errors.lir are contained in (338996 bytes) in case you do not want to compile from source code.

Thanks to Pierre, ON5GN, this version of Linrad can use MIT-SHM, (shared memory) with X11 under Linux. As a result, graphics is much faster on some systems. Previous versions of Linrad have had problems under Microsoft Windows as well as under Linux X11 when windows belonging to other programs that execute simultaneously have been moved. The reason was that other programs signal to Linrad that Linrad has to update its screen at a very high rate (maybe 1000 times per second.) Linrad 03-07 will not update more than a couple of times per second in response to signalling from other programs so moving other windows around is no longer a problem. This change is also due to ON5GN Pierre.

Today, in year 2009, there are several changes in computing that may create compatibility problems:

1) Going from 32 bit to 64 bit operating systems.
2) Mouse/keyboard are now USB
3) PCI is replaced by PCI express
4) Windows XP is replaced by Vista or Windows 7.
5) Going from one CPU to many CPUs is the same computer.

Linrad uses 32 bit code and runs under 64 bit as well as 32 bit operating systems. Linrad-03.07 has a couple of text files zz_DISTRIBUTION_NAME.txt that give instructions for installation under 64 bit Linux distributions.

Operating systems improve over time and become better at using multi-processor architectures. Execution speed on a 8 core computer compares Windows and Linux systems of different generations onder high CPU load.

Drive routines may not behave correctly in some computers under some versions of Windows. This link: testing soundcard compatibility with modern computers shows how to verify soundcard compatibility with the combination of hardware and software in use on a particular computer. There are many problems with modern systems....

lir03-08.tbz (559203 bytes) Tar archive packed with bzip2 Oct 02 2009. The same files are contained here (723836 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, the executable for Microsoft Windows and the message files help.lir and errors.lir are contained in (338993 bytes) in case you do not want to compile from source code.

Linrad-03.08 has alternative ways of setting the frequency range for the main spectrum and waterfall. By clicking the frequency scale with the left mouse button one would enter a mode where a lower and upper frequency limit can be set. It is also possible to right click the frequency scale to place the frequency that was clicked at the center of the sceeen. The latter function will obviously only be meaningful when the main spectrum is zoomed to not show the full frequency range.

On multi-processor systems Linrad-03.08 will place the fft1 back transform in a separate thread. There is also a new experimental parameter on multi-processor systems: Max blocked CPUs. This parameter would prevent some threads from being interrupted by other threads. The idea is that cache usage might improve. Reports about wheter this parameter has any significant influence on the CPU load of individual threads are welcome.

Linrad-03.08 will compile under PC-BSD with the commands ./configure followed by gmake xlinrad.

lir03-09.tbz (604167 bytes) Tar archive packed with bzip2 Feb 05 2010. The same files are contained here (761448 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, linradvc.exe and linradpa.exe, the executables for Microsoft Windows and the message files help.lir and errors.lir are contained in (1175252 bytes) in case you do not want to compile from source code.

Linrad has been using WMME drivers for soundcards under Windows and OSS/Legacy/ALSA under Linux. The WMME drivers of Windows Vista are usually not acceptable for an SDR due to delay and cpu load so other types of sound drivers have to be useed. Linrad-03.09 can access soundcards via Portaudio. This gives access to all the different types of drive routines under Windows.

Under Linux Portaudio gives access to Jack which allows the Linrad loudspeaker output to become input for other software.

Linrad-03.09 and later will compile as usual with the commands configure and make. Under Linux, when compiling for Linux, the configure script will automatically create a Makefile that compiles with Portaudio and Jack if they are installed. When compiling for Windows, the file linrad.exe that runs without portaudio is always generated. The configure command looks for the files pa-lir.lib and pla-vclir.lib. In case they are found in the Linrad directory the make command will also produce linradpa.exe and linradvc.exe respectively.

The file portaudio.dll must be available to linradpa.exe. To execute linradvc.exe the runtime library of Microsoft Visual C must be installed and the file PA19.dll must be available. The dll files as well as the libraries needed to compile Linrad from source code are available here: (30595 bytes) as well as here: linrad-pa.tbz (23914 bytes)

This link How to install Portaudio for use with Linrad describes how to install Portaudio under Linux and how to create the portaudio files needed for Linrad.

Linrad-03.09 will print warning messages when various buffers cause too much delay or overflow due to CPU overload. The FM detector is now supplied with an anti-alias filter so it is possible to receive good quality wideband FM without setting the loudspeaker sampling rate to 192 kHz. There is also an enhanced FM detector.

Linrad-03.09 has a playback control function that allows the user to specify start and stop times for playback. Linrad can record very large files under Linux and with this new tool one can use an overnight recording of a wide spectrum and set it to play a particular moment over and over again. This way a DX-er can listen for IDs from all stations Linrad plays a selected top of the hour over and over again.

Portaudio is claimed to allow very good latency, but that does not seem to be true at all. On my HP6510b under Windows XP it is necessary to set a low value for MAX DMA rate with Portaudio. For some reason the callback function can not be called at a high rate, with MME drivers through Portaudio it may be necessary to limit MAX DMA rate to 10 Hz. Under Win XP portaudio works better with the Direct Sound drivers. ASIO might be even better.

There are now many combinations:

Linrad MME
Portaudio MME
Portaudio Direct Sound
Portaudio ASIO
Portaudio WASAPI
Portaudio WDM-KS

Linrad 4Front OSS
Linrad alsa-oss
Linrad native ALSA
Portaudio 4Front OSS
Portaudio alsa-oss
Portaudio native ALSA

For receiving where a small delay from antenna to loudspeaker is not important, all alternatives should be OK provided that the MAX DMA rate parameter is set low enough and that the Output delay margin is set large enough. For use in QSK CW mode where timing is very important the different alternatives may differ significantly and what to choose may depend on the hardware as well as the version of the operating system.

lir03-10a.tbz (606293 bytes) Tar archive packed with bzip2 Feb 22 2010. The same files are contained here (763295 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, linradvc.exe and linradpa.exe, the executables for Microsoft Windows and the message files help.lir and errors.lir are contained in (1177513 bytes) in case you do not want to compile from source code.

lir03-11.tbz (606331 bytes) Tar archive packed with bzip2 March 4 2010. The same files are contained here (764349 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, linradvc.exe and linradpa.exe, the executables for Microsoft Windows and the message files help.lir and errors.lir are contained in (1179592 bytes) in case you do not want to compile from source code.

This version does not work with the Perseus HF receiver. Do not select RDWR mode for soundcard input under OSS with 03-11. The latest stable version is still linrad-03.08.

lir03-12.tbz (637051 bytes) Tar archive packed with bzip2 May 8 2010. The same files are contained here (810942 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, the executable for Microsoft Windows and the message files help.lir and errors.lir are contained in (429210 bytes) in case you do not want to compile from source code. There is again only one executable for Windows, but it requires a dll for Portaudio. Downolad (485835 bytes) and place it in the linrad directory or somewhere in your path. Maybe C:\WINDOWS\system32 or whererver you might find appropriate.

Several problems that were introduced with the introduction of Portaudio have been solved.

The delay time from antenna to loudspeaker can now be set to about 15 ms under all operating systems provided that appropriate drivers are available. The fast drivers under Microsoft are ASIO and WASAPI.

There is a stereo decoder in wideband FM mode and users willing to compile from source can do splatter removal in FM mode as described here: Detecting FM with neighbour channel suppression.

Linrad03-12 can be compiled in 64 bit mode under Linux. This is experimental. The assembly routines are incorrect and must not be used and the configure script does not check properly for availability of packages. Only normal processing is tested and other functions are likely to cause crasches.

lir03-13.tbz (646906 bytes) Tar archive packed with bzip2 May 8 2010. The same files are contained here (823552 bytes) This package will generate executables with the commands configure and make under Linux as well as under Windows.

linrad.exe, the executable for Microsoft Windows and the message files help.lir and errors.lir are contained in (435049 bytes) in case you do not want to compile from source code. This version of Linrad includes support for Perseus under Linux as well as for the SDR-IP under Windows as well as under Linux.

There are known bugs in the closing of both Perseus and SDR-IP. It is necessary to exit from Linrad and restart every time the SDR-IP or Perseus has been opened under some of the operating systems. For this reason it may be necessary to edit par_ssb and the other mode files by hand or to remove such files to force creation of a new file with Perseus under Linux if parameters were not set as desired in the first run.

There are many alternatives for the loudspeaker output under Windows. Here is a list in order of performance. Select the first alternative that exists for the soundcard that you want to use for output:

1: Portaudio ASIO
2: Portaudio WDM-KS
3: Portaudio WASAPI
4: Native MME
5: Portaudio Direct Sound
Do not use Portaudio MME.

It seems reasonable to limit the number of options but feedback from many users is needed to make sure that nothing useful is removed.

Source: lir03-14.tbz (656314 bytes) or (839239 bytes, July 2010)
Executable for Windows: (440984 bytes)

The configure script for Linux and PC-BSD is far more verbose now. Known bugs are corrected and Linrad can now be compiled for 64 bit code under Linux.

Support for Si570 (Softrock and others) has been added and the list of supported transceivers in users_tr.c is now: IC-275, IC-706, TS-850, TS-2000, FT-450, FT-736, FT-817, FT-897, FT-920, FT-950, FT-1000 and FT-2000

Source: lir03-15a.tbz (668053 bytes) or (850390 bytes)
Executable for Windows: (443817 bytes)

Support for USB2LPT added to allow use of the WSE converters with a parallel port on USB. Only USB2LPT Model 1.6 is supported. This is another contribution by Pierre, ON5GN.

Linrad-03.15 allows longer storage times for FFT1 and FFT2 and can thus be run at higher resolution in the baseband. An error in the save to hard disk that was present for Perseus and SDR-IP in earlier versions is corrected. There are also some changes that hopefully give tighter control of the total delay from antenna to loudspeaker.

Source code: lir03-16a.tbz (674985 bytes, Nov 2010) or (855120 bytes)
Executable for Windows: (446416 bytes) Linrad-03.16 was replaced by 03-16a Nov 7 2010. Network input, SDR-IQ input and input under Linux when oss-compatibility is absent had problems in 03.16.

Linrad-03.16 can be used with Excalibur, G31DDC, from Winradio but only under Microsoft Windows. The code for Perseus under Linux is optimized and runs now well also at 2 MHz.

The setup procedures are changed with an hope they would seem more logical to newcomers.

Source code: lir03-17a.tbz (686137 bytes, Nov 27 2010) or (871511 bytes)
Executable for Windows: (447049 bytes)

This version has bug corretions for the soundcard test function of the main menu as well as a correction of an error in 64 bit verisions of Linrad that ocurs when 18-bit files are used.

Source code: lir03-18.tbz (689397 bytes, Dec 14 2010) or (878518 bytes)
Executable for Windows: (451815 bytes)

Linrad versions up to linrad-03.17a have aliases on the output. Particularly when the soundcard output sampling rates are high. This link shows what those aliases look like under different circumstances. Resampling from baseband sampling speed to soundcard sampling speed in old versions of Linrad Todays computers that can not do low speed D/A conversion in hardware will benefit from a change in the way Linrad does this resampling.

Linrad-03.18 can display correlation spectra. Here is some information about that: Using average correlation spectra for sideband noise measurements with Linrad.

Source code: lir03-19.tbz (692348 bytes, Jan 17 2011) or (887781 bytes)
Executable for Windows: (452250 bytes)

Linrad-03.19 has bug corrections for the 64 bit version (Linux only.) The F1 key is unavailable on some computers because some system program would trap it. Linrad now also responds to the '!' key as an equivalent to F1.

Source code: lir03-20.tbz (704795 bytes, Feb 5 2011, updated june 16 2012) or (889437 bytes, updated june 16 2012)
Executable for Windows: (453859 bytes)

Linrad-03.20 has an AGC that works the way the AGC war originally intended to work. Previous versions of Linrad has an AGC that does not differ much from conventional AGC systems in SDR software. Look here for details: AGC in receivers.

Source code: lir03-21.tbz (692607 bytes, March 6 2011, updated june 16 2012) or (875313 bytes, updated june 16 2012)
Executable for Windows: (455739 bytes)

Linrad has been using the Windows system timer incorrectly in versions linrad-02.38 to linrad-03.20. The error seems to not have caused any problems in versions 03.11 and earlier, but versions 03-12 to 03.20 are likely to cause an error in the Windows system clock. The system clock might run faster than realtime. The error is in the function lir_sleep in wsys.c and it is eliminated in Linrad-03.21 and later versions.

Source code: lir03-22.tbz (701094 bytes, March 16 2011, updated june 16 2012) or (880002 bytes, updated june 16 2012) or lir3-22b.tbz (692382 bytes, March 23 2011) or (880802 bytes)
Executable for Windows: (462643 bytes)
Executable for Windows: (462641 bytes)

Linrad-03.22b is a little more verbose for Linux newcomers. There are no changes in the actual processing.

There are two versions for Windows. They differ only in the version of Portaudio they are linked with. linrad-03.22-01 is linked with a Portaudio snapshot from Oct 2009 while linrad-03.22-02 is linked with pa_stable_candidate_v19_20110302 from March 2011.

Linrad-03.22 has support for Soft66 radios provided by Thomas Horsten. The Si570 setup by ON5GN is extended and a new parameter is available in expert mode to allow automatic start of a receive mode. There is also a bug correction that prevents very high CPU loads that 03-21 might cause when the output delay margin is too small.

Source code: lir03-23.tbz (701094 bytes, June 29 2011, updated june 16 2012) or (882548 bytes, updated june 16 2012)
Executable for Windows: (463653 bytes)

Linrad-03.23 comes with a couple of new features:

Portaudio can be used for input.
A voice squelch is added.
Soundcard devices are tested during setup.
New parameters allow a more precise control of the way the soundcards are used.
The I and Q samples can be shifted by use of a new parameter. This allows SB Audigy LE and others with the time shift bug to be used with Linrad.

Source code: lir03-24.tbz (701395 bytes, July 12 2011, updated june 16 2012) or (882827 bytes, updated june 16 2012)
Executable for Windows: (462895 bytes)

Linrad-03.24 has independent AGC and squelch when two RF channels are used in X+Y mode. A bug is corrected that previously made it impossible to notch out the carrier in coherent modes when two channels were in use. The linker commands are changed to make Linrad compile under 64 bit xubuntu-11.04 (I can not verify because this distro fails to install on any of my 64 bit computers.)

Source code: lir03-25.tbz (703021 bytes, Aug 09 2011, updated june 16 2012) or (889052 bytes, updated june 16 2012)
Executable for Windows: (475063 bytes)

Linrad-03.25 has support for ExtIO libraries. That should make it possible to use Linrad with all the hardware for which Winrad ExtIO.dll files are available. The extio routines are based on prototypes in (w)users_hwaredrivers.c files supplied by Alex 4Z5LV for the AFEDRI SDR. Linrad looks for ExtIO_xxxxx.dll in the current linrad directory as well as in the system directory and gives the user a choice. For AFEDRI SDR there is a library for Linux with the name (possibly with version numbers.) Linrad-03.25 might work with Linux ExtIO GUIs that follow the ExtIO specifications for Winrad provided that they follow the name convention. The files may be placed in any of the usual places under Linux or in the Linrad directory.

Linrad-03.25 has a change in the selective limiter that affects the way the noise blanker works on strong signals.

Source code: lir03-26.tbz (727825 bytes, Oct 5 2011, updated june 16 2012) or (913314 bytes, updated june 16 2012)
Executable for Windows: (479588 bytes)
Linrad-03.26 has new routines for G31DDC Excalibur that use the new API from Winradio. Support for FiFi-SDR is added. The header of the .wav files that Linrad generates is hopefully correct with this version. Various bugs related to the timing of input and outpur streams are corrected. Linrad-03.26 works with wider ranges of buffer sizes (DMA rates.) Recent Linux kernels (2.6.37 to 3.0.0 and perhaps later) have a bug that causes a call to XPutImage or XShmPutImage to never return. Linrad-03.26 has a fix for that, another thread will make a call to the same API entry once a second in case there is a risk that the screen thread is hanging on the API call.

Source code: lir03-27.tbz (722686 bytes, Oct 5 2011, updated june 16 2012) or (913580 bytes, updated june 16 2012)
Executable for Windows: (480810 bytes)

Linrad-03.27 remembers parameters for MAP65. The rate of updating spectra on screen is limited to 10 Hz to reduce the risk of screen overload in case the user has not set an appropriate averaging number. The time when the sound output starts after a signal has been clicked is tighter controlled.

The Linux configure script is updated to allow cross compilation for Windows under Fedora 16 where a symbolic link confused earlier configure scripts. The source code for Windows specific things is modified to become compatible with the modern gcc with better error checking that is used under Fedora 16.

Source code: lir03-33.tbz (721078 bytes, Jan 23 2012, updated june 16 2012) or (910185 bytes, updated june 16 2012)
Executable for Windows: (481410 bytes)

Versions 03.28 to 03.32 contain bugs that causes malfunction in case the second FFT is enabled. As compared to 03-27 the 03-33 version has many improvements.

Works under Max OS X.
Inverted or non-inverted spctrum with ExtIO libraries.
Level control for output to MAP65.
The routine for setting the display range in the main spectrum is corrected.
Disk writes are in a separate thread. Allows disk writes at 2 MHz without requrement of large A/D buffers
The setup procedure for Si570 uses fewer blank lines.
Errors that prevented proper playback of single channel recordings have been corrected. (Example UNKN422.wav)
The configure script is updated to become compatible with Fedora 16.
There is now a mode to receive timf2 data in Linrad. That mode can be used to verify that the data sent to MAP65 is correct.
The timf2 data sent to MAP65 from linrad has always contained small glitches, time intervals where data from an incorrect point in time was transmitted. These errors are now corrected.

There are many other little corrections. Linrad-03.33 is a candidate for "The latest stable version of Linrad."

Reports on bugs or any undesired behaviour are most welcome.

Source code: lir03-34.tbz (732029 bytes, Feb 5 2012, updated june 16 2012, updated june 16 2012) or (924526 bytes, updated june 16 2012)
Executable for Windows: (480924 bytes)

A bug in the Si570 setup is corrected. The function "C = Remove center discontinuity" in the calibration menu now checks that a calibration file actually exists before it is executed. Previous versions would run on uninitiated memory in case the operator makes the mistake to use this function inappropriately. The load of ExtIO libraries is moved to be the very first code to be executed. That makes Linrad more tolerant to bugs in ExtIO libraries since those libraries will now be loaded before Linrad initializes its data segment. (This solves problems with the FunCube dll.)

Source code: lir03-35a.tbz (721390 bytes, Feb 20 2012, updated june 16 2012) or (911393 bytes), updated june 16 2012
Executable for Windows: (481030 bytes)

Linrad-03.35a corrects several bugs in 03-34.
1) Latency when second FFT is in use.
2) Spur removal.
3) Nice behaviour when ExtIO is selected and hardware is not present.
4) Bug correction in main spectrum and waterfall zoom and resizing.
5) Right-clicking the mouse on places where operation is undefined no longer causes a non-working mouse.
Plus some minor corrections.

Source code: lir03-36.tbz (732088 bytes, Feb 24 2012, updated june 16 2012) or (9124888 bytes), updated june 16 2012
Executable for Windows: (481182 bytes)

Linrad-03.36 differs from Linrad03-35 versions only in the management of ExtIO dll files. The FunCube dll file has a callback routine that causes Linrad to crash. The problem is probably caused by the dll, but there is not any reason to use the dll callback with Linrad. The 03-36 version has a user option to not use it. In case you are not using extio libraries there is no reason to upgrade from whatever version of 03.35 you might use.

Source code: lir03-37.tbz (722233 bytes, March 6 2012, updated june 16 2012) or (912542 bytes), updated june 16 2012
Executable for Windows: (482138 bytes)

The zero point for the waterfall colour scale can now be auto-adjusted by right-clicking the control box.

Source code: lir03-38.tbz (727027 bytes, May 16 2012, updated june 16 2012) or (917170 bytes), updated june 16 2012
Executable for Windows: (482255 bytes)

The setup for SDR-14 and SDR-IQ under Linux is changed. Linrad now searches for /dev/ft245, /dev/ft245x and /dev/ttyUSBx (where x is 0 to 7) and presents a list to the user who can select what unit to use by its serial number. It is possible that several instances of Linrad now can run with several SDR-14 and SDR-IQ units in one computer.

The Si570 setup is corrected. It now saves the passband direction properly. The LO multiplier range is extended to 0.1 - 64 to allow more hardware types. Values below 1 are "unrounded" to represent 1/2, 1/3, 1/4, ... 1/10 with good accuracy.

Source code: lir03-39.tbz (796260 bytes, June 17 2012) or (986709 bytes)
Executable for Windows: (483694 bytes)

Besides allowing usage of DVB USB dongles under Windows through ExtIO dll files Linrad-03.39 has builtin support under Linux through the rtlsdr library.

Linrad-03.39 has a more verbose configure script that presents the command or sequence of commands to install the softwares required to build Linrad to support the various hardwares. Use the mouse to copy and paste the command(s) into the command line of your console window.

Linrad-03.39 has a couple of bug corrections. One bug that prevents operation under Windows 98 is corrected and that particular bug is corrected in previous versions from linrad-03.20.

Source code: lir03-40.tbz (736106 bytes, July 4 2012) or (935314 bytes)
Executable for Windows: (482765 bytes)

This version allows better performance with RTL-SDR under Linux.
REMOVE /usr/local/lib/librtlsdr* if present before you run configure -- with-help
Copy and paste the commands needed to install the new version of rtlsdr.

Have a look here: RTL-SDR with Linrad under Linux

Source code: lir03-41.tbz (736209 bytes, Aug 3 2012) or (928995 bytes)
Executable for Windows: (485868 bytes)

The S-meter graph has a new mode for S/N evaluation, SDR-14 and SDR-IQ works well under Windows 7 (up to and above 250 kHz sampling speed), fat libraries in OS X are recognized, AFC works with all window types.

Source code: lir03-43.tbz (736587 bytes, Aug 15 2012) or (929579 bytes)
Executable for Windows: (485468 bytes)

The S/N computation (NF meter) can use bigger buffers. A new parameter is added for that. RTL-SDR can be used for lower sampling frequencies and a new option for soundcard input with reversed frequency scale is added.

Source code: lir03-44.tbz (748839 bytes, Sept 16 2012) or (943361 bytes)
Executable for Windows: (492778 bytes)

Linrad-03.44 works under Debian on RaspberryPi. Screen writes are moved to a separate thread undert Windows and Linux X11 which makes usage on remote systems more transparent. If the transfer of screen information is too slow, Linrad will no longer get underrun errors and sync errors, the screen would become slow instead. Tell Windows or X11 that you want a 256 colour screen if you run remotely.

Source code: lir03-45.tbz (763278 bytes, Nov 10 2012) or (1043967 bytes)
Executable for Windows: (494455 bytes)

The way ExtIO libraries are invoked in Linrad is completely rewritten. All communication with such libraries are now made from the main thread and the setup is more straightforward. The support for RTL-SDR under Linux is improved with different gain modes for different situations.

As usual there are several more bug corrections...

Source code: (Dec 22 2012) lir03-46.tbz (762197 bytes) or (1043421 bytes)
Executable for Windows: (495552 bytes)

Bug corrections. The SIMD routine for fast first FFT with dual channel receivers did not work under Windows under some circumstances because calls from assembly routines did not save registers.) When parameters were set for calls to not be used there were no problems. This is now corrected. Several bugs in the calibration routine for "calibrate amplitude and phase" are corrected and some of the algorithms are improved to make calibration at high speeds with poor S/N possible. Now rtl-sdr can easily be calibrated at bandwidths above 3 MHz.

Source code: (Jan 26 2013)
lir03-47.tbz (762157 bytes) or (1040043 bytes)
Executable for Windows: (547214 bytes)

The libraries for RTL-SDR are updated and implemented under Microsoft Windows. Linux users who already have installed librtlsdr should uninstall it and run ./configure to get instructions for how to install rtl-sdr-linrad2.tbz The sampling rate of RTL-SDR is limited to 2.4 MHz because the dynamic range is severely limited at higher speeds. (Something is saturated much earlier than the 8 bit ADC.)

(April 05 2013)
Source code: lir03-48.tbz (800070 bytes) or (1086978 bytes)
Executable for Windows: (613999 bytes)

Linrad-03.48 comes with several new features. There is now support for the FunCube Pro+ and there are the new alternatives to make flinrad and flinrad64 which use the framebuffer device under Linux. Those executables might be a good improvement for RaspberryPi. It is necessary to install svgalib for the framebuffer version, but it does not matter that svgalib is obsolete - only the mouse part of it is used in flinrad and flinrad64. Linrad 03-48 no longer needs the obsolete libusb under Linux. The default now is to use libusb-1.0, but users can select to use libusb.

(Sept 29 2013)
Source code: lir03-49a.tbz (813867 bytes) or (1109696 bytes)
Executable for Windows: (615248 bytes)

Linrad 03-49 contains some more options for rtlsdr and several bug-fixes. The setup procedure has several changes intended to make Linrad easier for newcomers.

(Nov 20 2013)
Source code: lir03-50.tbz (839898 bytes) or (1138530 bytes)
Executable for Windows: (615179 bytes)

Linrad is now on Sourceforge. You can get it from there with this command:

svn checkout linrad

There is a new folder cmake which contains a README file with instructions how to build Linrad under Linux as well as under Windows.

Linrad-03.50 has bug corrections in the spur removal routine. The new routines for Miri Msi001, bladeRF, PCIe 9842 and openHPSDR are not yet working.

(Dec 01 2013)
Source code: lir03-51.tbz (842733 bytes) or (1149653)
Executable for Windows: (615650 bytes)

This version corrects a bug introduced in linrad-03.50 that makes it impossible to configure a RTL2832 USB dongle. The computation of polarization for a two channel system where only one signal is prsent is corrected. This may affect spur removal and AFC in some cases.

(Mar 09 2014)
Source code: lir03-52.tbz (870606 bytes) or (1173197)
Executable for Windows: (618327 bytes)

This version has support for Miri Msi001, bladeRF, PCIe 9842 and Afedri USB under Linux, but not yet under Windows. There are several minor improvements in the calibration routines and in other places. The configure script under Linux gives the commands to install the libraries that different hardware might require for the major Linux distributions. There is also a first step towards implementing a new user interface, but that is not yet visible to the normal user.

(Mars 21 2014)
Installer for Windows: setup-linrad-04.00.exe (843728 bytes)
Source code: lir04-00.tbz (887240 bytes) or (1189262)
Executable for Windows: (664148 bytes)

(July 16 2014)
Installer for Windows: setup-linrad-04.01.exe (781302 bytes)
Source code: lir04-01.tbz (884460 bytes) or (1186256)
Executable for Windows: (587759 bytes)

Libraries for USB are now loaded at run-time. This means that compatibility problems with dll files will not occur unless the dll files are really needed. The user can choose between old and new usb libraries to select the one for which the hardware has drive routines installed.

Linrad-04.01 has some new routines for faster FFT processing. This is on-going work and you can perhaps find better performance by use of this command:

svn checkout linrad

(Nov 4 2014)
Installer for Windows: setup-linrad-04.02.exe (770332 bytes)
Source code: lir04-02.tbz (880754 bytes) or (1173574)
Executable for Windows: (574833 bytes)

Linrad-04.02 comes with many improvements. The first FFT can now run in parallel in up to 6 separate threads.
More efficient FFT implementations are available for some hardware architectures.
The converter option is corrected.
Several bug corrections.

(Jan 7 2015)
Installer for Windows: setup-linrad-04.03.exe (788310 bytes)
Source code: lir04-03.tbz (887998 bytes) or (1187002 bytes)/a>
Executable for Windows: (598391 bytes)

Airspy is now supported and a new feature for fast tuning is added. Click in the baseband window. Also some bug corrections as well as some "code cleaning" that might have introduced new bugs.

Linrad-04.04 is removed, a mistake in sellim.c where decisions are taken about which frequency bins to classify as strong signals caused excessive CPU load.

(Feb 8 2015)
Installer for Windows: setup-linrad-04.05.exe (789509 bytes)
Source code: lir04-05.tbz (888467 bytes) or (1194610 bytes)/a>
Executable for Windows: (599164 bytes)

rtlsdr dongles with R820T tuners can now be used with narrow IF filters for greatly improved performance as e.g. FM receivers.

(June 13 2015)
Installer for Windows: setup-linrad-04.06a.exe (793585 bytes)
Source code: lir04-06a.tbz (910726 bytes) or (1231501 bytes)/a>
Executable for Windows: (607633 bytes)

linrad-04-06 is replaced by linrad-04.06a Dec 19 2015. The only difference is under Microsoft Windows where dll files are now loaded with LOAD_WITH_ALTERED_SEARCH_PATH instead of with LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR. The latter did not work in Windows 7 until after a Windows update in November 2015. It is however not defined in Windows XP so it is better not used.

Linrad-04.06 comes with a new policy for dll files under Microsoft Windows. The system directory is no longer used, Linrad will now look for dll files and associated binary files in C:\Linrad\dll\ There is a file that can be unzipped in the C:\Linrad directory to create the dll subdirectory if not already present and place the files Linrad might need there. (There is one exception WD-Dask.dll for PCIE9842 has to be downloaded from the Adlink site and placed in C:\Linrad\dll\ manually.

There is a large number of minor adjustments in the code with better verbosity that hopefully will be valuable to newcomers.

The speech processor is now (again) working and can be used to send processed audio to soundcards.

(Sept 15 2015)
Installer for Windows: setup-linrad-04.07a.exe (806134 bytes)
Source code: lir04-07a.tbz (917505 bytes) or (1239048 bytes)/a>
Executable for Windows: (622418 bytes)

linrad-04.07 is replaced by linrad-04.07a for the same reason as linrad-04.06 was replaced by linrad-04.06a. This version comes with a large number of bug corrections.
Portaudio works again under Windows (Needed for Delta44 in Windows 10)
Resends from Afedri are properly treated so Afedri now works on slow networks/computers.
Sending baseband over the network provides I and Q in coherent modes.
And more.

(Dec 19 2015)
Installer for Windows: setup-linrad-04.08.exe (1289458 bytes)
Source code: lir04-08.tbz (923334 bytes) or (1250831 bytes)/a>
Executable for Windows: (1261127 bytes) The Windows executables uploaded Dec 19 were compiled with Debian Sid. They do not work with input from the network because of a compiler bug. IP_ADD_MEMBERSHIP is given the value 5 while the correct value should be 12(line 2121 in network.c). The windows executables were corrected Jan 28 2015.

Linrad-04.08 comes with two executables. linrad.exe and linrad64.exe. It wants a new set of dll files for which an installer is provided. The 64 bit version has however a limited set of dll files so it does not work with all the hardware.

Linrad-04.08 has better control for the adaptive polarisation time constant, the start polarization can be set to an arbitrary angle, it can be calibrated for the Maya 44 soundcard which has a time shift between the two stereo channels, the frequency calibration for Afedri is greatly improved (from a 1 Hz error to an error in the 10 mHz range.) There are also manu bug corrections.
(And possibly new bugs introduced.)

(Mar 15 2016)
Installer for Windows: setup-linrad-04.09.exe (1331017 bytes)
Source code: lir04-09.tbz (952500 bytes) or (1307932 bytes)
Executable for Windows: (1307932 bytes)

Linrad-04.09 comes with great many changes. Under Windows one can select Windows fonts. There is (untested) support for CloudIQ and dual SDR-IP. The transmit side might be useful for experimenters that tell Linrad they are experts. It is in an early stage though.

(May 3 2016)
Installer for Windows: setup-linrad-04.10.exe (1332850 bytes)
Source code: lir04-10.tbz (948119 bytes) or (1280585 bytes)
Executables for Windows: (1310018 bytes)

Linrad-04.10 comes with a new dll package that supports SDRplay from 50 kHz to 2060 MHz with a gap between 250 and 390 MHz. 64 bit dll files are moved to C:\linrad\dll\x64 because some dll files need other dll files that must have identical names for both architectures.

The transmit side for Softrock is operative for CW QSK and several bugs relating to the setup of souncards are corrected.

(Jan 24 2017)
Installer for Windows: setup-linrad-04.11.exe (1350521 bytes)
Source code: lir04-11.tbz (956576 bytes) or (1286176 bytes)
Executables for Windows: (1333723 bytes)

A new window for phasing signals from HF antennas is added. The user can now set parameters to correct amplitude and phase unbalance in two-channel systems.

The build system is changed under Linux. Only one executable is needed, xlinrad (or xlinrad64) asks the user what screen to use. X11, MIT-SHM, svgalib or FBDEV. Linrad-04.11 is tested on ODRIOD and Raspberry Pi.

There are numerous bug corrections in this version.

(Feb 1 2017)
Installer for Windows: setup-linrad-04.12.exe (1351976 bytes)
Source code: lir04-12.tbz (953189 bytes) or (1334989 bytes)
Executables for Windows: (1334989 bytes)

Linrad-04.11 is replaced because AGC on/off does not work properly. Linrad-04.12 corrects that and also has some corrections for multistream mode with Net Afedri. Otherwise it is identical to 04.11.

(Oct 29 2017)
Installer for Windows: setup-linrad-04.13.exe (1360165 bytes)
Source code: lir04-13.tbz (24570291 bytes) or (1304080 bytes)
Executables for Windows: (1345456 bytes)

Linrad-04.13 comes with support for OpenCL and clFFT. Results are discouraging. On all systems I have tried the motherboard CPU is better than the nvidia GPU. Maybe the way Linrad implements clFFT is not correct (???) Linrad-04.13 has several bug corrections and improvements to the setup (./configure --help) under Linux. The network writes are now in a separate thread. I have received reports about 100% cpu load when network was running and I see no other explanation than that the sendto statement is blocking even though the socket has been opened as non-blocking (Windows.) In case the problem still exists it will be easier to trouble-shoot now.

(Jan 25 2018)
Installer for Windows: setup-linrad-04.14a.exe
Source code:
lir04-14a.tbz or
Executables for Windows:

Support for Airspy HF+ is added. Installation under Linux is simplified and various bugs corrected. linrad-04.14a replaces linrad-04.14 with a correction that only affects the Airspy HF+. The float format delivered by HF+ may overflow when converted to integers in linrad-04.14.

(May 3 2021)
Installer for Windows: setup-linrad-05.00.exe
Source code:
lir05-00.tbz or
Executables for Windows:

Many changes from Jan 25 2018 to May 3 2021. Corrections to comply with stricter error checking in the C compiler. A signal analyzer is added for the evaluation of phase noise and AM noise of oscillators. Changes can be found at sourceforge versions 857 to 989:

(July 26 2021)
Installer for Windows: setup-linrad-05.01.exe
Source code:
lir05-01.tbz or
Executables for Windows:

Changes can be found at sourceforge versions 989 to 993:

(March 01 2023)
Installer for Windows: setup-linrad-05.02.exe
Source code:
lir05-02.tbz or
Executables for Windows:

Support for SDRplay RSP2duo added by Franco Venturi K4VZ.
Changes can be found at sourceforge versions 994 to 1002:

To SM 5 BSZ Main Page