The transmit side of Linrad. The development page.
(Oct 5 2008)

Transmission modes.

Linrad, as any SDR (software defined radio) could produce all transmission modes that are compatible with the bandwidth of the hardware. The first transmission mode implemented in Linrad is voice SSB since this mode is the most challenging from a hardware point of view. A first generation of the speech processor is present already in Linrad-02.35, but it is only available in the Tx setup menu at this time. Before implementing the transmit functions to run simultaneously with the Linrad receiver with TX or RX muted depending on the level of the signal from the microphone input it seems to be a good idea to design the analog transmit chain that will bring the processed audio signal to RF frequencies.

The speech processor can be used to produce an optimized signal for the input of a conventional SSB transceiver, but such usage will require user routines that control the transmit/receive switching for the particular transceiver in use and the latency times will probably be too long to make such usage really interesting. Just using the Linrad speech processor without any control of the hardware could allow a couple of dB more (average) transmit power and less splatter at the same time. Perhaps the sound quality could be slightly improved at the same time.

The baseband

The receive side of Linrad provides an extremely good dynamic range when used together with the WSE converters. and a modified Delta 44 modified Delta 44. As a first step in the development on the transmit side it would be desireable to have a spectrum purity of the output from the D/A converters of the Delta 44 that matches the performance of the A/D converters. This link the baseband dynamic range shows the performance of the Delta44 when two computers, each one equipped with this soundcard are used to send and receive in the baseband with the D/A converters in one computer connected to the A/D converters in the other computer. When both soundcards are modified and properly connected through differential amplifiers, the white noise floor is raised by about 2 dB when the transmitter is running as compared to the noise level when nothing is connecter to the receive side soundcard. This means that the white noise on the transmit side is lower than the white noise at the receive side which is a good start.

The transmit converters.

To make an experimental transmit chain an easy solution is to use the same IF frequencies as used in the receive chain. It will then be possible to check the performance step by step at the different IF frequencies. The delta44 allows about 90 kHz bandwidth as a receiver, but it is not spur-free. There is an image spur which is typically suppressed by 70 dB and there is also some noise and an infinitely deep notch at the passband center (DC voltages.) On top of that, there are overtones of the audio producing spurs at about -100dB relative to a near saturating signal. The same problems will be present in a transmitter. The TX2500 is a modified RX2500 that produces an output signal in the range 2510 to 2543 kHz. It is not optimal, it is just something that was pretty easy to make.

Speech processing for SSB.

One might think that speech processing is critical and that it could be possible to gain a significant advantage by using more sophisticated routines than those generally used in amateur radio. To allow a study of speech processing algorithms, the "voicelab" routines were added into Linrad. The conclusion from the studies with voicelab were that the only important factor when it comes to readability under weak signal conditions is the average power. Usually amateur equipment is limited by peak power; there is a level that must not be exceeded. Under such conditions, the best speech processor will be the one that produces the smallest peak to average power ratio. In the voicelab studies, the best results were 4 to 5 dB for the standard phonetics.

The Linrad speech processor uses a combination of AGC and RF limiters to produce down to 4 dB peak to average power ratios in a 2.4 kHz passband (200 Hz to 2.6 kHz.) The Linrad speech processor has a muting function, in case the microphone signal is below a certain level, Linrad mutes the signal totally and the idea is that the gap in the transmit should be used to monitor the transmit frequency in receive mode. The first generation of the Linrad speech processor was introduced with Linrad-02.36. It is not yet optimized, but it is close enough to the desired speech processing to allow focus to be moved to other aspects of the Linrad transmit side.


lir02-36a.tbz (492865 bytes) Tar archive packed with bzip2 Aug 24 2007. Linrad-02.36 is essentially the same as Linrad-02.35 on the receive side, but it allows transmitting SSB while the receiver is running in SSB mode.

T/R switching and keying.

In CW mode a transceiver that switches very fast between transmit and receive can be used as a radar. The most useful application that I am aware of is to monitor aurora reflections on VHF. For this purpose switch times below 2 milliseconds are required. It is not practical to use any control pin on the computer because Linrad does not have information about the precise timing inside the soundcard device driver. The dynamic range of the D/A converter is very good however, so one can use a detector to find out when the signal starts to rise and apply a switch that abruptly switches on power amplifiers when the signal is around 100 dB below full power. The associated keying click will then be 100 dB below a "normal" keying click and quite harmless.

Linrad reads pin 13 on the parallel port for a Morse hand key. Since I do not know how to write device drivers that could use an interrupt, the port is polled from the RX soundcard A/D read routine at whatever interrupt rate Linrad uses. When the Tx is enabled the interrupt rate should be in the range 200 to 400Hz corresponding to a time jitter in the order 2.5 to 5 ms. For computers having problems with too much CPU load there is a setup parameter that can be used to set a lower maximum for the interrupt rate with lower CPU load, and larger buffers as a consequence. For higher Morse rates - to the extent that they are not generated inside Linrad, a tone to the microphone input can be used. Tone keying is not associated with any time jitter.

Linrad will use pin 14 on the parallel port as a control pin for transmit/receive switching. This pin will have to be in transmit mode well in advance and long after Linrad actually transmits something. This pin can be used when the hardware does not have a detector that senses when Linrad is actually transmitting.


lir02-37.tbz (483378 bytes) Tar archive packed with bzip2 Aug 28 2007. wlr2-37.zip (302171 bytes) Zip file with Linrad.exe and message files. Linrad-02.37 has bug corrections on the network routines in receive mode. At "Linrad Home Page" the latest (stable) version is still 02-35. 02-37 has the transmit functions of 02-36a plus incomplete code for transmitting CW.

The keying waveform.

As shown by Kevin Schmidt Spectral Analysis of a CW keying pulse which you can find at the W9CF links page the optimum keying waveform is the error function erf(x). In case this link has become outdated you can download the article in pdf format from here with the permission from the author: click.pdf (162770 bytes) The error function is an integral over the gaussian function and it is available among the math functions in the C language.

For a discussion about fast keying in Linrad, click here: Time domain and frequency domain performance of the Linrad fast (tone) keying.


lir02-38.tbz (484257 bytes) Tar archive packed with bzip2 Sept 05 2007. wlr2-38.zip (304571 bytes) Zip file with Linrad.exe and message files. Besides the CW keying Linrad-02.38 has a couple of bug corrections that may affect the receive functions. The I/Q calibration used one undefined data point, something that caused occasional errors. There are also several corrections in the display routines.

Sequencing for fast keying.

It is very important that the transmitter will NEVER produce an output power that can be harmful to the receiver or the Rx/Tx switching device when the device is in the receive position or on its way changing state. In Linrad the Rx/Tx control signal for fast switching is a pilote tone at the Nyquist frequency on the I/Q output from the soundcard. This pilot tone is detected in the TX2500 For details, look here: The pilot tone in the Linrad Tx

Since the pilot tone is generated by a computer it could become incorrect in case some other software suddenly overloads the CPU. (Or if there are bugs in the software, transients on the supply voltage, ........) An SDR transceiver that is based on PC computers therefore needs a sequencer that guarantees that power amplifiers are in the off state whenver the Rx/Tx switch is set to Rx and several hundred microseconds before and after the the Rx/Tx switch is operated. This has to be guaranteed ALWAYS under all (sensible) error conditions. This link shows the solution I have used myself. Tx control in SDR systems.


lir02-48.tbz (506308 bytes) Tar archive packed with bzip2 June 26 2008. The same files are contained here lir02-48.zip (657024 bytes) This package will generate executables with the commands configure and make under Linux as well as under Microsoft Windows.

This file: wlr2-48.zip (315571 bytes) contains Linrad.exe for Windows 98, 2000, ME and XP as well as the two message files needed at run time.

The soundcard setup for Linux is rewritten in 02.48. It can use legacy sound, Opensound OSS, alsa-oss or native ALSA with soundcards on both the transmit and the receive side. There are also various bug corrections.


Transceiver timing.

The transmit time delay from key-down to full output power plus the receive time delay from antenna input to loudspeaker output should not be larger than about 50 ms. Then one can listen th the receiver output while keying and hear what happens while the Morse key is up. With longer delays it becomes very hard to operate the key properly. Linrad can meet this requirement, but only with soundcards that allow small buffers. Performance depends on the operating system and the drive routines. This link transceiver timing gives timing information for some different systems.


lir02-49.tbz (511911 bytes) Tar archive packed with bzip2 July 29 2008. The same files are contained here lir02-49.zip (661853 bytes) This package will generate executables with the commands configure and make under Linux as well as under Microsoft Windows.

This file: wlr2-49.zip (316949 bytes) contains Linrad.exe for Windows 98, 2000, ME and XP as well as the two message files needed at run time.


lir02-50.tbz (513819 bytes) Tar archive packed with bzip2 Aug 22 2008. The same files are contained here lir02-50.zip (664105 bytes) This package will generate executables with the commands configure and make under Linux as well as under Microsoft Windows.

This file: wlr2-50.zip (318335 bytes) contains Linrad.exe for Windows 98, 2000, ME and XP as well as the two message files needed at run time.

This new version has several changes on the transmit side. I actually use Linrad on 144 MHz as a transceiver and as a radar although the user interface is still a bit inconvenient and the radar is without averaging. There are two new features on the receive side. Two buttons to change the relation between the high resolution graph scale and the colour scale in the main waterfall. The title bar under X11 now shows in what RX mode Linrad currently is running. As usual there are also some bug corrections.


The first generation of the Linrad speech processor which was introduced with Linrad-02.36 can now be used as a pre-processor for an ordinary SSB transmitter.


lir02-51.tbz (519513 bytes) Tar archive packed with bzip2 Aug 22 2008. The same files are contained here lir02-51.zip (671164 bytes) This package will generate executables with the commands configure and make under Linux as well as under Microsoft Windows.

This file: wlr2-51.zip (321983 bytes) contains Linrad.exe for Windows 98, 2000, ME and XP as well as the two message files needed at run time.


lir02-52.tbz (522417 bytes) Tar archive packed with bzip2 Oct 05 2008. The same files are contained here lir02-52.zip (672811 bytes) This package will generate executables with the commands configure and make under Linux as well as under Microsoft Windows.

This file: wlr2-52.zip (323111 bytes) contains Linrad.exe for Windows 98, 2000, ME and XP as well as the two message files needed at run time.

Linrad-02.52 has several corrections that affect the soundcard setup. The first and the second FFT are placed in separate threads so Linrad-02.52 will use multicore processors more efficiently than earlier versions. This might be valuable for e.g. the Perseus HF receiver at 1 MHz sampling rate. There are also adjustments that make the thread switching more efficient when processing recorded files. The multi-operator function, more computers share the same digital input over the network, has had a bug since the network was re-introduced in linrad-02.xx. This bug has made the transfer of calibration functions from the master to the slaves incorrect in some cases. As a consequence, slaves using input from the network in one of the raw data formats has been unreliable in case the calibration function was stored in the frequency domain.

The radar mode is partly operational in Linrad-02.52. (For recorded files only and without any noise blanker.) This link Linrad in RADAR mode. Perseids 2008 demonstrates the properties one should expect from a station that uses the Linrad control signals described above to control the TR switching of an amateur station.




To SM 5 BSZ Main Page