NR0V on AM Transmission

Audio Chain

The basics of our TX pipeline when operating in AM mode.

  • First comes the Equalizer. This is NOT your typical graphic equalizer implemented with a bank of narrow filters of which the outputs are summed. In this case, this is a single, linear-phase, filter designed, on-the-fly, with a frequency response tailored to match the graphical pattern you choose. In other words, the transitions between frequencies are as shown on the graph. Based upon various reports, this approach seems to contribute to improved audio quality. Note that for this to work optimally, you must use reasonable TX buffer sizes; for example, at least 4096 at a sample rate of 192K.
  • Next, the Leveler. The Leveler, if enabled, provides a fixed gain (that you specify) AND it limits the signal to ~0.4dB. (Why 0.4dB is another story.) The limiting does NOT involve clipping … gain reduction and increase is done along exponential curves. In the process, no material out-of-band frequency components are created. I.e., this is a "spectrum-friendly" process.
  • Next, the Bandpass Filter. This is a linear phase filter with an extremely flat passband between the transition bands which are centered, for example, on -5Khz and +5Khz, as you specify. So, 0Hz, and nearby frequencies are not attenuated by this filter. With Digital input (like VAC) you should be able to see this. As has been discussed, there is some low frequency roll-off with the analog inputs.
  • Next, optionally, the "Compressor" / "RF Speech Clipper". This algorithm has been termed a "baseband RF Speech Clipper". It operates at baseband (0 Hz IF), at baseband it does no actual "clipping". However, the result is the equivalent of an RF Speech Clipper. Its output is at a maximum of 0dB.
  • IF THE COMPRESSOR IS ON, next is another bandpass filter. This filter is identical to the first bandpass and is necessary as the Compressor is non-linear and produces out-of-band frequency components.
  • Next, optionally, the CESSB Overshoot Control. This is the second part (after the RF Speech Clipper) of the algorithm proposed by Dave Hershberger, W9GR, in the Nov-Dec 2014 QEX.
  • Next, IF CESSB OVERSHOOT CONTROL IN ON, is a third bandpass filter. It is the same as the previous filters
  • Next comes the ALC. This limits the signal to 0dB, or 1.0. It does this in the same "spectrum-friendly" way as described for the Leveler above.
  • Finally, comes the AM modulator. It's really pretty simple, all we need to do is add a DC term representing the carrier. Referring to the setting of the Carrier-Level control as CL, the modulator is:

Signal = CL/200 + ( 1 - CL/200)*ALC_output;
So, if the Carrier level is set to 100, that's:
Signal = 0.5 + 0.5*ALC_output;
Note that the maximum signal level is 1.0, or 0dB. This is required so as not to overdrive the DAC in the transmitter.

Phase reversal of the carrier (as opposed to carrier pinch-off) can happen. IF the carrier level is set to less than 100 (presumably to allow greater than 100% modulation on POSITIVE peaks) and IF we then get a negative peak that goes farther negative than the carrier setting, from looking at the modulation equation, you'll see that the value of 'Signal' goes negative … this just means that the phase of the carrier is reversed during that region. One way to think of this is that the signal contains a DSB component at that time.

AM Modulation and Pure Signal

First of all, let me describe the way the modulation process works. Modulation is done at baseband which could also be viewed as audio frequencies or a 0 Hz IF frequency. AM modulation is quite simple, one just takes the audio and adds the carrier. Since we're at baseband, the carrier is a "DC" component or, mathematically, a constant value. So, with the audio waveform ranging from -1.0 to +1.0 (which is the case), 100% modulation will be given by the equation:

output = 0.5 + 0.5 * audio_input

As you can see from this equation, when the audio_input is at +1.0, the output will be 1.0 and when the audio is at -1.0, the output will be 0.0. This corresponds to 100% modulation —- the output ranges from 0.0 to 1.0. Consider this as an equation representing voltage or current … you'll square things to get power. For example, when the audio_input is 0.0, like the MIC is OFF, the output will be 0.5 in terms of voltage (half the maximum) or 0.5 x 0.5 = 0.25 of power, 1/4 of maximum. We know that for AM, for 100% modulation, the peak power is 4 times the carrier power; so, all is well with these calculations.

Now, in the actual modulator, the equation used is:

output = carrier + (1.0 - carrier) * audio_input where "carrier" is determined by your_carrier_level_setting as follows:

carrier = 0.5 * sqrt (0.01 * your_carrier_level_setting) where sqrt denotes the square root operation.

So, if you set your_carrier_level_setting at 100, "carrier" is 0.5 and, assuming your audio is at full volume, you have 100% modulation as described above for carrier = 0.5.

If you set your_carrier_level_setting at 25, carrier = 0.25. This means that the modulation equation is:

output = 0.25 + 0.75 * audio

IF, because of audio processing, or because of your natural voice and chosen microphone polarity, you have positive audio peaks higher than negative, you have lots of room for the positive modulation. However, if your audio is symmetrical, on your negative audio peaks, "output" will go below zero. In a DSP architecture such as this, that does not result in the same kind of "pinch-off" you might see in an analog system; it results in a double-sideband component in your signal. If you're being demodulated by a basic AM demodulator, this may be undesirable.

I use the example of carrier setting at 25 because, I believe, that the Flex PowerSDR used a setting of 25 to do the same thing for which we use a setting of 100. So, if you're coming from the Flex world, watch out for this one!

The above description tells you what comes out of the software DSP. However, we must now consider the analog amplifier chain. The analog amplifier chain is typically NOT perfectly linear. This means that the gain of the amplifiers is NOT the same at all output levels. This can change the ratio of peak power to carrier power! So, even if you have your_carrier_level_setting at 100, as described above, when you measure with a wattmeter, you probably won't see your carrier level at exactly 1/4 of your peak power level. Also, amplifier gain characteristics tend to vary quite a bit by band. So, I would expect you might see different ratios of peak to carrier power on different bands.

PureSignal can fix this as it linearizes the amplifier characteristic. Yes, PureSignal is designed to calibrate and work with AM, and it does AS LONG AS the digital signal can traverse the entire range from 0.0 to 1.0. This condition is satisfied as long as your audio traverses the full range from -1.0 to +1.0 AND your_carrier_level_setting is <= 100. To be sure your audio is traversing the full range, the ALC meter should fairly frequently be hitting 0dB … which I strongly recommend. (NOTE: IF you came from the Flex community, the behavior of ALC is VERY different here … the level will NOT exceed 0dB and the ALC action at 0dB is very friendly.) If you're having trouble getting PureSignal to AutoCalibrate, it's probably because of the reasons described above.

Getting "poor" PureSignal calibrations is probably outside the scope of this message on AM Transmission. However, this can be caused by either a problem in capturing the feedback or an amplifier problem, e.g., severe memory effects caused by things like power supply sag. Obviously things like parasitics, etc., could also cause problems.

January 2017 Update


  • Setting the PowerSDR mRX carrier level at less than 100 creates "space" for greater than 100% modulation on positive peaks. However, if that's desired, it's still left to the operator to create that asymmetrical audio waveform. Voice waveforms typically have a certain amount of asymmetry … however, your voices will vary. I'm told that, in the broadcast industry, there are special processing devices that will both enhance asymmetry and insure the correct polarity. These special techniques have not currently been implemented in wdsp.
  • If you reduce carrier and have negative peaks that go below the baseline, you will not get the "pinch-off" that is typical of plate-modulated AM transmitters. Instead, the signal will reverse polarity. I believe this is a much better result.


In addition to both envelope and synchronous AM demodulators, there have been a couple special features implemented for receive. In PowerSDR mRX, see the Setup=>DSP/AM-SAM tab.

  • Fade Leveler: Often rapid carrier QSB creates problems in AM reception. The Fade Leveler strips out a fading carrier and replaces it with a more stable carrier.
  • Sideband Selection: This can be especially useful if, for example, there's an interfering SSB station on one side or the other of the AM QSO. It allows you to listen to only one sideband of the signals rather than both. Because a roundtable of AM stations using vintage equipment may have transmissions on frequencies separated by as much as a couple Khz or so, implementing this with a filter technique is not optimal. You can still trim the bandpass filter if desired; however, with stations on different frequencies, this can be problematic. Therefore, the Sideband Selection on the AM/SAM tab is implemented by phasing.

Here's an excellent reference that explains this along with other related things:

While excellent, this article is a few years old. My components are all written in C rather than being the analog devices described in the article.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License