Testing AGC in receivers.
(Dec 17 2011)
Tested receivers/SDR software: Ideal - Linrad - Winrad - WRplus - SpectraVue - HDSDR - SDR-radio - Rocky - PowerSDR - G31DDC - perseus.exe - SDRMAXIV - SDR-14 - Softrock - AFEDRI SDR - TS-520 - FT-1000 - FT-2000 - FTDX-5000 - K3 - R4C - IC-706MKIIG - IC-7000 - FT-221R - IC-202

What is the problem?

Modern receivers that use DSP for the final filtering as well as software defined radios are not always designed in a way that provides an AGC that works well in the presence of interference pulses. This link: AGC in receivers. Theory and examples. may be helpful to understand the nature of the problem. The test files on this page provide a practical demonstration of how different AGC systems work under difficult circumstances.

In SSB mode we want the AGC to turn down the gain for strong signals to provide a non-saturated loudspeaker output. A time constant is desireable, we do not want the gain to be turned up immediately because then noise between syllables could become equally strong as the voice signal.

On modern receivers an AGC time constant is often useless because strong pulses would cause a large AGC voltage that makes the desired signal inaudible. One would then have to use a very fast time constant or disable the AGC to be able to hear weak signals. Strong signals would then not sound very nice.

Comparing AGC in different receivers.

Ideally we want to connect the test objects to the same antenna and then compare the loudspeaker output. For SDRs (software defined radios) we can use wideband recordings and feed the same recording to different SDR software.

On this page some popular SDR software that can process standard .wav files are tested. The software for direct sampling receivers can usually not process standard .wav files with sampling rates of rates 48, 96 or 192 kHz. They require other rates such as 125, 250, or 500 kHz.

By running the test recording to a SDR transmitter it is possible to generate an RF signal containing the test signal. The RF signal can be received with SDR hardware that sample at other frequencies than the 96 kHz used in the recording. This way the recording can be resampled and SDR software can verify that the signal is not much affected. That means that the RF signal can be used to subject any receiver, analog as well as SDR to the test recording.

For each tested receiver/SDR software I have selected what seemed to me to be the best settings in the particular case represented by the test file. Differences are huge, it is obvious that some software have AGC algorithms that are not suitable for the RF environmment represented by the recording. It is possible that I failed to select the optimum processing parameters and it is very probable that later versionds of the testeed software will behave better. I will be happy to replace the loudspeaker output files presented below by better files provided that someone would supply such files with the appropriate information about software versions and parameter settings.

This page is made available with a hope that all SDR software will behave well in the near future. Do not use the results below to decide what SDR hardware to buy. There is no reason to believe that any SDR manufacturer will supply software that do not perform well with the test file on this page in the near future in case the results are not so convincing in thre tests below.

The recording.

The test file was recorded with Linrad at 96 kHz using a Perseus SDR on 7 MHz with an attenuator inserted between the antenna and the Perseus hardware. A strong signal was injected on the same frequency as a weak signal by use of a IC706MKIIG. The microphone was held close to a power amplifier having a noisy fan to provide background noise that we would not want to hear in the loudspeaker. The recording, a .raw file, was then run through Linrad with the option INTERNAL_GENERATOR_AGCTEST set to TRUE (in options.h) which causes Linrad to add a couple of strong carriers and some impulse noise. The resulting raw data is saved as a .raw file and subsequently converted to a .wav file. The strong carriers make it impossible to use simple wideband noise blankers and the keyed strong signals add really bad keying clicks.

This is the test file recorded at 96 kHz: agctest-96.zip (6803849 bytes) It unpacks to agctest-96.wav (10414124 bytes).

By playing the test file to the WSE TX2500 an RF signal can be generated at 2.46 MHz. By mixing it in a schottky mixer using a standard signal generator the test signal can be moved to any amateur band. The signal was placed on 14.100 MHz and recorded at 125 kHz with perseus.exe under Windows. The resampled file can be downloaded here: agctest-125.zip (12145150 bytes) It unpacks to agctest-125.wav (13547606 bytes).

The RF signal can be moved to any frequency and used for testing analog receivers. The presence of four strong carriers within plus/minus 10 kHz makes the test signal a good test for reciprocal mixing as well as front end linearity (IP3.) Only very good receivers pass the test presented on this page. The audio files presented below speak for themselves.

The test recording contains these signals: Signal Frequency Peak level kHz (dB) Strong SSB 0 to 2.4 +24 Weak SSB 0 to 2.4 -64 Carrier -1.7 0 Carrier -8 0 Keyed 6.2 -5 Keyed -4.8 -5 Pulses 0 to 2.4 -5 Clicks 0 to 2.4 -20

The levels are with respect to the steady carriers and the frequencies are offsets from the SSB carrier.

Ideal AGC response.

There are two conflicting requirements on an ideal AGC. It should turn down the receiver gain to an appropriate level when the strong signal is present. The gain should be kept constant for a long enough time to avoid the background noise to be heard between words while the strong signal is present.

After the strong signal has disappeared, the gain should be set high enough to produce a good loudspeaker output from the weak signal and the gain should then not be affected by the interference pulses.

None of the tested receivers/SDR software is perfect. The focus on this page is whether the weak signal can be heard or not. A good AGC shoulb make the weak signal well audible, but it should also produce a loudspeaker output for the strong signal that sounds like this: noagc.mp3 (This file is the output from Linrad with AGC off and an appropriate RF gain for the strong signal.


The Linrad AGC is governed by 4 parameters that can be set in the baseband graph.

  • 1. RF gain (The red vertical bar.).
  • 2. Attack time constant (The box with A).
  • 3. Release time constant. (The box with R).
  • 4. Hold time. (The box with H).

The processing screen with normal settings in SSB mode is shown in figure 1. The RF gain is turned down a little for the AGC to not bring the white noise floor up to full loudspeaker output in the absence of any signal.

Figure 1 The agctest-96.wav file played once in Linrad.

The loudspeaker output obtained with the settings of figure 1 (A5 R5 H5) is available here: agctest96-linrad-555.mp3 The fairly long attack time makes the background noise very strong for something like 0.5 seconds while the AGC is in saturated mode. Full attenuation of the background noise takes several seconds. There is delay before the weak signal becomes audible. The loudspeaker output from Linrad when playing the resampled test file that was obtained by recording the RF signal from the WSE TX2500 does not sound very different: agctest125-linrad-555.mp3 This shows clearly that the tests on analog receivers are valid.

The long attack time makes the AGC insensitive to interference pulses. As a demo of its significance, listen to this file where the attack time is zero while the release and hold times are normal. agctest96-linrad-055.mp3 The weak station is totally inaudible.

By setting smaller time constants for release and hold one can make the AGC voltage decrease fast enough to make the weak signal audible reasonably soon after each pulse while keeping the attack time zero. This recording uses half the time constants of the previous one: agctest96-linrad-044.mp3 The weak station is partly audible, but the fan noise is is coming up between syllables.

With a very fast AGC, time constant zero for attack,release and hold there is no loss of the weak signal after each pulse, but the strong signal does not sound particularly nice. Listen here:agctest96-linrad-000.mp3

The AGC can also be disabled. In that case Linrad will limit the amplitude for the complex baseband signal so it will not saturate the output. The process is equivalent to a RF limiter and it does not distort the audio as much as a simple limiter would do. (There is an option to select amplitude limiting on the real-valued signal because some CW operators prefer to listen to the distortion that varies rapidly with amplitude.) Here is the loudspeaker output without AGC: agctest96-linrad-off.mp3

It is pretty obvious from an analysis of the mp3 files above that better AGC is possible. The Linrad AGC is fairly simple and could be made more intelligent. Recordings that demonstrate shortcomings of the Linrad AGC are welcome. I will not spend time solving problems that do not occur in real life.


Playing the agctest-96.wav in Winrad 1.33 b03c works best with fast AGC. Turning AGC off is impossible, that causes the computer to hang. Here is the audio output: agctest96winrad.mp3

The weak signal is inaudible.


Playing the agctest-96.wav in WRplus 1.05 works best with fast AGC. One can click AGC OFF, but the result in not what one would expect. Here is the audio output: agctest96wrplus.mp3 The strong signal sounds very nice, but the weak signal can not be copied.


The best performance with SpectraVue 3.21 seems to be with an AGC time constant of about 500 ms and with Hang OFF. Turning on Hang attenuates the weak signal after the hang time in a way that I do not understand. Here is the loudspeaker output. agctest96spectravue.mp3 It speaks for itself.


This Winrad clone in version 1.00 works with AGC OFF and gives then the following loudspeaker output: agctest96hdsdr.mp3 It does not really sound like the AGC is off.

HDSDR version 2.1 does not work with AGC OFF. With fast AGC it gives this loudspeaker output: agctest96hdsdr2.mp3

The versions are somewhat different, but none of them provides a good copy of the weak signal.


SDR-radio vers 1.3b647 does not accept the test file. By running the program sim2spectravue.exe from a command window with both files present like this:

sim2spectravue agctest-96.wav a new file spectravue-agctest-96.wav will be created and that file can be processed by SDR-radio.

The best performance is obtained with AGC off: agctest96sdrradio.mp3 The weak station is well audible, but the strong station does not sound very nice.


Rocky 3.7 works best with AGC ON. Here is the loudspeaker output: agctest96rocky.mp3 Not much can be copied from the weak station.


There are AGC parameters that can be set in different ways, but it is not obvious to me what they do. Here is a typical loudspeaker output: agctest96powersdr.mp3 The weak signal is well audible.

PowerSDR vers 2.1.5 does not accept the original test file. By running the program sim2powersdr.exe from a command window logged to the directory of the test file like this: sim2powersdr agctest-96.wav a new file powersdr-agctest-96.wav will be created and that file can be processed by PowerSDR.


This is the software for the Excalibur from Winradio. The tested version is 1.51. There are several AGC parameters that can be set by the user. The loudspeaker output here: agctest125-g31ddc.mp3 was obtained with the following settings:

AGC: User 1
Attac: 0.400 s
Decay: 0.001 s
Ref.level: -17 dB
Max.gain: 150 dB

To reproduce the result, download sim2excalibur.exe and place it in the directory where you have the agctest125.wav file. Then execute this command: sim2excalibur agctest125.wav The file excalibur-agctest125.ddc will be created and can be used as input for the G31DDC software.


Perseus.exe plays the 125 kHz test directly. Not surprising, the file was recorded with perseus.exe. The loudspeaker output with fast AGC and SpkRej is like this: agctest125-perseus.mp3


SDRMAXIV vers (Sept 13 2011) does not accept the original test file. By running the program sim2qs1r.exe from a command window logged to the directory of the test file like this: sim2powersdr agctest-125.wav a new file qs1r-agctest-125.wav will be created and that file can be processed by SDRMAXIV. Here is the loudspeaker output: agctest125-qs1r.mp3

These parameters were used:
AGC: Medium
AGC Threshold: -85 dB
AGC Slope: 1 dB
AGC Hang: Off


The RF signal that can be generated by the WSE transmitter is not quite adequate for testing modern high performance SDR hardware. When sending a signal to the SDR-14 at a level for which the overload LED flashes occasionally the loudspeaker output from Linrad becomes like this: agctest-sdr14-max.mp3 By inserting a 15 dB attenuator one can eliminate the overload (by a big margin.) The weak signal sinks into the noise because it is 15 dB weaker but the intermodulation products are not attenuated. The loudspeaker output is not very good: agctest-sdr14-15db.mp3 For best performance one should operate A/D converter at the highest possible signal level.


The Softrock was tested together with SB Live! External USB under Windows 7 for which proper drivers exist for this soundcard. Here is the loudspeaker output from Linrad. agctest-softrock.mp3 There is some reciprocal mixing and a little intermodulation but this little low cost unit performs quite well.


The AFEDRI SDR has an ExtIO module that allows changing the gain at two points. The variable gain amplifier is noisy at all gain levels so one should set the gain of the second amplifier, the one marked FE gain, to 1. Best performance with the test signal was obtained with the RF gain (variable gain amplifier) set to +6 dB. Here is the loudspeaker output from Linrad. agctest-afedri-org.mp3 The weak signal can be copied, but S/N is a bit degraded. More gain does not help since intermodulation then rises rapidly.

By removing the variable gain amplifier one can improve performance. That would degrade the sensitivity, but a low noise amplifier could restore that without degrading the dynamic range. When the signal is fed directly into the A/D chip through a transformer, the loudspeaker output is like this: agctest-afedri-mod.mp3 The FE gain is here set to 2 (=6dB) and a 6 dB amplifier is added in front of the AFEDRI SDR. Performance is much better. The weak signal can be well copied even if a 10 dB attenuator is placed in front of the 6dB preamplifier. It is also possible to increase the FE gain to 4 without a significant worsening of the intermodulation. That would place the signal at the same level as in the test with the original design, but the noise floor is much lower. The weak signal can be marginally copied with a 15 dB attenuator in front of the 6 dB preamplifier but as with the SDR-14 the relative level of the intermodulation is much higher.


The dynamic range of this old analog receiver is not quite adequate. The on-off keyed tones cause false responses. The strong signal sounds nice and shows S9 on the meter when slow AGC is selected. The weak signal can then not be heard. By selecting fast agc one can get some chance to copy fractions of the we ak signal. This is the loudspeaker output from a TS520 with fast AGC: agctest-ts520.mp3 The fast AGC has no problems with the pulse interferences, but the limited dynamic range of the front end causes a significant degradation of copyability. The intermodulation would almost disappear if 10 dB attenuation is inserted, but the weak signal would then loose too much S/N to be well copied.


The dynamic range of this receiver is inadequate at close spacings. The false signals, intermodulation products are rather strong. Worse is that the weak station is totally drowned in the reciprocal mixing noise from the close spaced carriers. Nothing at all can be copied from the weak signal even with AGC off. This is the loudspeaker output from a FT1000 with fast AGC and front end normal: agctest-ft1000.mp3 RF attenuation reduces the false signals but does not help at all to make it possible to copy even fragments of the weak signal.


The shortest AGC time constant that one can set on this transceiver is 20 ms with hold=0. The strong signal will of course be compressed for the fan noise to become strong, but readability is reasonable for the weak as well as for the strong signal. Listen here: agctest-ft2000-20ms.mp3 The signal to noise ratio is significantly degraded, maybe due to reciprocal mixing. The recording is with Preamp 1. The S/N ratio is not better with preamp 2, but IM3 products are worse for a worse performance on the weak signal.

When the AGC is set to auto, the strong signal sounds nice but the weak signal can not be copied at all: agctest-ft2000-auto.mp3 This is also with preamp 1.


On this radio one can set a time constant of 20 ms for the AGC decay with hold=0. Preamp2 does not cause intermodulation and improves S/N a little. With 3 kHz roofing filter and 2.4 kHz bandwidth the test recording sounds like this: agctest-ftdx5000-20ms.mp3 The readability for the weak signal is excellent but the strong signal is compressed. Tha background noise is strong.

With the AGC in mode auto the strong signal sounds better, but the weak signal can not be copied: agctest-ftdx5000-auto.mp3


This radio has a complex AGC with many parameters. For the test on this page the default parameters work well and experimenting with other parameter values does not provide significantly better results. Here is the loudspeaker output with fast AGC: agctest-k3-fast.mp3

The pulse feature of the AGC makes it possible to use slow AGC on the K3. The strong signal does not sound good however and that is because there is one more AGC system that protects the DSP: agctest-k3-slow.mp3

The protective AGC is fast and causes compression of the strong signal. The strong signal sounds very nice with a 30 dB attenuator because then the protective AGC would not be active. That amount of attenuation would of course make the weak signal unaudible.

A standard measurement for reciprocal mixing dynamic range produces the result shown in figure 2.

Figure 1 Reciprocal mixing dynamic range for the Elecraft K3.

Presumably the loss of sensitivity at close range, 2 and 3 kHz is due to the IF AGC that protects tha A/D converter form overload. It should be fairly easy to modify the code to make the total gain through the receiver have the time constant specified by the AGC option. That should make the strong signal sound very nice.


This old receiver does not perform particularly well. Here is the loudspeaker output. agctest-r4c.mp3


This receiver is equipped only with the standard filter. Selectivity is inadequate. Nothing can be heard from the weak signal. That is probably due to reciprocal mixing. Here is the loudspeaker output with preamp off and fast AGC: agctest-ic706mkiig.mp3


Best performance for the test on this page is with the shortest possible AGC time constant 100ms and with preamp ON. Here is the loudspeaker output: agctest-ic7000.mp3 The strong signal is not quite OK, it seems that something is overloadeed. Only fragments of the weak signal can be copied.


This unit has the original front end but the VCO is modified for low phase noise. Intermodulation is the dominating problem. Fragments of the weak signal are audible but the AGC action on the strong intermodulation makes the gain very low so it is not easy to hear the weak signal: agctest-ft221r.mp3 By bringing up the audio gain for about 15 dB clipping on the intermodulation pulses one can better judge that the limitation due to reciprocal mixing are not severe. agctest-ft221r-sat.mp3 With a Mutek front end this radio would probably produce a loudspeaker output where the weak signal would be well copyable. The AGC seems to not react on the strong interference pulses. (Look with a sound file editor.)


This little radio is surprisingly good. Here is the loudspeaker output: agctest-ic202.mp3

To SM 5 BSZ Main Page