A state of tuners

by on under hamradio
10 minute read

A state of tuners

PCI tuners, SDR, SAT>IP, IPTV and open source software.

Covering digital modes of satellite, terrestrial and amateur TV.


The following software is useful for testing.



  • DVB-T
  • DVB-T2
  • DVB-S
  • DVB-S2
  • DVB-C


  • PAL-I

Adapters and accessories

You will need a range of adapters if you wish to use RTL devices.



  • Horizontal
  • Vertical


  • Circular

Universal LNBs

This is specific to europe.

Ref: wiki/Low-noise_block

Voltage Tone Polarization Frequency band
13 V 0 kHz Vertical 10.70–11.70 GHz, low
18 V 0 kHz Horizontal 10.70–11.70 GHz, low
13 V 22 kHz Vertical 11.70–12.75 GHz, high
18 V 22 kHz Horizontal 11.70–12.75 GHz, high

Antenna systems

  • UHF Yagi. Most common for modern terrestrial DVB-T, DVB-T2 Freeview. If doing DATV DVB-S you must use a LNB DC power blocker.
  • VHF Yagi. Old analog TV.
  • Universal LNB + dish. Most common for satellite DVB-S, DVB-S2 Freesat. Also can be used for: QO-100/Es’hail-2

Test signals

Station Type GHz MHz KHz Hz Polarity Megasymbols/s Kilosymbols/s Symbols/s FEC
GB3ZZ DVB-S 1.316 1316 1316000 1316000000 Horizonal 4 4000 4000000 1/2
Broadcast Freeview ITV DVB-T 0.578 578 578000 578000000 Horizonal        
Broadcast Freesat Channel 4 DVB-S 10.714 10714 10714000 10714000000 Low Horizonal 22 22000 22000000 5/6

Bus speeds for tuner devices

Important to ensure we have the bandwidth for video.

  • USB 2.0 revised = 60 MBps
  • PCI standard 32 bit = 133 MBps
  • PCI-E x4 = 800 MBps (am I using PCI 3.0?)

Linux paths

  • Analog video sources: /dev/video0
  • Digital TV sources: /dev/dvb/adapter0
  • Useful Linux command to list DVB devices: dmesg | grep adapter

Other experiments

  • Using a TV antenna for ham radio band reception.
  • DAB decoding using RTL dongle and FOSS software using: welle.io

Device table

Type Brand Model Chipset Frequency range Modes Inputs OS Driver Software support Docs Notes
PCI-E Hauppauge WinTV-HVR-1200 NXP TDA10048HN   DVB-T Belling-Lee, F-type, RCA, 3.5 mm jack and S-Video DIN Linux V4L2 Kaffeine, Tvheadend linuxtv  
PCI universal 32 bit AsusTek LNA Tiger Hybrid Philips TDA10046H 51 - 858 MHz DVB-T, Analog Belling-Lee Windows, Linux DirectShow, V4L2 VLC, Tvheadend   Firmware required for Linux.
USB 2 EasyCAP Somagic SMI-2021CBE     Analog RCA       linuxtv Designed for CCTV DVR.
USB 2 NewGen RTL2832   25 - 1760 MHz DVB-T SMA Linux V4L2 VLC, Tvheadend linuxtv  
USB 2 DVB-T+FM+DAB 820T2     DVB-T MCX Linux V4L2 VLC, Tvheadend    
USB 2 Dual RTL     DVB-T SMA, SMA Linux V4L2 VLC, Tvheadend    
USB 2 Xbox One Digital TV Tuner Panasonic MN88472   DVB-T, DVB-T2, DVB-C Belling-Lee Linux V4L2 Kaffeine, Tvheadend linuxtv Firmware required for Linux.
PCI universal 32 bit Pinnacle PCTV Systems 4000i     DVB-S F-type Windows     linuxtv No Linux support as of yet.
PCI-E TBS TBS-6980     DVB-S, DVB-S2 F-type, F-type Linux V4L2 VLC, Tvheadend linuxtv Firmware required for Linux.

Note: Generic RTL devices may require a PPM offset outside their intended use center frequency. For example the 820T2 mentioned above requires a PPM offset of 0.5 for UHF amateur bands.


  • ITV: vlc dvb-t://frequency=578000000:bandwidth=0
  • The docs state it should be in KHz but I get: dtv stream error: 578000 Hz carrier frequency is too low. so it looks like it’s actually using Hz.
  • Record cvlc transport stream headless: cvlc dvb-t://frequency=578000000:bandwidth=0 :program=8384 --sout "#file{dst=/home/peter/recording.ts,no-overwrite}"
    • There must be a space before :program
    • There is a number of ways of formatting flags.


  • I found I had to specify polarity voltage and FEC.
  • Channel 4: vlc dvb-s://frequency=10714000000:srate=22000000:dvb-fec=5:voltage=18
  • ITV: vlc dvb-s://frequency=10758000000:srate=22000000:dvb-fec=5:voltage=13
  • The docs state it should be in KHz but I get: dtv stream error: 10714000 Hz carrier frequency is too low. so it looks like it’s actually using Hz.
  • GB3ZZ: vlc dvb-s://frequency=1316000000:srate=4000000:dvb-fec=1:voltage=0 :program=1 :dvb-adapter=1
    • There must be a space before :program
    • I am using the second tuner on my card so :dvb-adapter=1 instead of :dvb-adapter=0 which is the default. Ensure a space before this flag.

AsusTek - LNA Tiger Hybrid signal issues

  • Windows VLC: Not good signal at all. Very blocky. For some reason will decode in DVB-T2 but I don’t believe it really is doing V2. See screenshots of VLC codec info.
  • Linux VLC: No decode as of yet. Sometimes syncs but never a image or error under -vvv console output.


AsusTek - LNA Tiger Hybrid

wget https://github.com/OpenELEC/dvb-firmware/blob/master/firmware/dvb-fe-tda10046.fw?raw=true -O dvb-fe-tda10046.fw
sudo cp dvb-fe-tda10046.fw /lib/firmware
sudo reboot

Xbox One - Digital TV Tuner

wget http://palosaari.fi/linux/v4l-dvb/firmware/MN88472/02/latest/dvb-demod-mn88472-02.fw
sudo cp dvb-demod-mn88472-02.fw /lib/firmware
sudo reboot

TBS - TBS-6980

Ref: github.com/ljalves/linux_media

wget http://www.tbsdtv.com/download/document/common/tbs-linux-drivers_v130901.zip
unzip -p tbs-linux-drivers_v130901.zip linux-tbs-drivers.tar.bz2 | tar jxOf - linux-tbs-drivers/v4l/tbs6981fe_driver.o.x86_64 | dd bs=1 skip=10144 count=55486 of=dvb-fe-cx24117.fw
sudo cp dvb-fe-cx24117.fw /lib/firmware
sudo reboot


Tvheadend installation

  • I noticed it’s easier to setup tuners if the tuner is already present with required firmware before starting Tvheadend for the first time. This is because the wizard guides you through based on the type of tuner.
  • Install Tvheadend on Ubuntu 18.04 server

Tvheadend found services test

Tests are carried out using the following two “Pre-defined muxes”:

--Generic--: auto-With167kHzOffsets adds 155 muxes

United Kingdom: uk-Mendip brings us up to 157 muxes total to scan

My adapters listed.


Comparison of networks found by each with the same test muxes to scan.


Freeview DVB-T HD channels

To get HD services I had to manually add the mux. For some reason the predefined muxes don’t include HD.


Scanning the custom mux pulls in the following HD services.


I did find when watching a HD channel it seemed to mess up my EPG. Not sure why.

Tvheadend recordings

Make sure you check and un-check enabled against each Autorecs item after changes to channel mappings for the auto recordings to work properly. Otherwise it seems to miss some with Status:Invalid. Seems you just need to wait for the EPG to update itself and recordings match up again.

Make sure you don’t have any Autorecs with channel specific filters. They will be lost when removing channels for remapping.

“Recording”/”Digital Video Recorder Profiles” sensible format string: $t/%F-%R-$t$-e$n.$x

Example path created: Beat-The-Chasers/2020-04-29-23-45-Beat-The-Chasers.ts

Example duplicate path created: Beat-The-Chasers/2020-04-29-23-45-Beat-The-Chasers-1.ts

It’s a shame it’s not lowercase but it’s as good as I can hope for.

RTSP in Tvheadend

pipe:///usr/bin/ffmpeg -loglevel fatal -i rtsp://admin:password@ -vcodec copy -acodec copy -metadata service_provider=cctv -metadata service_name=ch01 -f mpegts -tune zerolatency pipe:1

Here I reference my RTSP blog post but this time im using Tvheadend instead of a desktop running MPV as a client.


Before I bought a set top box I thought I would try decoding GB3ZZ using SDRagels built in DVB-S decoder along with my HackRF. No LNB DC power blocker required here as the SDR doesn’t output any bias normally.

Overview with the wideband reception so you can see how the signal looks.


It proved very CPU intensive and I only just about got data decoded when I turned off spectrum waterfalls and reduced my bandwidth to only that of what I need to decode to save on CPU.

You can see the QSPK constellation is aligning up nicely.


This is the best decode I could get so far. I need to try a very fast clock for single thread performance.


Blazer set top box DATV

I bought a cheap set top box from Amazon (Blazer HD4000). Most of the cheap chinese made ones allow you to set custom LNB settings.


Overview of the setup with Yagi and LNB DC power blocking.


LNB frequency and blind scans

Initial LNB settings.


Performing a blind scan it finds GB3ZZ.


After completion it finds GB3ZZ on both horizontal and vertical which is to be expected given we are using a Yagi with no LNB polarization switching.


11916 MHz is the frequency the blind scan found GB3ZZ on. 1316 MHz is the actual TX frequency of GB3ZZ.

11916 MHz - 1316 MHz = 10600 MHz

Which corresponds with high band universal LNB local oscillator frequency on Wikipedia: 10.60 GHz.

So it looks like the set top box frequency display takes into account LNB local oscillator frequency.

We can if we want change our software LNB frequency to make the actual frequency calculation easier - 10000 10 GHz.


GB3ZZ reception

The channel list shows the two services (GB3ZZ Ch1, GB3ZZ Ch2) within the one mux along with frequency and symbol rate.


GB3ZZ displays images when there are no active repeater users.



Tvheadend DATV

After playing with Freeview and Freesat on Tvheadend and DATV on the set top box I thought it’s time to combine the two and have DATV in Tvheadend.

TBS-6980 + LNB DC power blocker.

Creating a custom mux for GB3ZZ.


I did a test and noticed we need to account for the assumed 10.60 GHz universal LNB frequency.


Scanning that mux we find our two services (GB3ZZ Ch1, GB3ZZ Ch2).


Mapping those to channel list.


Signal strength isn’t bad for my indoor antenna.


There are several benefits. I can see both channels at once unlike with most set top boxes. I can stream the DATV over IPTV to anywhere on my network.



  • Include VLC codec screenshots, separate blog post.
  • DVBlast, separate blog post.
  • DATV QO-100/Es’hail-2, separate blog post.
  • More tuners blog post.
comments powered by Disqus