Modulating DAB+ from Satellite with HackRF One

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
1,260
Reaction score
1,152
Points
113
Age
31
My Satellite Setup
Dishes: 80cm (5°W), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC w/ TBS6905 4x DVB-S2 PCIe tuner card running TVHeadend, Octagon SF8008 mini.
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: 77

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
1,260
Reaction score
1,152
Points
113
Age
31
My Satellite Setup
Dishes: 80cm (5°W), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC w/ TBS6905 4x DVB-S2 PCIe tuner card running TVHeadend, Octagon SF8008 mini.
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: 57
Last edited:

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
1,260
Reaction score
1,152
Points
113
Age
31
My Satellite Setup
Dishes: 80cm (5°W), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC w/ TBS6905 4x DVB-S2 PCIe tuner card running TVHeadend, Octagon SF8008 mini.
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

Burnt out human
Joined
Oct 21, 2006
Messages
11,797
Reaction score
7,980
Points
113
My Satellite Setup
See signature
My Location
North Somerset
Nice! Don't forget to check HackTV project for analogue transmissions!
 

Captain Jack

Burnt out human
Joined
Oct 21, 2006
Messages
11,797
Reaction score
7,980
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
1,260
Reaction score
1,152
Points
113
Age
31
My Satellite Setup
Dishes: 80cm (5°W), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC w/ TBS6905 4x DVB-S2 PCIe tuner card running TVHeadend, Octagon SF8008 mini.
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

Burnt out human
Joined
Oct 21, 2006
Messages
11,797
Reaction score
7,980
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
1,260
Reaction score
1,152
Points
113
Age
31
My Satellite Setup
Dishes: 80cm (5°W), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC w/ TBS6905 4x DVB-S2 PCIe tuner card running TVHeadend, Octagon SF8008 mini.
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: 46

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
1,260
Reaction score
1,152
Points
113
Age
31
My Satellite Setup
Dishes: 80cm (5°W), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC w/ TBS6905 4x DVB-S2 PCIe tuner card running TVHeadend, Octagon SF8008 mini.
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: 32

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
1,260
Reaction score
1,152
Points
113
Age
31
My Satellite Setup
Dishes: 80cm (5°W), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC w/ TBS6905 4x DVB-S2 PCIe tuner card running TVHeadend, Octagon SF8008 mini.
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: 27

Channel Hopper

Suffering fools, so you don't have to.
Staff member
Joined
Jan 1, 2000
Messages
35,536
Reaction score
8,554
Points
113
Age
59
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
328
Reaction score
319
Points
63
Age
78
My Satellite Setup
1.2m CM dish with elevation jack, Supermount 1224 H-H rotator, Octagon SX88+, DR.HD D15, GT Media Combo, Ku PLL LNB, C Band: Titanium C1W-PLL, Ka Band: XMW R9216AF with FD9000 feedhorn, Inverto Saorsat LNB and Inverto Ka/Ku LNB . Zone 2 dish pointing at 28E with Octagon SF8008.
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
328
Reaction score
319
Points
63
Age
78
My Satellite Setup
1.2m CM dish with elevation jack, Supermount 1224 H-H rotator, Octagon SX88+, DR.HD D15, GT Media Combo, Ku PLL LNB, C Band: Titanium C1W-PLL, Ka Band: XMW R9216AF with FD9000 feedhorn, Inverto Saorsat LNB and Inverto Ka/Ku LNB . Zone 2 dish pointing at 28E with Octagon SF8008.
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
328
Reaction score
319
Points
63
Age
78
My Satellite Setup
1.2m CM dish with elevation jack, Supermount 1224 H-H rotator, Octagon SX88+, DR.HD D15, GT Media Combo, Ku PLL LNB, C Band: Titanium C1W-PLL, Ka Band: XMW R9216AF with FD9000 feedhorn, Inverto Saorsat LNB and Inverto Ka/Ku LNB . Zone 2 dish pointing at 28E with Octagon SF8008.
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
328
Reaction score
319
Points
63
Age
78
My Satellite Setup
1.2m CM dish with elevation jack, Supermount 1224 H-H rotator, Octagon SX88+, DR.HD D15, GT Media Combo, Ku PLL LNB, C Band: Titanium C1W-PLL, Ka Band: XMW R9216AF with FD9000 feedhorn, Inverto Saorsat LNB and Inverto Ka/Ku LNB . Zone 2 dish pointing at 28E with Octagon SF8008.
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?
 

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
1,260
Reaction score
1,152
Points
113
Age
31
My Satellite Setup
Dishes: 80cm (5°W), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC w/ TBS6905 4x DVB-S2 PCIe tuner card running TVHeadend, Octagon SF8008 mini.
My Location
Cheltenham
This week I've been using the HackRF on the other side, for receiving the DAB signal!

The two German national multiplexes on 23.5°E use DVB-GSE (12641.3V 1500 DVB-S2 8PSK 2/3), which is only decodable hardware-wise on some of the higher end professional-level DVB PC cards available. Those work because it's possible to dump out the raw BB frames (one of the levels below the MPEG-TS in regular DVB-S2, which for DVB-GSE instead contains network data). The DAB eti-tools then have a bbfedi2eti tool which extracts the DAB ETI frames from this baseband data.

This means, if you can get the raw IQ data using a software defined radio, it's then possible to use a software tool called leandvb to decode the BB frames in software, rather than using an expensive hardware device.


This even works with a £30 RTL-SDR stick, but the high frequency used on 23.5°E meant I had to use the HackRF instead, as the RTL-SDR only receives up to 1766MHz, not the 2041MHz (12641-10600) required. Older RTL-SDR sticks based on the E4000 chip do apparently work as they can receive up to around 2300MHz.

I dug out my old Skybox M3 which has LNB loop out, so that I can power the LNB and provide the 22kHz as required. Then after a bit of work on filtering the input from the HackRF into an old laptop running Linux down to a 2MHz wide sampled file, I successfully processed it with leandvb to BB frames.

This file then decoded with bbfedi2eti and gave me the two German national DAB+ muxes, DR Deutschland 5C on MIS1, and Antenne DE on MIS2. Pretty happy with this, without needing any new equipment. :)

Screenshot from 2022-12-16 17-32-10.png

Screenshot_20221216_174442.png

Screenshot_20221216_174523.png
 

ozumo

te wo tsuite
Staff member
Joined
May 26, 2020
Messages
5,197
Reaction score
2,595
Points
113
My Satellite Setup
Raven mk2 zone 2 x4, Channel Master: 90cm x3, 1.2m x2, 1.8m PF. CM polar mount x2, Az/El x3.
My Location
South Durham
Would this work with the NRK DAB feed on 1°W? I guess the bandwidth of a 5400SR transponder would be too much for an RTL-SDR.
 

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
1,260
Reaction score
1,152
Points
113
Age
31
My Satellite Setup
Dishes: 80cm (5°W), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC w/ TBS6905 4x DVB-S2 PCIe tuner card running TVHeadend, Octagon SF8008 mini.
My Location
Cheltenham
Would this work with the NRK DAB feed on 1°W? I guess the bandwidth of a 5400SR transponder would be too much for an RTL-SDR.
Yes, it should work the same. Would certainly be too wide for RTL-SDR, but the HackRF (up to 20MHz) and other SDRs should work. The Airspy mini for example at 6MHz would be just enough I think too, and the low frequency would make it in range (10720-9750=970MHz).

Would just need a snappy enough laptop/PC. I've been using a very low spec laptop (Celeron with 4GB RAM) for the German stuff which is SR 1500 using 2MHz IQ spectrum, and I'm getting the odd buffer overflow every 30 seconds or so on that where it struggles to process and write the data quite quick enough.

My 11th Gen Intel core i5 laptop with 8MHz RAM will record the 6MHz bandwidth from my Airspy mini to disk without a problem. I think my signal on 1°W is slightly too sketchy though.
 
Last edited:

Adam792

Specialist Contributor
Joined
Sep 5, 2009
Messages
1,260
Reaction score
1,152
Points
113
Age
31
My Satellite Setup
Dishes: 80cm (5°W), 80cm (30°W), 60cm Zone 2 (13°E/19.2°E/28.2°E)
Receivers: HTPC w/ TBS6905 4x DVB-S2 PCIe tuner card running TVHeadend, Octagon SF8008 mini.
My Location
Cheltenham
Some more decodes from Astra 3 23.5°E. I recorded an IQ file from the HackRF in Windows this time using SDR#, which let me get around 4m30 of data without any dropped data. leandvb had no trouble decoding this after a bit of filtering in GNURadio, and the decoded ETI was nice and clean. I got enough clean data for lots of the slideshow images to show up. :)
 

Attachments

  • 2022-12-27.png
    2022-12-27.png
    987.4 KB · Views: 16
  • Screenshot_20221227_214140.png
    Screenshot_20221227_214140.png
    253.8 KB · Views: 16
  • Screenshot_20221227_214227.png
    Screenshot_20221227_214227.png
    381.9 KB · Views: 15
  • Screenshot_20221227_214538.png
    Screenshot_20221227_214538.png
    119.7 KB · Views: 13
  • Screenshot_20221227_214824.png
    Screenshot_20221227_214824.png
    305.1 KB · Views: 14
Top