Better SSB Demodulation

Simon Brown • October 9, 2026

Can We Build a Better SSB Demodulator?

Improving weak-signal SSB reception

Over the years, SDR Console has benefited from improvements in digital signal processing, noise reduction, filtering, and interference suppression. Recent work on wideband noise blanking has demonstrated that there are still opportunities to improve established SDR techniques.


Soon I'll start another interesting project: investigating whether we can develop a better SSB demodulator. The objective is simple: can I make weak SSB signals easier to understand, particularly when they are close to the noise floor?


This is an experimental project. There are no guarantees of improvement, but several techniques are worth investigating.


How SSB Demodulation Works Today

Most software-defined radio receivers use a relatively straightforward approach to SSB demodulation.

Once the incoming signal has been filtered and shifted to the correct frequency, the receiver extracts the real component of the complex IQ samples.


In simplified C++:

float audio = IQ.real();

That's essentially it!


Of course, a complete receiver includes frequency conversion, filtering, AGC, and other processing, but the actual coherent SSB demodulation is remarkably simple. Importantly, this method is mathematically correct. Under ideal conditions, there is no alternative demodulation formula that will magically recover additional information.


However, real-world signals are rarely ideal. They suffer from noise, fading, frequency errors, interference, and propagation-related distortion. The question is whether more sophisticated processing of the complex IQ signal, before converting it to audio, can improve the recovered speech.


1. Automatic Frequency Correction

One possibility is to improve the accuracy of SSB tuning. Unlike AM or FM, suppressed-carrier SSB has no continuously transmitted carrier that the receiver can simply lock onto. Even a small frequency error changes the pitch of the recovered speech.


For example, a station may be tuned 20 or 30 Hz away from its ideal frequency. The resulting audio is perfectly intelligible, but it is not quite correct. We could investigate an adaptive frequency estimator that analyses the received signal and automatically corrects small tuning errors.


The challenge is distinguishing genuine frequency errors from natural variations in human speech.


Potential benefit: More accurate tuning and improved speech reproduction without manual adjustment.


2. Adaptive Phase Correction

Another interesting area is phase distortion. Radio signals can experience phase changes due to propagation, fading, and receiver imperfections. A conventional SSB demodulator simply takes the real component of the received complex signal.


But what if we could identify and compensate for unwanted phase variations before demodulation?

A simplified mathematical representation is:


z(t)=s(t)e^{j\phi(t)}+n(t)


Here, the received signal consists of the wanted SSB signal, phase variations, and noise. If we can reliably estimate the unwanted phase variations, we may be able to compensate for them before producing audio.


There is an important complication: SSB does not normally provide an absolute carrier-phase reference, and a constant phase rotation is not necessarily a distortion.


Any correction algorithm must therefore avoid introducing errors of its own.


Potential benefit: Better audio under certain fading and phase-distortion conditions.


3. Complex-Domain Weak-Signal Processing

This is perhaps the most interesting part of the project. An SDR receiver processes complex IQ samples, containing both in-phase (I) and quadrature (Q) components. In a conventional SSB demodulator, the final audio is obtained from the real component. However, before this conversion, the complex signal contains relationships that may be useful for estimating the wanted transmission.


Could we exploit those relationships to distinguish weak speech from noise and interference?


Possible techniques include:

  • Complex-domain spectral estimation.
  • Adaptive interference suppression.
  • Statistical signal estimation.
  • Time-frequency analysis.
  • Processing that exploits the mathematical structure of SSB signals.


There is an important distinction here. The I and Q components are not two independent copies of the speech. In an ideal SSB signal, they are mathematically related through the Hilbert transform. We cannot simply combine them to obtain a free improvement in signal-to-noise ratio. Nevertheless, more sophisticated processing may exploit information about the signal, interference, or propagation channel that conventional demodulation does not explicitly use.


Potential benefit: Improved recovery of weak SSB signals, especially in difficult interference or fading conditions.


4. Speech-Aware Processing

Human speech has a great deal of structure. Voiced speech contains harmonics, while the resonances of the vocal tract produce formants that change relatively smoothly over time. These characteristics provide opportunities for distinguishing speech from noise.


I have already investigated speech-processing techniques in SDR Console, and one lesson is particularly important: aggressive processing can easily damage the wanted audio. Different speakers have different voices, pitches, and spectral characteristics. An algorithm that works well with one voice may distort another.


For this project, I would prefer to concentrate initially on recovering the actual received signal rather than generating speech that an algorithm predicts should be present. Speech-aware processing may become useful later, but it should not be the starting point.


5. Carrier Estimation and Tracking

Another possibility is to estimate the missing SSB carrier frequency from the received speech. Because the carrier is suppressed, this is not straightforward. However, the statistical properties of speech may provide clues that help determine the correct tuning frequency.


I could also investigate tracking certain propagation-related phase variations. The challenge is obtaining a reliable estimate without confusing normal speech characteristics with carrier or channel errors.


This is another area worth investigating experimentally.


Proposed Signal Processing Architecture

The experimental demodulator would operate directly on the complex IQ samples, before conversion to real audio.

The proposed processing chain is:

Not every stage will necessarily prove useful. Some may provide little improvement, while others may introduce unacceptable distortion.


The purpose of the project is to find out through controlled experiments.


Development Plan

I'll develop the new demodulator in C++17 and integrate it experimentally into SDR Console.


The initial development stages will be:


V1    Conventional coherent SSB demodulator for reference

V2    Adaptive residual frequency correction

V3    Adaptive phase and channel correction

V4    Complex-domain weak-signal estimation

V5    Combined adaptive demodulator


Each version will be compared against the conventional SSB demodulator using the same recorded IQ signals.

This is important. Any claimed improvement must be repeatable and not simply the result of different signal levels, filtering, or subjective listening conditions.


Where suitable reference recordings are available, I can also make objective measurements.


What Am I Trying to Improve?

There are two main objectives.


1. Better speech quality

Improve the audio from signals that are already reasonably strong but suffer from fading, frequency errors, or distortion.


2. Better weak-signal sensitivity

Recover more intelligible speech from extremely weak signals, particularly those close to the noise floor. The second objective is the one I find most interesting. If a signal is already strong and intelligible, improvements in audio quality are welcome, but they are not necessarily revolutionary.


The real challenge is improving the intelligibility of signals that are currently difficult to copy. For example, could a new algorithm make a weak station easier to understand without the unnatural artefacts sometimes introduced by aggressive noise reduction?


That would be a worthwhile achievement.


A Realistic Assessment

There are fundamental mathematical limits to what can be recovered from a noisy signal. A conventional coherent SSB demodulator is already an excellent starting point, and under ideal assumptions it is optimal for recovering the transmitted waveform. I should not expect an enormous improvement simply by replacing the familiar    IQ.real()   operation with something more complicated.


Any genuine improvement will need to come from better estimation of the received signal, correction of impairments, exploitation of additional information, or carefully designed processing that improves intelligibility. It is entirely possible that some experiments will produce no measurable improvement. That's part of research.


The important thing is to test each idea carefully and retain only those techniques that provide a genuine benefit.


Starting Soon

Soon I'll begin work on the first experimental SSB demodulator. I'll establish a reference implementation and then investigate the most promising signal-processing techniques, concentrating particularly on weak-signal reception.

As with recent noise-blanker development, I'll use actual SDR recordings, compare the results, and refine the algorithms based on what I hear and measure.


The ultimate objective is not simply to create a more complicated demodulator. It's to find out whether we can hear and understand weak SSB signals that are currently difficult to receive.


Whether we achieve a small improvement, a significant improvement, or discover that conventional SSB demodulation is already close to the practical limit, the results should be interesting.

I'll report our progress as the project develops.

By Simon Brown • October 9, 2026
Introduction During September and October 2026 new noise blankers have been implemented to improve what was a weak part of the SDR Console signal processing chain. Using the knowledge of ChatGPT, this exercise took only five days and the result is shown below. These noise blankers will be available sometime in October 2026. Impulse Noise A noise blanker should remove Impulsive interference such as electrical switching noise, electric-fence pulses, ignition interference and short static crashes The screenshot below shows the new wideband noise blanker in action. The top half of the main waterfall shows the noise created by an electric fence, The bottom half shows the noise removed by the new wideband noise blanker.
By Simon Brown • October 9, 2026
RadioClear AI – A New Approach to Speech Noise Reduction Improving Weak Signal Reception One of the biggest challenges when listening to weak radio signals is separating speech from background noise. As signals become weaker, the noise can overwhelm the speech, making conversations difficult or sometimes impossible to understand. Conventional noise reduction has been available in software-defined radios for many years. Most systems analyse the received audio, estimate which frequencies contain noise, and reduce their amplitude. This can work very well, but there is always a compromise. Too little suppression leaves distracting background noise, while too much can make speech sound metallic, watery or unnatural. Important speech information may disappear along with the noise. For some time, I have wanted to develop a better approach for SDR Console, particularly for weak SSB reception. The objective was not simply to produce quieter audio, but to improve intelligibility while preserving the natural characteristics of the speaker's voice. The result is RadioClear AI , a new noise-reduction system combining adaptive digital signal processing with a recurrent neural network and complex temporal filtering. Comparison With RNNoise RadioClear AI and RNNoise both use neural networks to improve speech intelligibility by reducing unwanted background noise, but they employ different approaches. RNNoise is a well-established, computationally efficient solution that combines traditional signal processing with recurrent neural networks to estimate frequency-dependent suppression gains. It performs well across a variety of speech applications and has the advantage of being lightweight and widely tested. RadioClear AI has been developed specifically with radio communications in mind, particularly weak SSB signals affected by receiver noise. It combines adaptive noise estimation and speech-aware spectral processing with a recurrent neural network that generates complex temporal filter coefficients. Unlike conventional gain-based suppression, this approach uses information from consecutive audio frames to adjust both the amplitude and phase of the enhanced signal. Both approaches have strengths, and their relative performance depends on the type of interference, signal conditions and training material. RNNoise benefits from its maturity, efficiency and general-purpose design, while RadioClear offers a more specialised processing architecture tailored to weak radio reception. In initial listening tests, RadioClear AI has produced encouraging results, with cleaner background noise and natural-sounding speech compared with RNNoise on the signals tested. However, these observations are subjective, and controlled comparisons across a wider range of recordings would be needed to establish a consistent performance advantage. Further improvements to RadioClear's training data are planned, particularly using cleaner speech recordings and a greater variety of speakers and receiver noise conditions. Combining Traditional DSP with Artificial Intelligence Rather than relying entirely on artificial intelligence, RadioClear AI uses two complementary processing stages. The first stage is based on conventional digital signal processing. It continuously estimates the background noise and analyses the incoming audio to identify frequencies likely to contain speech. It also examines harmonic relationships, which are particularly important for voiced speech. This information is used by an adaptive spectral suppressor to reduce background noise while protecting important speech components. The result is an initial noise-reduced signal that provides a stable foundation for the neural network. This arrangement has an important advantage. The neural network does not need to learn everything about noise estimation and suppression from scratch. Instead, it receives a partially cleaned signal together with detailed information about the speech and noise characteristics. The neural network can then concentrate on improving the result. Looking Beyond Individual Audio Frames One of the limitations of conventional spectral noise reduction is that it generally operates by adjusting the amplitude of individual frequency components. However, speech is not a collection of unrelated frequencies. It is a continuously evolving signal with strong relationships between consecutive moments in time. RadioClear AI takes advantage of this. The incoming audio is divided into overlapping frames, and each frame is converted into a frequency-domain representation using a Fast Fourier Transform (FFT). The neural network receives 400 features describing the signal across 40 frequency bands. These include information about signal power, estimated noise, signal-to-noise ratio, speech probability, harmonic content and the relationships between consecutive complex spectra. At the heart of the system are two Gated Recurrent Unit (GRU) layers. Unlike a simple feed-forward neural network, a GRU maintains information about previous frames, allowing the system to recognise how speech changes over time. This temporal information is particularly valuable when the speech is partially obscured by noise. Complex Temporal Filtering The most significant difference between RadioClear AI and a conventional neural noise reducer is the way the network processes the audio. Many neural noise-reduction systems generate a set of gains that are applied to individual frequency bins. Although effective, this approach primarily controls amplitude. RadioClear AI goes further by generating complex-valued filter coefficients . For each frequency bin, the system combines information from the current audio frame and the previous two frames. The neural network determines how these spectra should be combined to produce the enhanced signal. Because the coefficients are complex, the system can modify both amplitude and phase. It can also exploit the relationships between consecutive frames rather than treating each frame independently. This gives the network considerably more flexibility than a conventional spectral gain mask. The neural network produces coefficients for 40 frequency bands, which are interpolated across the 257 FFT frequency bins. A three-tap complex temporal filter then generates the enhanced spectrum, which is converted back into audio. The complete process operates continuously in real time. Training the Neural Network The neural network is trained offline using examples of speech mixed with receiver noise. During training, the system is provided with both the noisy signal and the corresponding clean speech. It learns to generate complex filter coefficients that make the processed spectrum resemble the clean reference as closely as possible. An important development decision was to train the network against the actual reconstructed complex spectrum , rather than simply asking it to reproduce a set of ideal filter coefficients. This means the training process directly rewards improvements in the enhanced signal. The current network contains approximately 568,000 parameters and was trained using speech mixed with real receiver noise at signal-to-noise ratios ranging from +15 dB to −10 dB. The training and evaluation process showed substantial reductions in complex spectral error compared with the initial deterministic noise-reduction stage. The improvements were particularly encouraging at the lowest signal-to-noise ratios, where additional noise reduction is most valuable. Of course, mathematical measurements are only part of the story. A lower spectral error does not automatically guarantee better-sounding speech, so listening tests remain essential. Real-Time Processing and Listening Results The neural network was originally developed and trained using Python and PyTorch. The complete inference engine was then implemented in C++ for integration into SDR Console. To ensure that the C++ implementation behaved correctly, its results were compared directly with the Python reference. This included the recurrent network, complex coefficient generation, frequency interpolation and final spectral filtering. The results agreed to floating-point precision, giving confidence that the real-time implementation reproduces the trained model accurately. Initial listening tests have been very encouraging. On weak SSB signals, RadioClear AI produces natural-sounding speech with substantial background-noise reduction. In my own listening comparisons, the results have been noticeably better than RNNoise, particularly in preserving speech quality while reducing unwanted noise. An additional aggressiveness control has also proved useful, allowing stronger suppression of residual noise where desired. As always, the best setting depends on the received signal. Maximum noise reduction is not necessarily the same as maximum intelligibility, so the listener retains control over the amount of processing applied. What Comes Next? Although the current results are very promising, development is far from finished. One area where I expect further improvements is the training material. The first model was trained using a relatively small amount of speech, and the supposedly clean reference recording contained a little background noise. This is not ideal. If noise is present in the clean training reference, the network can learn to preserve some of that noise because it is treated as part of the wanted signal. The next step will therefore be to create a much better training dataset using genuinely clean speech recordings, ideally from several different speakers, together with a wider variety of real receiver noise. I intend to retain the existing neural architecture initially so that improvements from better training data can be evaluated independently. There is also potential to extend the system to other receiving modes, including AM and music, while retaining the existing 8 kHz neural processing engine. Final Thoughts RadioClear AI represents a significant step forward in my work on speech noise reduction for SDR Console. The most interesting aspect is not simply that it uses artificial intelligence, but how conventional DSP, recurrent neural processing and complex temporal filtering work together . By combining an adaptive noise estimator, speech-aware spectral processing and a neural network capable of exploiting relationships between consecutive audio frames, the system can perform noise reduction that would be difficult to achieve using conventional spectral attenuation alone. The aim has always been straightforward: make weak radio signals easier and more pleasant to listen to, without destroying the speech we are trying to recover. The initial results suggest that this approach has considerable potential, and I look forward to seeing how much further it can be improved with better training recordings. RadioClear AI is still evolving, but it is already producing some of the best weak-signal speech noise reduction I have achieved in SDR Console.
By Simon Brown • October 9, 2026
The Future of SDR Software
By Simon Brown • September 14, 2026
History
By Simon Brown • September 14, 2026
SDR Television v1.1.6 September 14th, 2026. To avoid confusion with the test versions of 1.1.5, this kit is now 1.1.6. Receiver Improved Gardner timing recovery. Improved Sum-product decoding. Redesigned soft decoder. Redesigned RRC matched filter. Note: this kit should be able to gain a dB or so sensitivity when detecting the frame header. v1.1.6 will have even better frame detection, hence better weak signal decoding. LDPS Settings, important! Open this page, select Defaults . There is no need to adjust the Sum-product optons, these options are only for development and may be hidden in future kits. Transmit Provider changed from SDR Television to SDR TV, some receivers only display a maximum of 18 characters in the provider field. Downloads are at the bottom of this page.
By Simon Brown • September 14, 2026
Improving DVB-S2 PLHEADER Detection at Low SNR Reliable detection of the DVB-S2 Physical Layer Header (PLHEADER) is one of the first challenges faced by a DVB-S2 receiver. Before the receiver can decode the payload, it must determine where a physical-layer frame begins, establish carrier phase and frequency sufficiently accurately, and decode the signalling contained in the PLS code. This becomes particularly interesting at very low SNR. I have been comparing two approaches: A traditional differential SOF/PLS detector. A new coherent, maximum-likelihood-oriented PLHEADER detector designed to exploit substantially more of the information contained in the DVB-S2 header. Both methods are trying to answer essentially the same question: At what symbol does the DVB-S2 PLHEADER begin, and what carrier frequency and phase best explain the received 90-symbol header? The difference is how much of the available information they use to answer that question. The full PDF is here .
By Simon Brown • September 13, 2026
Project for 2027? Love it or hate it, FT-8 is here to stay. I use WSJT-X to monitor 2m and sometimes 70cms. As a software developer, it's always rewarding to use one's own software. So I just asked ChatGPT whether it (he, she, they) even knew about FT-8. The response was amazing. So, this could be the start of a project which is also used for EME and meteor scatter modes. Read on dear reader, read on.
By Simon Brown • August 27, 2026
August 27th, 2026 Default Audio Device When changing the default audio device selection in Windows, SDR Console was following the change but not reapplying the latest volume change. Example: I start playback, adjust the volume, then after a while enable my Bluetooth speaker an go outside. When the speaker is enabled SDR Console switches but didn't apply the change in volume. RDS processing AGC replaced with normalisation, Hilbert filter redesigned. Shouldn't make much difference. MIDI Startup I believe I have found the cause of the slow start of SDR Console. As part of the SDR Console startup I always call midiInGetNumDevs() to get the number of attached MIDI devices, even if the user hasn't enabled MIDI. At some stage in 2026 Microsoft introduced a bug where the first call to midiInGetNumDevs() after starting the computer results in blocking all asynchronous activity if there are no MIDI devices connected. If there are MIDI devices connected then it returns after ~100ms. I now only call midiInGetNumDevs() on startup if there are user definitions. Some programs are experiencing even worse behaviour. There should be a Windows update soon with a fix, but for now the kit below should resolve this problem in 99% of cases. Downloads Download beta kits here .
By Simon Brown • August 26, 2026
QO-100 Footprints