Modulating DAB+ from Satellite with HackRF One

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
906
Reaction score
691
Points
93
Age
29
My Satellite Setup
Dishes: 80cm (5°W/4.8°E), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC (Intel i3 processor, nVidia Graphics, and TBS6905 4x DVB-S2 PCIe tuner card) running Ubuntu with Kodi/TVHeadend, Wetek Play2, Skybox M3.
My Location
Cheltenham
So, after wondering about getting one for a few years, I finally bit the bullet and ordered a HackRF One off Ebay.

It arrived today, and I spent the afternoon setting-up ODR-DABEnc on my Raspberry Pi4. A couple of hours later and the HackRF is happily transmitting the Italian DAB+ multiplexes received from Eutelsat 5W (Rai, DAB Italia and EuroDAB Italia), through a coax cable into my DAB radio!

Will try to do a guide with some pictures in the next few days!
 

Attachments

  • image0.jpeg
    image0.jpeg
    81.8 KB · Views: 56

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
906
Reaction score
691
Points
93
Age
29
My Satellite Setup
Dishes: 80cm (5°W/4.8°E), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC (Intel i3 processor, nVidia Graphics, and TBS6905 4x DVB-S2 PCIe tuner card) running Ubuntu with Kodi/TVHeadend, Wetek Play2, Skybox M3.
My Location
Cheltenham
Got it doing DVB-T this lunchtime too, still via the Pi4. I think the Pi is a little underpowered for that as it skips and glitches after a little while, but I managed to get it to broadcast the RGE1 Catalonia multiplex (RTVE) piped in from TDTSAT on 30W onto UHF channel 21.

Using GNURadio with this - neo7530/dvb-broadcast

The TDTSAT ones are the simplest to do because the null packets aren't stripped from the 19.9Mbps stream after decoding, so it doesn't need re-padding for DVB-T modulation (for French/Italian multistream, the null packets get stripped by my satellite card). You just set the configuration to the Spanish DTT parameters (64QAM, 8k, GI: 1/4, FEC: 2/3)
 

Attachments

  • IMG_0399.jpg
    IMG_0399.jpg
    854.9 KB · Views: 40
Last edited:

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
906
Reaction score
691
Points
93
Age
29
My Satellite Setup
Dishes: 80cm (5°W/4.8°E), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC (Intel i3 processor, nVidia Graphics, and TBS6905 4x DVB-S2 PCIe tuner card) running Ubuntu with Kodi/TVHeadend, Wetek Play2, Skybox M3.
My Location
Cheltenham
To set up the DAB transmission on the Pi with a HackRF One, I did the following -

1) Build and install SoapySDR - pothosware/SoapySDR

Some dependencies are required for this -
Code:
sudo apt install cmake g++ libpython-dev python-numpy swig

2) Build and install the SoapySDR HackRF modules - pothosware/SoapyHackRF

For this you need to have the HackRF drivers -
Code:
sudo apt install hackrf libhackrf-dev

It took a reboot at this stage for SoapySDR to see the HackRF, but after that it picked it up fine.

3) Build and install the OpenDigitalRadio DAB modulation software (ODR-DabMod) - Opendigitalradio/ODR-DabMod

This had some dependencies too, namely ZeroMQ and FFTW -
Code:
sudo apt install libzmq3-dev fftw3-dev

I disabled UHD output in the config before building as that would have required building more software that I didn't need - I only needed ODR-DabMod to interface with the HackRF via SoapySDR.
Code:
./configure --disable-output-uhd

4) Build and install ETI Tools, to demux the encapsulated DAB streams from satellite - piratfm/eti-tools

5) Build and install TSNIV2NI - newspaperman/tsniv2ni - This is another satellite DAB demuxer, it decodes satellite DAB that uses a slightly different format to the ones supported by ETI tools, as explained in the ETI Tools README.

At this point we're ready to modulate a DAB signal from satellite, using ETI Tools/tsniv2ni to get the DAB ensemble in ETI format, and ODR-DabMod to modulate it and transmit it via the HackRF.

6) We need a DAB.ini config file to give ODR-DabMod the configuration of what to transmit (e.g. what DAB frequency, and how much RF amplification to use) and where the input data is coming from.

There's an example.ini file in the doc part of the GIT repository, which I used to create my own, removing the bits I wasn't interested in at this stage. I selected 6C as the channel, purely at random as one that doesn't have anything else on it here. I set the RF power level as pretty low (10) as it's cabled into the receiver so it doesn't need to be very strong. For the input data, I was going to use ZeroMQ, but it turns out that you can just pipe in ETI data directly by setting the input to FIFO. eti_tools/tsniv2ni happily write ETI to STDOUT which makes it nice and simple to link them up.

I left some of the defaults from the sample file.

Code:
[input]
transport=file
source=/dev/stdin
loop=0

[modulator]
gainmode=var
digital_gain=0.8
rate=2048000

[cfr]
enable=0
clip=50.0
error_clip=0.1

[firfilter]
enabled=1

[poly]
enabled=0

[output]
output=soapysdr

[soapyoutput]
device=
master_clock_rate=32768000
txgain=10
channel=6C

7) Finally, I made a shell script to run to pull in a DAB multiplex and transmit it using that config. I use TVHeadend with my PC satellite card, but you can equally stream a transponder carrying a DAB multiplex PID from an Enigma2 box.

An example for the RAI DAB+ multiplex on 5W, the config and tools needed for this are on the eti_tools README documentation.

I use CURL to stream the filtered PID 1000 carrying the DAB data from the transponder (11013V MIS), then the eti_tools tool ts2na to demux the DAB data from the MPEG-TS packets (with an offset of 0, as shown in the README for this DAB multiplex), then the eti_tools tool na2ni to output as ETI-NI, which is the correct input format for ODR-DabMod. This then just gets piped into odr-dabmod which reads the config file, and transmits the multiplex on DAB channel 6C.

Code:
curl -s http://192.168.0.224:9981/stream/mux/f1daa0412bd28c9e108d3fc804ecd2d4?pids=1000 | ts2na -p 1000 -s 0 | na2ni | odr-dabmod dab.ini

For the commercial Italians on 12690V on 5W, this is even more straightforward, as ts2na and na2ni can be replaced with just tsniv2ni and the PID, as this converts them straight to the correct ETI-NI format.

Code:
curl -s http://192.168.0.224:9981/stream/mux/446ab798d96cc90b4f2f1976e7f3e050?pids=4105 | tsniv2ni 4105 | odr-dabmod dab.ini

Provided everything is working, if you attach a cable from the HackRF to a DAB tuner at this point, you should be able to tune in the DAB+ ensemble on 6C.
 

Captain Jack

Модератор
Staff member
Joined
Oct 21, 2006
Messages
11,280
Reaction score
7,499
Points
113
My Satellite Setup
See signature
My Location
North Somerset
Nice! Don't forget to check HackTV project for analogue transmissions!
 

Captain Jack

Модератор
Staff member
Joined
Oct 21, 2006
Messages
11,280
Reaction score
7,499
Points
113
My Satellite Setup
See signature
My Location
North Somerset
BTW, what did you use to transmit DVB-T?
 

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
906
Reaction score
691
Points
93
Age
29
My Satellite Setup
Dishes: 80cm (5°W/4.8°E), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC (Intel i3 processor, nVidia Graphics, and TBS6905 4x DVB-S2 PCIe tuner card) running Ubuntu with Kodi/TVHeadend, Wetek Play2, Skybox M3.
My Location
Cheltenham
BTW, what did you use to transmit DVB-T?

Thanks, will definitely have a look at the analogue stuff! Hoping to figure out FM (with RDS) too.

For DVB-T I installed GNURadio and then used the scripts here - neo7530/dvb-broadcast

Code:
curl -s http://tvheadend:9981/stream/mux/multiplex-link | ./dvbt.py -

The dvbt.py script in that Git repository reads in the file dvbt.conf (an example is included in the repository). I just set the transmission parameters in that file to the right ones for Spanish DVB-T (19.9Mbps muxes).

For other multiplexes, if your DVB-S2 card strips the null packets, you'll have to re-insert them to make the TS bitrate up to one of the bitrates of the DVB-T modes (all shown in that conf file), matching the transmission parameters you set. You can use a tool like TSDuck (tsduck.io) to do that.
 

Captain Jack

Модератор
Staff member
Joined
Oct 21, 2006
Messages
11,280
Reaction score
7,499
Points
113
My Satellite Setup
See signature
My Location
North Somerset
Ah yeah, I saw that one - it's by @neo7530 (obvs!). Was thinking that there may have been some other one.
 

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
906
Reaction score
691
Points
93
Age
29
My Satellite Setup
Dishes: 80cm (5°W/4.8°E), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC (Intel i3 processor, nVidia Graphics, and TBS6905 4x DVB-S2 PCIe tuner card) running Ubuntu with Kodi/TVHeadend, Wetek Play2, Skybox M3.
My Location
Cheltenham
Ahh I didn't realise @neo7530 is a member here!

Thanks for your scripts, they're nice and easy to use. Didn't expect to have a DVB-T signal modulated so quickly!

The DAB+ is really nice and stable with the Pi4. Had stations from DAB Italia playing through my Hifi all morning without a glitch.

When I get an opportunity to move my 5W dish briefly over to 7E, I'm going to have a go at the German public DAB muxes in IP on there if I can lock them.
 

Attachments

  • C40F95FF-2906-4CEC-A051-AC39A218EFC9.jpeg
    C40F95FF-2906-4CEC-A051-AC39A218EFC9.jpeg
    339.5 KB · Views: 34

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
906
Reaction score
691
Points
93
Age
29
My Satellite Setup
Dishes: 80cm (5°W/4.8°E), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC (Intel i3 processor, nVidia Graphics, and TBS6905 4x DVB-S2 PCIe tuner card) running Ubuntu with Kodi/TVHeadend, Wetek Play2, Skybox M3.
My Location
Cheltenham
The German public multiplexes in IP format on 7°E (12572V) all work nicely too, using the fedi2eti tool that comes with eti-tools.

They use some very high bitrates on some of them! SWR/hr/BR with a handful of 136kbps and 144kbps AAC-LC stations, sounding very good!

fedi2eti takes transport stream data as input via a pipe (12572V with PID 101), with the PID, IP address and port as arguments, and outputs DAB ETI-NI frames which the ODR Modulator can read and modulate as before. :)

Code:
curl -s http://tvheadend:9981/stream/mux/muxlink?pids=101 | fedi2eti 101 239.132.1.50 5004 | odr-dabmod dab.ini
 

Attachments

  • image0 (1).jpeg
    image0 (1).jpeg
    83.8 KB · Views: 24

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
906
Reaction score
691
Points
93
Age
29
My Satellite Setup
Dishes: 80cm (5°W/4.8°E), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC (Intel i3 processor, nVidia Graphics, and TBS6905 4x DVB-S2 PCIe tuner card) running Ubuntu with Kodi/TVHeadend, Wetek Play2, Skybox M3.
My Location
Cheltenham
Also now working are the two brand new French DAB+ multiplexes carried in IP format (like the German ones) on 5°W 11460.5H PID 301. Had these modulating nicely using the HackRF and ODR-DABMod today :)

All stations are 88kbps HE-AAC, and sound very good. They really show up the quality of the DAB stuff here in the UK!
 

Attachments

  • image.jpg
    image.jpg
    2.9 MB · Views: 15

Channel Hopper

Suffering fools, so you don't have to.
Staff member
Joined
Jan 1, 2000
Messages
32,575
Reaction score
7,388
Points
113
Age
57
Website
www.sat-elite.uk
My Satellite Setup
A little less analogue, and a lot more crap.
My Location
UK
All stations are 88kbps HE-AAC, and sound very good. They really show up the quality of the DAB stuff here in the UK!
Everything shows up the quality of DAB stuff.

 

SimonE

Regular Member
Joined
Feb 26, 2015
Messages
100
Reaction score
91
Points
28
Age
76
My Satellite Setup
1.2m CM dish,Supermount 1224 H-H rotator, Octagon SX88+, DR.HD D15, Ku LNB:Octagon OSLO, C Band: Titanium C1W-PLL, Ka Band: XMW R9216AF with FD9000 feedhorn,Inverto Saorsat LNB and Inverto Ka/Ku LNB .
My Location
Gloucestershire, UK
Also now working are the two brand new French DAB+ multiplexes carried in IP format (like the German ones) on 5°W 11460.5H PID 301. Had these modulating nicely using the HackRF and ODR-DABMod today :)

All stations are 88kbps HE-AAC, and sound very good. They really show up the quality of the DAB stuff here in the UK!
The French on 11460.5H wont lock here on my Promax HD Ranger but the German one on 7E does: 12568V DVB-S2 s/r=17020 QPSK fec=2/3 11.4dB. It recognises an SID of 1 as a data stream. Well done Adam792 for finding them and undoing them.
 

SimonE

Regular Member
Joined
Feb 26, 2015
Messages
100
Reaction score
91
Points
28
Age
76
My Satellite Setup
1.2m CM dish,Supermount 1224 H-H rotator, Octagon SX88+, DR.HD D15, Ku LNB:Octagon OSLO, C Band: Titanium C1W-PLL, Ka Band: XMW R9216AF with FD9000 feedhorn,Inverto Saorsat LNB and Inverto Ka/Ku LNB .
My Location
Gloucestershire, UK
Also now working are the two brand new French DAB+ multiplexes carried in IP format (like the German ones) on 5°W 11460.5H PID 301. Had these modulating nicely using the HackRF and ODR-DABMod today :)

All stations are 88kbps HE-AAC, and sound very good. They really show up the quality of the DAB stuff here in the UK!
The poor quality here in the UK is caused by the accountants stuffing in as many radio stations as they can in each DAB mux. Also as we in the UK invented the system we are stuck mostly with DAB and not DAB+. In no way is it a replacement for FM broadcasting which is still pretty good quality on a decent receiver.
 

SimonE

Regular Member
Joined
Feb 26, 2015
Messages
100
Reaction score
91
Points
28
Age
76
My Satellite Setup
1.2m CM dish,Supermount 1224 H-H rotator, Octagon SX88+, DR.HD D15, Ku LNB:Octagon OSLO, C Band: Titanium C1W-PLL, Ka Band: XMW R9216AF with FD9000 feedhorn,Inverto Saorsat LNB and Inverto Ka/Ku LNB .
My Location
Gloucestershire, UK
The French on 11460.5H wont lock here on my Promax HD Ranger but the German one on 7E does: 12568V DVB-S2 s/r=17020 QPSK fec=2/3 11.4dB. It recognises an SID of 1 as a data stream. Well done Adam792 for finding them and undoing them.
Better luck this morning locking the French DAB @5W. 11460.5H DVB-S2 QPSK s/r=5780 fec=3/4 17.5dB. DAB M1 and M2 found with SID=30
 

SimonE

Regular Member
Joined
Feb 26, 2015
Messages
100
Reaction score
91
Points
28
Age
76
My Satellite Setup
1.2m CM dish,Supermount 1224 H-H rotator, Octagon SX88+, DR.HD D15, Ku LNB:Octagon OSLO, C Band: Titanium C1W-PLL, Ka Band: XMW R9216AF with FD9000 feedhorn,Inverto Saorsat LNB and Inverto Ka/Ku LNB .
My Location
Gloucestershire, UK
Better luck this morning locking the French DAB @5W. 11460.5H DVB-S2 QPSK s/r=5780 fec=3/4 17.5dB. DAB M1 and M2 found with SID=30
I wonder if anyone has tried using QT-dab 32 to resolve these DAB signals being delivered by satellite? I use qt DAB 32 successfully to receive UK DAB using an RTL dongle but could it be used for these French and German signals?
 
Top