Digital Radio Broadcasting Using LimeSDR and ODR Tools — PART 4

In the previous part of this series, you got to install all the ODR-mmbTools tools ready to start broadcasting of your first DAB/DAB+ signals.

In this part, you will learn how to configure and setup all the tools to work with LimeSDR hardware.

The image below shows all the hardware connected to my computer with the optional RTL-SDR also present:

LimeSDR Transmitter and RTL-SDR Receiver Connected to the same computer

Recap the following block diagram to understand how we will link all the tools together:

As the above diagram shows, you will have to configure one tool after another separately.

You can start to configure from right to left or left to right. In this guide you will start from ODR-DabMod up to ODR-PadEnc.

Create a new folder withing ODR folder and call it configs . This file will hold all configuration files for the tools.

$ cd ~/ODR
$ mkdir configs
$ cd configs

Then you will create all the configuration files within this file.

To streamline the setup of all tools, create a new command window for running each tool. This will help you to see and troubleshoot any communication problem between the tools.

ODR-DABMOD

ODR-DabMod will communicate with the LimeSDR Hardware through SoapySDR drivers.

So ensure that your LimeSDR can communicate with your computer, plug it in to your computer using the USB port and run the following command:

$ SoapySDRUtil --find

The above command will list your LimeSDR device and its information.

Its a good practice to upgrade the LimeSDR firmware if available by running the following command:

$ LimeUtil --update

After the update is completed, then you will be sure that, all is well and LimeSDR can now be configured to output DAB/DAB+ signal through ODR-DabMod.

Create a configuration file named dabmod.ini which will be used to setup and initialize LimeSDR for DAB/DAB+ broadcasting using the following commands:

$ cd ~/ODR/configs
$ nano dabmod.ini

Above i have used nano editor but you can use any other editor of your choice. Paste the following configuration into it:

; Sample configuration file for ODR-DabMod
[remotecontrol]
telnet=1
telnetport=2121
zmqctrl=1
zmqctrlendpoint=tcp://127.0.0.1:9400
[log]
syslog=0
filelog=0
filename=odr-dabmod.log
[input]
transport=zeromq
source=tcp://localhost:9100
max_frames_queued=100
[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
polycoeffile=polyCoefs
[output]
output=soapysdr
[soapyoutput]
device=
master_clock_rate=32768000
txgain=40
channel=5C
[delaymanagement]
synchronous=0
mutenotimestamps=0
offset=0.002
[tii]
enable=0
comb=1
pattern=11
old_variant=0

Use the keyboard shortcuts CTRL+o followed by CTRL+x to save the file and close the editor.

This configuration file will configure ODR-DabMod and set the output to be through SoapySDR, set the frequency through the channel=5C variable. Note that 5C is one of the channel in DAB/DAB+ Band III frequency.

All the items in that configuration file are explained here:

View that file for any clarification of the variables.

Now we can start our broadcasting using the following command:

$ sudo odr-dabmod -C dabmod.ini

The command needs to be run with root privileges since it accesses hardware device.

If there is no error, you will now be transmitting on channel 5C of the DAB/DAB+ band III.

Nothing will be picked up yet since it is just a carrier without data. We need to add the data through ODR-DabMux tool.

ODR-DABMUX

This is where the multiplex is defined and individual DAB/DAB+ transmission stations are defined.

We are going to define 3 stations. I will use example from my local radio stations for this guide.

As usual, open a new terminal, while leaving the one with ODR-DabMod working and issue the following commands in the new terminal:

$ cd ~/ODR/configs
$ nano dabmux.mux

The above command will create a file in the configs folder with a name dabmux.mux which is our configuration file for ODR-DabMux operation.

Now, paste the following into the nano editor window opened from above and save it:

general {
dabmode 1
nbframes 0
tist true
}
remotecontrol { telnetport 0 }
ensemble {
id 0x4fff
ecc 0xec
local-time-offset auto
international-table 1
label "DAB+ Radio Test"
shortlabel "DAB+Test"
}
services {
srv-p1 { label "EA Radio" }
srv-p2 { label "Choice FM" }
srv-p3 { label "Clouds FM" }
}
subchannels {
sub-p1 {
; MPEG
type dabplus
bitrate 120
id 1
protection 3

inputfile "tcp://*:9001"
zmq-buffer 40
zmq-prebuffering 20
}

sub-p2 {
; MPEG
type dabplus
bitrate 120
id 2
protection 3

inputfile "tcp://*:9002"
zmq-buffer 40
zmq-prebuffering 20
}

sub-p3 {
; MPEG
type dabplus
bitrate 120
id 3
protection 3

inputfile "tcp://*:9003"
zmq-buffer 40
zmq-prebuffering 20
}
}
components {
comp-p1 {
label Prog1
service srv-p1
subchannel sub-p1
}

comp-p2 {
label Prog2
service srv-p2
subchannel sub-p2
}

comp-p3 {
label Prog3
service srv-p3
subchannel sub-p3
}
}
outputs { 
zeromq {
; Listen on all interfaces, on port 9100
endpoint "tcp://*:9100"
allowmetadata true
}
throttle "simul://"
}

Use the keyboard shortcuts CTRL+o followed by CTRL+x to save the file and close the editor.

As usual, explanation on each parameter of the above file can be found by reading the example mux configuration file at:

Now you can use the confiugration file to run ODR-DabMux and generate the stations as follows:

$ odr-dabmux dabmux.mux

You are now broadcasting 3 empty DAB+ stations on your setup.

Next, we will add the audio stream to the stations using ODR-AudioEnc.

ODR-AUDIOENC

From the ODR-DabMux above, you can see that, the stations are receiving inputs from any interface with tcp ports 9001, 9002 and 9003.

You will have to send your inputs to these ports accordingly.

To do that, you will need create 3 separate windows for each stations while leaving the window with ODR-DabMod and ODR-DabMux still open and running since all tools are independent of each other.

On the first window, run the following command:

$ odr-audioenc -v "https://eatv.radioca.st/stream" -r 48000 -c 2 -o "tcp://localhost:9001" -l -b 120

The above command will start ODR-AudioEnc with VLC support which opens the stream and set sample rate to 48KHz.

It produces an output to ZeroMQ tunnel on port 9001of bit rate equal to 120. The bit rate must be the same as that defined for each station in ODR-DabMux configuration file or you will get bit rate mismatch error.

The other two channels audio data can be created as follows:

$ odr-audioenc -v "http://51.255.235.165:5362/stream" -r 48000 -c 2 -o "tcp://localhost:9002" -l -b 120

The above will output the stream on ZeroMQ port 9002.

$ odr-audioenc -v "http://eu6.fastcast4u.com:5306/listen.pls" -r 48000 -c 2 -o "tcp://localhost:9003" -l -b 120

And the above will output the stream on ZeroMQ port 9003.


The following image shows all the windows open and broadcasting DAB+ Radio using 3 stations:

Broadcasting 3 Stations Using ODR-mmbTools and LimeSDR

You are now transmitting three DAB+ stations using your LimeSDR.


You can listen the broadcasted output using any DAB+ capable radio you have.

If you don’t have one, but you have an RTL-SDR dongle lying around, then you can use it to tune to the signals using any DAB+ software receiver you have, but Welle.io is one of the fantastic DAB+ receiver available.

The Welle.io software can be found at the following website:

Install it using your package manager if available, plugin the RTL-SDR to , scan the channels in Welle.io and scan for new channels.

Welle.io Software Redio Scanning For DAB+ Channels

When scanning is complete, then you can see all the detected stations and tune to one of them as below:

Welle.io Software Playing One of the Station on foreground while the ODR-mmbTools working on the background.

Enjoy your amazing DAB+ broadcasting as you wish.