SDR Television v1.1.6

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.

SDR Television v1.1.4


User Interface

  • Rearranged ribbon bar, added Forward Error Correction (FEC) to the Home panel.

Receiver

Currently trying to improve LDPC decoding for low SNR. Part of this work involves reducing CPU load in the LDPC decoder. Planning to add advanced decoding in v1.1.5.

  • Changed the list of FEC / LDPC algorithms, removing min-sum and min-sum correction.
  • Optimised offset min-sum algorithm to reduce CPU load.
  • Optimised Bose-Chaudhuri-Hocquenghem (BCH) processing.
  • Added sum-product.
  • Corrected LLR soft scaling for QPSK.
  • Changed default RRC filter length to 12 symbols, previous value of 30 was too long.
  • Updated Feed-Forward AGC with a design from CoPilot.
  • Optimised Gardner TED RRC filter length, now 25 taps.
  • Increased the receive RRC filter rolloff factor by 25% to capture more energy with weak signals.
  • Reset LDPC after 1 second of inactivity.


FEC - LDPC

There are now two LDPC algorithms,

  • Offset min-sum, and
  • Sum-product.


Sum-product is more sensitive than offset min-sum but currently doesn't work at all for FEC rates lower than 1/2 (1/4, 1/3 and 2/5). When sum-product is selected and the rate is lower than 1/2 then offset min-sum is used. The default damping settings for sum-product are shown below.



The aim is to work on sum-product with the help of ChatGPT in 2027 to get the maximum possible sensitivity.


  • Downloads are at the bottom of this page.

SDR Television v1.1.3


User Interface

  • Fixed erroneous cursor flicker in Settings help text and Receive, Transmit panes.
  • Fixed error in the spectrum squelch logic.
  • Minor fix/improvement in QPSK LUT lookup for low values.

Receiver

  • Use highest possible quality decimation for symbol rates of 333ksps and lower.
  • Added optional Doppler correction for LEO/MEO satellites such as MARMOTsat (July 2026). This will most probably be tweaked when the DVB-S2 transmissions started.


  • Downloads are at the bottom of this page.

SDR Television v1.1.2


June 12th, 2026: Add option to disable audio, thus making more bits available for video, this is for use in DATV contests.


Note: 66 ksps sample rate is still experimental, will be improved.


  • Downloads are at the bottom of this page.



SDR Television v1.1.1


June 9th, 2026: Fixes a fatal bug in the Settings, Camera page.

SDR Television v1.1


May 18th, 2026: This is the official v1.1 release, code exactly the same as 1.0.16 which has survived testing for a few weeks. Lots of improvements since the last official kit. As with any software project, there's always room for improvements and new features, but for now here's a stable solution which works well with the QO-100 satellite.


  • Many thanks to Sigi and the DATV test team.

To Do

The items below may be completed for a future release.


  • Correct a possible logic error when a change of PCR is received; audio and video frames in the presentation queue are unnecessarily discarded.
  • Add 8PSK.
  • Update the manual, add a Quick Start chapter.
  • For noisy decoding, consider: 
  • Applying adaptive algorithms to estimate and correct I-Q mismatch in real-time.
  • Techniques like blind source separation (BSS) or least mean square (LMS) filters can effectively compensate for mismatches.
  • https://rahsoft.com/2025/01/31/i-q-mismatch-in-communication-systems/

Release Notes


v1.016 (same as v1.1)

Transmitter

  • Better detection of OBS Studio running state; started or not started.
  • The selecting a video source the list is reloaded as the state of a source may have changed and become available.
  • Using Microsoft Video Resizer DSP (CLSID_CResizerDMO).
  • Optional: Extra resolutions added when using OBS-Camera (OBS Studio) and/or other video sources. 
  • Tested 360 x 180 using 125 ksps, support for 66 ksps will be added in a future release.
  • Resolutions and frame rates are now sorted high to low in the Transmit, Video selection window. 


v1.0.15

Receiver

  • Switching channels is now faster if the background threads have data to process.


Transmitter

  • Worked around a problem with the OBS VirtualCamera plugin which offers 'bogus' FPS values. The resolution and frame rate set in OBS Studio is the first value returned when enumerating OBS-Camera, all other values are now ignored.
  • Video input throttling is now disabled in callbacks to the Encoding window - this was an early attempt to limit video data rates.


User Interface

  • Added Always On Top button to Ribbon Bar, Home, Layout. When selected, SDR Television stays on top of other programs.


v1.0.14

User Interface

  • FFT Resolution added to Settings: Spectrum: Display, FFT
  • Matched filter roll-off and length moved from Receive: Configuration to Settings: Receive: Frame Search.
  • Gardner timing recovery using better dot product code.


v1.0.13

Receiver

  • Gardner timing recovery and IQ imbalance are now always enabled.
  • Gardner timing recovery filters now use fewer taps as the symbol rate increases.
  • Updated frequency tracking by adding a rotator (NCO) after the SDR data decimation (NCO, Downconverter). This help with signal locking and possibly decoding of weak signals.


The Decoding Overlay now shows Tracking instead of Offset. The first value is the offset applied to the IQ data from the SDR, the second the current offset from the first value. The first value is updated when the second value is greater than 1/10,000 of the symbol rate.


User Interface

  • Updated the ribbon bar.
  • Spectrum FFT resolution reduced from 100% to 25% as there's no need for a super-sharp display.


v1.0.13

Receiver

  • Frequency Tracking: Fixed error in the receiver matched filter; in the Dot Product processing the filter coefficients were not conjugated, so the frequency offset was roughly doubled instead of being corrected!

    The dot product of two complex vectors is defined as the sum of the products of the corresponding entries of the two sequences of numbers. For complex vectors, the dot product is calculated using the complex conjugate of the second operand. This is important because the dot product is a bilinear form, which means it is symmetric and positive definite.

Use Interface

  • Start Stream cannot be deselected while sending.
  • In the Receiver panel, Bit Rates all meta data packets (PAT, SDT etc.) are shown as Other.


v1.0.11

Receiver

  • Dish Alignment features:
  • Optionally speak the MER value using Microsoft's text-to-speech.
  • Display either the average MER or (new) peak MER, peak being better for alignment. 



v1.0.10

Receiver

  • SDR-Radio kits dated March 18th (build 4008) or later now have the Pluto/LibreSDR previous filtering logic restored:
  • Up to and including 2MHz bandwidth use a standard bandpass design with Blackman windowing. There is neither decimation nor interpolation in the Pluto.
  • There is more gain but the filtering quality is reduced.
  • Recommended: 2.5MHz and above use pre-defined generic filters from the Analog Devices AD9361 library libad9361-iio. These are the cleanest filters, however the output signal is ~1dB lower than firmware-based solutions from Evariste Courjaud, F5EOE. 


User Interface

  • The current QO-100 channel selection is highlighted.
  • Added 175% and 200% to the Decoding Overlay, Font Sizes. Useful when using a laptop for dish adjustment, larger text size makes reading MER easier.


v1.0.9

Receive

  • Replaced Gardner timing error detection (TED) with a corrected design based on the book "Digital Communications: A Discrete-Time Approach" by Michael Rice. This uses a second-order continuous-time phase locked loop (figure C.2.2). This implementation is designed to be robust when unexpected IQ samples are processed.
  • AGC Target default set to 1.
  • Changed IQ Imbalance design, now using code from Airspy (Youssef Touil, Leif Asbrink).
  • Removed 'None' from the list of bandpass filter options as it is superfluous.


General

  • Fixed startup error "Encountered an improper argument" when no microphones are available.


User Interface

  • When transmitting, the resolution and frame rate are shown in the transmit timer. If either value is greater than the recommended default, a warning symbol is added.


v1.0.8

Receive

  • Fixed a bug with RMS calculation in IQ Imbalance.
  • Tuned IQ Imbalance for weak signals.


v1.0.7

User Interface

  • The audio and video windows now resize the selection dropdown to the width of the main windows.


Receive

  • Improved carrier tracking, used when there are no pilots. This benefits weak signals with low FEC values, for example FEC (LDPC) 1/4.

Release Notes

v1.0.6


Transmit

A FIR filter at the end of the IQ generation processing was too narrow and too sharp, must have been degrading reception of signals created with previous kits. This filter is now wider and uses fewer taps.


Pluto Support

(This is part of SDR Console.) The FIR filter support for the Pluto has been corrected:

  • Images reduced if not completely removed.
  • Transmit now works reliably when the Pluto bandwidth is greater than 2 MHz.
  • The digital filter uses a FIR design from Analog Devices, taken from the file ad9361_baseband_auto_rate.c in the libad9361-iio library.
  • The analog filter is unchanged. It will appear wider than expected to allow for roll-off.


With QO-100 and other DVB-S2 operation there really is little if any need for any filtering.


v1.0.5


Receive

  • Added optional inversion of the incoming signal inversion (swap I and Q).


Transmit

  • Now setting the Quantization Parameter (QP) to the default value of 26. I had come across this before but never really understood what it does. I was just querying the value, not trying to set it.


https://www.oupree.com/knowledge/Whats-Quantization-Parameter-QP-in-Video-Encoder.html


v1.0.4


Receive

  • Improved initial frequency detection when searching for a signal.
  • Optional advanced signal detection options.
  • Found and fixed a bug causing a lockup when a 188 byte packet checksum failed.

v1.0.3


Testing

  • Added optional Gaussian noise when in loopback mode, this is for development use only.


User Interface

  • Added display of elapsed time to the Receive Audio window. Gaps in reception of up to 10 seconds are allowed. Later use of AI may support a 'speech quality' metric, determined from quality and technical content.
  • Added tuning bars in the spectrum, these show the frequency and symbol rate for the current mouse position.
  • Added extra categories in the Log window, now Main, Radio, Transmit, Debug.
  • Audio and video windows optionally hide controls when the cursor leaves the corresponding window.


Receiver

  • Added initial Gardner timing error detection (TED).
  • Changed AGC algorithm, target output now ~0.7 using 32-bit IEEE floats.
  • Redesign #1 of the IQ to Transport Stream (TS) processing, still plenty of refactoring to do.
  • Changed default LDPC algorithm.
  • Fixed BCH implementation which was not correcting any bits, also not detecting errors.
  • Changed default matched filter (RRC) defaults.
  • Added Quadrature Imbalance correction.
  • Interpolation filter roll-off dynamically updated with the value in the base-band header byte MATYPE-1. This value is also shown in the Decoding overlay and Decode Status window.
  • Refined the list of receive filter bandwidths.


AGC

  • Added selectable reference level.
  • Added alternative algorithm, Feed forward (the default algorithm is Feedback). Feed forward is experimental.
  • Searching for a signal in the noise uses considerable CPU, especially at higher symbol rates. The spectrum data is now used to detect the possible presence of a signal, thus saving CPU while a signal is not present. When a signal is believed to be present:
  • The arrows at the top, bottom of the bandwidth display are filled in,
  • The receiver is enabled.


Transmit

  • The transmitted BB Header roll-off value in byte MATYPE-1 now matches the roll-off value used in the filter, rather than preset to 0.35.
  • Removed 12-bit camera formats, problem discovered using a new DELL laptop.
  • Added optional transmit signal inversion (swap I and Q).


Pluto

  • Pluto RX FIR Filter gain set to 6, example: "RX 3 GAIN 6 DEC 1 TX 3 GAIN 0 INT 1 ..."
  • Removed Pluto/Libre bandwidths below 1.5 MHz.
  • Changed filter taps for bandwidths above 2MHz, was 64 now 128. Signal is now cleaner, ~40dBm SNR.


From the AD9363 product sheet: "The AD9363 transmitters use a direct conversion architecture that achieves high modulation accuracy with ultralow noise. This transmitter design produces a best-in-class Tx EVM of −34 dB, allowing significant system margin for the external power amplifier (PA) selection."


v1.0.2

  • Improved receiver sensitivity, still not as good as it can be.


v1.0.1

  • Fixed fatal bug in receive audio AGC when the output device sample rate was 192kHz.

Download v1.1.6

The minimum version of SDR Radio is shown below. You must download it if SDR Television displays an error message when starting.


SDR Television

Download from either:


SDR Radio

Requires a SDR Radio 64-bit kit build 4008 March 18th, 2026 or any newer kit.


By Simon Brown September 14, 2026
History
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
By Simon Brown August 26, 2026
SDR Television v1.1.4 User Interface Rearranged ribbon bar, added Forward Error Correction (FEC) to the Home panel. Receiver Currently trying to improve LDPC decoding for low SNR. Part of this work involves reducing CPU load in the LDPC decoder. Planning to add advanced decoding in v1.1.5. Changed the list of FEC / LDPC algorithms, removing min-sum and min-sum correction. Optimised offset min-sum algorithm to reduce CPU load. Optimised Bose-Chaudhuri-Hocquenghem (BCH) processing. Added sum-product. Corrected LLR soft scaling for QPSK. Changed default RRC filter length to 12 symbols, previous value of 30 was too long. Updated Feed-Forward AGC with a design from CoPilot. Optimised Gardner TED RRC filter length, now 25 taps. Increased the receive RRC filter rolloff factor by 25% to capture more energy with weak signals. Reset LDPC after 1 second of inactivity. FEC - LDPC There are now two LDPC algorithms, Offset min-sum, and Sum-product. Sum-product is more sensitive than offset min-sum but currently doesn't work at all for FEC rates lower than 1/2 (1/4, 1/3 and 2/5). When sum-product is selected and the rate is lower than 1/2 then offset min-sum is used. The default damping settings for sum-product are shown below.  The aim is to work on sum-product with the help of ChatGPT in 2027 to get the maximum possible sensitivity. Downloads are at the bottom of this page.
By Simon Brown July 27, 2026
July 26th, 2026 Reuter RSR200B Added initial support. Fobos Finalised support for Fobos SDR, only the Agile firmware is supported. Some early Fobos SDR units had HF2 and HF1 swapped on the case printing. FFT When using NVIDIA CUDA for the FFT the returned buffers now use memory from the heap rather than pinned memory (*). Reduced the CPU load in the FFT Helper DLL. The data from the FFT (CUDA, IPP, OpenCL) is processed to match the display DIPs. When running Broadcast-FM with x4 resolution there were 550 FFT bins per display pixel (DIP). These 550 bins were averaged which takes quite some processing, especially when running a matrix display with many receivers enabled. I now down-sample the bins to a maximum of (about) 32 which doesn't affect the display or any DSP but does reduce the CPU. Frequency Database Loading of the frequency database into memory-mapped backing now much faster. Pluto TX Doppler support for Pluto / LibreSDR. Have tested this by adding debug info, seems OK 🙂 . RDS Added variable font size in the RDS editor window. Forced uppercase of PS text in the RDS Editor removed. Change to RDS Logfile updates while the editor is open & visible. Updates are now allowed, previously not so. Recordings Fixed font size error in the playback, navigation window (was incorrect logic). When starting the video recorder a sanity check makes sure the selected folder exists and is accessible. Satellite Satellite definition file format has changed, no need to update your settings but support for the new OMM (.xml) format is included. I'm hosting satellite data on my (new) Akamai server, these is currently a cache of the Celestrak data. I'll add a web page soon which explains what's been happening. Transmit Audio mute is now a per-profile setting. Other Fixed an error opening the matrix display while the SDR was already started. Crash when selecting "Configure" from the Select Radio window fixed. Does not create an error when the graphics driver restarts.
By Simon Brown July 10, 2026
SDR Television v1.1.3 User Interface Fixed erroneous cursor flicker in Settings help text and Receive, Transmit panes. Fixed error in the spectrum squelch logic. Minor fix/improvement in QPSK LUT lookup for low values. Receiver Use highest possible quality decimation for symbol rates of 333ksps and lower. Added optional Doppler correction for LEO/MEO satellites such as MARMOTsat (July 2026). This will most probably be tweaked when the DVB-S2 transmissions started. Downloads are at the bottom of this page.
By Simon Brown June 12, 2026
SDR Television v1.1.2 June 12th, 2026: Add option to disable audio, thus making more bits available for video, this is for use in DATV contests. Note: 66 ksps sample rate is still experimental, will be improved. Downloads are at the bottom of this page.