23.10.2018, 18:01
(Dieser Beitrag wurde zuletzt bearbeitet: 23.10.2018, 23:31 von Bernhard45.)
Nun ich habe ja schon den Pimoroni-Internetradio-Bausatz vorgestellt und auch eigene Umbauten mit Kleinrechnern von Raspberry, LeMaker und Hardkernel/Odroid gezeigt. Nahezu alle diese Radios habe ich nachträglich, also neben dem Internetradioempfang, auch den Empfang von DAB beigebracht. Oft verwende ich dazu direkt die Module der DAB-Chiphersteller, hin- und wieder aber auch die billigen SDR-Sticks für unter 10 Euro. Hier möchte ich kurz zeigen wie man damit ein DAB+ Radio realisieren kann.
Ein solcher Stick ist hier abgebildet.
Meine Buchempfehlungen unter den unten genannten Links erleichtern die Arbeit natürlich ungemein:
https://radio-bastler.de/forum/showthread.php?tid=11462
https://radio-bastler.de/forum/showthread.php?tid=11472
https://radio-bastler.de/forum/showthread.php?tid=11473
Sämtliche Dateien zum Einrichten des DAB+ Empfangs liegen in einem komprimierten Archiv was ich hier zum Download anbiete.
Dateien
In der Archivdatei sind drei Ordner vorhanden.
1. rtl-sdr : alles was wir für den oben genannten Stick benötigen (auch einige Testprogramme)
2. eti : Programme zum Erzeugen eines ETI-Datenstroms von einer „Luftschnittstelle“
3. dablin : Programm (für Konsole und GUI) das den ETI-Datenstrom demoduliert und an eine Soundkarte weiterreicht oder als PCM zur Weiterverarbeitung ausgibt
Achtung: Alle obige Programme benötigen auf den Zielsystemen noch Bibliotheken wie zum Beispiel FFTW3, libsndfile, libsamplerate und und und. Diese sind mal mehr oder auch weniger (oder gar nicht) auf den unterschiedlichen Systemen schon installiert. Wenn der Compiler also nach einer passenden Lib fragt und aussteigt, so muss diese dann natürlich nachinstalliert und der Compilierungsprozess neu gestartet werden. Wer meine Bücher oben gelesen hat, für den ist das kein Problem.
1. Im ersten Schritt compilieren und instalieren wir erstmal alles aus dem Ordner rtl-sdr
Wir wechseln also nach /rtl-sdr/build und starten den Prozess.
cd rtl-sdr/build
cmake ../
make
sudo make install
sudo ldconfig
Wenn wir den SDR-Stick später ohne Root-Rechte ansprechen wollen muss man dem cmake noch die
Option -DINSTALL_UDEV_RULES=ON mitgeben, also cmake ../ -DINSTALL_UDEV_RULES=ON
Wenn das alles erledigt ist, findet man in build/src die bekannten Tools wie
rtl_test
rtl_tcp
rtl_sdr usw.
An dieser Stelle sollte man mit dem gesteckten Stick schon sprechen können, mit rtl_adsb Transponderdaten von 1090 MHz empfangen oder mit rtl_fm auch UKW-Radio hören können.
rtl_test liefert schon eine Antwort mit verschiedenen technischen Daten zum SDR-Empfänger:
odroid@odroid64: rtl_test
Found 1 device(s):
0: Generic, RTL2832U, SN: 77771111153705700
Using device 0: Generic RTL2832U
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
[R82XX] PLL not locked!
Sampling at 2048000 S/s.
Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.
Reading samples in async mode...
^CSignal caught, exiting!
User cancel, exiting...
Samples per million lost (minimum): 0
2. Im zweiten Schritt bauen wir uns unser Werkzeug mit dem wir aus der Luftschnittstelle einen ETI-Datenstrom generieren.
Unterstützte Empfänger können neben den oben gezeigten DAB-Sticks(osmocom-Treiber!) auch
ein SDRplay, AIRSpy sein. Auch aufgezeichnete Rohdaten von Festplatten werden akzeptiert!
Wir wechseln also nach /eti/eti-stuff/eti-cmdline/build
cd /eti/eti-stuff/eti-cmdline/build
jetzt rufen wir cmake mit einem Parameter auf.
cmake .. -DXXX=ON
XXX kann dabei folgendes, nämlich die Empfängerschnittstelle sein:
RTLSDR, SDRPLAY, AIRSPY, RAWFILES, WAVFILES
Da wir mit dem RTLSDR empfangen wollen lautet der cmake Aufruf also so:
cmake .. -DRTLSDR=ON
Dann noch ein „make“ zum Compilieren.
make
sudo make install
Das Werkzeug was der Compiler nun erzeugt wird
eti-cmdline-XXX lauten, das XXX ist wieder die obige Bezeichnung der Zuspielquelle. In unserem Fall
lautet das übersetzte Werkzeug also eti-cmdline-rtlsdr und hat einige Aufrufoptionen wie man sehen kann:
$ eti-cmdline-rtlsdr -h
eti-cmdline-xxx options are
-D number time (in seconds) to look for a DAB ensemble
-B Band select DAB Band (default: BAND_III, or L_BAND)
-P number PPM correction
-C channel DAB channel to be used (5A ... 13F resp. LA ... LP)
-G Gain gain for device (range 1 .. 100)
-Q autogain for device (not all tuners support it!)
-F filename load samples from file
-E only for files: continue after EOF (replay file)
-O filename write output into a file (instead of stdout)
-S do not display quality messages while running
-R filename (if configured) dump to an *.sdr file
-h show options and quit
Soweit so klar!
3. Jetzt bauen wir uns unsere Demodulatorstufe mit der wir DAB (MP2) oder DAB+ (AAC-LC, HE-AAC, HE-AAC v2) „hörbar“ machen.
Wir wechseln also nach /dablin/build .
Zunächst installieren wir noch ein paar Bibliotheken falls diese noch nicht auf dem Zielsystem vorhanden sind.
sudo apt-get install libmpg123-dev libfaad-dev libsdl2-dev libgtkmm-3.0-dev
Achtung beim späteren Build-Prozess können auch andere und performantere Dekoder für schmalere Zielsystem installiert werden! Auch kann man sich entscheiden ob man den Sound „analog“, sprich zur Soundkarte schieben will oder ob einfach nur PCM-Samples erzeugt werden sollen mit denen man weitere Dinge anstellen kann. Wie das alles geht steht in den Docs, es wäre zu unübersichtlich hier jede Option durchzukauen.
Starten wir also den Buildprozess, wir befinden uns in /dablin/build
cmake ..
make
sudo make install
Als Ergebnis erhalten wir die beiden Demodulatoren „dablin“ für die Kommandozeile und
„dablin_gtk“ mit einer zusätzlichen grafischen Benutzeroberfläche. Für unsere Digitalradios brauchen wir im Prinzip nur dablin, die Benutzeroberfläche entwickeln wir ja selbst!
Rufen wir einfach mal dablin auf, was erhalten wir als Antwort:
odroid@odroid64:/usr/bin$ dablin
DABlin v1.9.0 - capital DAB experience
Plays a DAB/DAB+ audio service from a frame-aligned ETI-NI stream.
https://github.com/Opendigitalradio/dablin
SDLOutput: using SDL version '2.0.4'
ETISource: reading from 'stdin'
^C...DABlin exits...
Das Tool dablin wartet also auf einen ETI-Datenstrom von stdin, welche Aufrufparameter kann dablin haben? Schauen wir mal:
/usr/bin$ dablin -h
DABlin v1.9.0 - capital DAB experience
Plays a DAB/DAB+ audio service from a frame-aligned ETI-NI stream.
https://github.com/Opendigitalradio/dablin
Usage: dablin [OPTIONS] [file]
-h Show this help
-d <binary> Use DAB live source (using the mentioned binary)
-D <type> DAB live source type: "dab2eti" (default), "eti-cmdline"
-c <ch> Channel to be played (requires DAB live source)
-l <label> Label of the service to be played
-s <sid> ID of the service to be played
-x <scids> ID of the service component to be played (requires service ID)
-r <subchid> ID of the sub-channel (DAB) to be played
-R <subchid> ID of the sub-channel (DAB+) to be played
-g <gain> USB stick gain to pass to DAB live source (auto gain is default)
-p Output PCM to stdout instead of using SDL
-u Output untouched audio stream to stdout instead of using SDL
file Input file to be played (stdin, if not specified)
Wie man leicht erkennen kann, kann man mit -d eine „ETI-Quelle“ wählen, in unserem Fall also das
eti-cmdline-rtlsdr Programm , mit -D wird klar das eti-cmdline die Live Source sein wird.
In -c kann man einen DAB+ Kanal übergeben, nehmen wir doch einfach mal den Kanal „5C“, also den Nationalmux, mit -g kann man das Autogain des USB-Sticks übersteuern und mit -s die Service-ID des
Programmes im DAB Mux festlegen welches wir hören wollen.
Führen wir doch mal den folgenden Befehl aus und lauschen auf Kanal 5C:
dablin -d ./eti-cmdline-rtlsdr -D eti-cmdline -c 5C
DABlin v1.9.0 - capital DAB experience
Plays a DAB/DAB+ audio service from a frame-aligned ETI-NI stream.
https://github.com/Opendigitalradio/dablin
SDLOutput: using SDL version '2.0.4'
ETISource: playing from channel 5C (178352 kHz) via eti-cmdline (gain: auto)
tunedFrequency = 178352000
OK, functions seem to be loaded
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
samplerate set to 2048000
Supported gain values (29): there might be a DAB signal here
ensemble DR Deutschland detected
program ( 1) ERF Plus 1A64 is in the list
program ( 2) Dlf Nova D230 is in the list
program ( 3) Radio Horeb D01C is in the list
program ( 4) sunshine live 15DC is in the list
yes, here we go
Handling ensemble DR Deutschland until you quit
program ( 5) KLASSIK RADIO D75B is in the list
program ( 6) RADIO BOB! 15DD is in the list
program ( 7) Dlf D210 is in the list
program ( 8) Absolut relax 17FA is in the list
program ( 9) SCHLAGERPARADIES 10C3 is in the list
program (10) ENERGY DIGITAL 1A45 is in the list
program (11) Schwarzwaldradio 100D is in the list
program (12) DRadio DokDeb D240 is in the list
FICDecoder: SId 0xD75B: audio service (SubChId 6, DAB+, primary)
FICDecoder: SId 0x15DC: audio service (SubChId 21, DAB+, primary)
FICDecoder: SId 0xD01C: audio service (SubChId 5, DAB+, primary)
FICDecoder: SId 0x1A64: audio service (SubChId 2, DAB+, primary)
FICDecoder: SId 0xD210, SCIdS 1: service component label 'DlfTXT'
FICDecoder: SId 0x100D, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0x1A45, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0x10C3, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0x17FA, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SubChId 33: start 468 CUs, size 12 CUs, PL EEP 3-A = 16 kBit/s
FICDecoder: SubChId 31: start 456 CUs, size 12 CUs, PL EEP 3-A = 16 kBit/s
FICDecoder: SubChId 30: start 444 CUs, size 12 CUs, PL EEP 3-A = 16 kBit/s
FICDecoder: SubChId 22: start 390 CUs, size 54 CUs, PL EEP 3-A = 72 kBit/s
FICDecoder: SubChId 21: start 336 CUs, size 54 CUs, PL EEP 3-A = 72 kBit/s
FICDecoder: SubChId 20: start 294 CUs, size 42 CUs, PL EEP 2-B = 64 kBit/s
FICDecoder: SubChId 7: start 252 CUs, size 42 CUs, PL EEP 2-B = 64 kBit/s
FICDecoder: SId 0xD240: programme service label 'DRadio DokDeb'
FICDecoder: SubChId 6: start 198 CUs, size 54 CUs, PL EEP 3-A = 72 kBit/s
FICDecoder: SubChId 5: start 162 CUs, size 36 CUs, PL EEP 3-A = 48 kBit/s
FICDecoder: SubChId 4: start 108 CUs, size 54 CUs, PL EEP 3-A = 72 kBit/s
FICDecoder: SubChId 3: start 54 CUs, size 54 CUs, PL EEP 3-A = 72 kBit/s
FICDecoder: SubChId 2: start 0 CUs, size 54 CUs, PL EEP 3-A = 72 kBit/s
FICDecoder: SId 0xD210: audio service (SubChId 10, DAB+, primary)
FICDecoder: SId 0xD220: audio service (SubChId 11, DAB+, primary)
FICDecoder: SId 0xD230: audio service (SubChId 12, DAB+, primary)
FICDecoder: SId 0xD240: audio service (SubChId 13, DAB+, primary)
FICDecoder: SubChId 10: start 480 CUs, size 104 CUs, PL EEP 2-A = 104 kBit/s
FICDecoder: SubChId 11: start 584 CUs, size 112 CUs, PL EEP 2-A = 112 kBit/s
FICDecoder: SubChId 12: start 696 CUs, size 104 CUs, PL EEP 2-A = 104 kBit/s
FICDecoder: SubChId 13: start 800 CUs, size 36 CUs, PL EEP 3-A = 48 kBit/s
FICDecoder: SubChId 14: start 836 CUs, size 24 CUs, PL EEP 3-A = 32 kBit/s
FICDecoder: SId 0x100D: audio service (SubChId 7, DAB+, primary)
FICDecoder: SId 0x1A45: audio service (SubChId 4, DAB+, primary)
FICDecoder: SId 0x10C3: audio service (SubChId 20, DAB+, primary)
FICDecoder: SId 0x17FA: audio service (SubChId 3, DAB+, primary)
FICDecoder: SId 0x15DD: audio service (SubChId 22, DAB+, primary)
FICDecoder: SId 0x15DD, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0xD75B, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0x1A64, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0x15DC, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0xD75B, SCIdS 0: MSC service component (SubChId 6)
FICDecoder: SId 0xD240, SCIdS 0: service component label 'DRadio DokDeb'
FICDecoder: SubChId 20: language 'German'
FICDecoder: SId 0xD240, SCIdS 1: service component label 'DDokDeb Text'
FICDecoder: SId 0xD240, SCIdS 0: MSC service component (SubChId 13)
FICDecoder: SId 0xD230, SCIdS 0: MSC service component (SubChId 12)
FICDecoder: SId 0xD210, SCIdS 0: MSC service component (SubChId 10)
FICDecoder: SId 0xD220, SCIdS 0: MSC service component (SubChId 11)
FICDecoder: SId 0xD220, SCIdS 0: Slideshow (2 bytes UA data)
program (13) Dlf Kultur D220 is in the list
FICDecoder: EId 0x10BC: ensemble label 'DR Deutschland'
FICDecoder: SId 0x15DD, SCIdS 0: MSC service component (SubChId 22)
FICDecoder: SId 0xD220: programme service label 'Dlf Kultur'
FICDecoder: SId 0x1A64: programme service label 'ERF Plus'
FICDecoder: SId 0x17FA, SCIdS 0: MSC service component (SubChId 3)
FICDecoder: SId 0x1A64, SCIdS 0: MSC service component (SubChId 2)
FICDecoder: SId 0xD01C, SCIdS 0: MSC service component (SubChId 5)
FICDecoder: SId 0xD01C: programme service label 'Radio Horeb'
FICDecoder: SId 0x10C3, SCIdS 0: MSC service component (SubChId 20)
FICDecoder: SId 0xD220, SCIdS 0: service component label 'Dlf Kultur'
FICDecoder: SId 0x15DC, SCIdS 0: MSC service component (SubChId 21)
FICDecoder: SId 0xD220, SCIdS 1: service component label 'DlfkTXT'
(FIB) FICDecoder: SId 0xD75B: programme service label 'KLASSIK RADIO'
FICDecoder: SId 0x100D, SCIdS 0: MSC service component (SubChId 7)
FICDecoder: SId 0x15DD: programme service label 'RADIO BOB!'
FICDecoder: SId 0x17FA: programme service label 'Absolut relax'
FICDecoder: SId 0x10C3: programme service label 'SCHLAGERPARADIES'
FICDecoder: SId 0xD230: programme service label 'Dlf Nova'
FICDecoder: SId 0x1A45: programme service label 'ENERGY DIGITAL'
FICDecoder: SId 0x100D: programme service label 'Schwarzwaldradio'
FICDecoder: SId 0xD230, SCIdS 1: service component label 'DlfnTXT'
FICDecoder: SId 0xD210: programme service label 'Dlf'
FICDecoder: SId 0xD210, SCIdS 0: service component label 'Dlf'
FICDecoder: SId 0x15DC: programme service label 'sunshine live'
FICDecoder: SId 0x1A45, SCIdS 0: MSC service component (SubChId 4)
FICDecoder: SId 0xD210, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0xD230, SCIdS 0: Slideshow (2 bytes UA data)
^C
Signal 2 caught, terminating!
...DABlin exits...
ofdmProcessor is shutting down
terminating
Terminated
Ahh! Nun sehen wir was sich im 5C alles verbirgt. Welche Programme mit welchen Service-Ids und
Datenraten usw.
Wollen wir mal die Service-ID 0x100D, also das Schwarzwaldradio hören, ändern wir unseren Befehl oben ab:
sudo dablin -d ./eti-cmdline-rtlsdr -D eti-cmdline -c 5C -s 0x100D
Und schon tönt das Schwarzwaldradio aus unserem Monitor. Beenden tun wir das ganze wie immer in der Konsole mit Strg + c.
Nun steht unserem DAB+ Eigenbauradio eigentlich nichts mehr im Wege.
Abschließend ein Bild des „Demodulators“ mit der mitgelieferten grafischen Oberfläche, ändern wir einfach dablin durch dablin_gtk, dann springt uns auf dem Unix-Desktop gleich ein fertiges DAB+ Radioprogramm, eingestellt auf Schwarwaldradio entgegen.
Eigentlich doch alles ganz einfach und mit genau solchen Werkzeugen können wir auch einen DAB+ Sender aufbauen.
Viele Grüße
Bernhard
Ein solcher Stick ist hier abgebildet.
Meine Buchempfehlungen unter den unten genannten Links erleichtern die Arbeit natürlich ungemein:
https://radio-bastler.de/forum/showthread.php?tid=11462
https://radio-bastler.de/forum/showthread.php?tid=11472
https://radio-bastler.de/forum/showthread.php?tid=11473
Sämtliche Dateien zum Einrichten des DAB+ Empfangs liegen in einem komprimierten Archiv was ich hier zum Download anbiete.
Dateien
In der Archivdatei sind drei Ordner vorhanden.
1. rtl-sdr : alles was wir für den oben genannten Stick benötigen (auch einige Testprogramme)
2. eti : Programme zum Erzeugen eines ETI-Datenstroms von einer „Luftschnittstelle“
3. dablin : Programm (für Konsole und GUI) das den ETI-Datenstrom demoduliert und an eine Soundkarte weiterreicht oder als PCM zur Weiterverarbeitung ausgibt
Achtung: Alle obige Programme benötigen auf den Zielsystemen noch Bibliotheken wie zum Beispiel FFTW3, libsndfile, libsamplerate und und und. Diese sind mal mehr oder auch weniger (oder gar nicht) auf den unterschiedlichen Systemen schon installiert. Wenn der Compiler also nach einer passenden Lib fragt und aussteigt, so muss diese dann natürlich nachinstalliert und der Compilierungsprozess neu gestartet werden. Wer meine Bücher oben gelesen hat, für den ist das kein Problem.
1. Im ersten Schritt compilieren und instalieren wir erstmal alles aus dem Ordner rtl-sdr
Wir wechseln also nach /rtl-sdr/build und starten den Prozess.
cd rtl-sdr/build
cmake ../
make
sudo make install
sudo ldconfig
Wenn wir den SDR-Stick später ohne Root-Rechte ansprechen wollen muss man dem cmake noch die
Option -DINSTALL_UDEV_RULES=ON mitgeben, also cmake ../ -DINSTALL_UDEV_RULES=ON
Wenn das alles erledigt ist, findet man in build/src die bekannten Tools wie
rtl_test
rtl_tcp
rtl_sdr usw.
An dieser Stelle sollte man mit dem gesteckten Stick schon sprechen können, mit rtl_adsb Transponderdaten von 1090 MHz empfangen oder mit rtl_fm auch UKW-Radio hören können.
rtl_test liefert schon eine Antwort mit verschiedenen technischen Daten zum SDR-Empfänger:
odroid@odroid64: rtl_test
Found 1 device(s):
0: Generic, RTL2832U, SN: 77771111153705700
Using device 0: Generic RTL2832U
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
[R82XX] PLL not locked!
Sampling at 2048000 S/s.
Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.
Reading samples in async mode...
^CSignal caught, exiting!
User cancel, exiting...
Samples per million lost (minimum): 0
2. Im zweiten Schritt bauen wir uns unser Werkzeug mit dem wir aus der Luftschnittstelle einen ETI-Datenstrom generieren.
Unterstützte Empfänger können neben den oben gezeigten DAB-Sticks(osmocom-Treiber!) auch
ein SDRplay, AIRSpy sein. Auch aufgezeichnete Rohdaten von Festplatten werden akzeptiert!
Wir wechseln also nach /eti/eti-stuff/eti-cmdline/build
cd /eti/eti-stuff/eti-cmdline/build
jetzt rufen wir cmake mit einem Parameter auf.
cmake .. -DXXX=ON
XXX kann dabei folgendes, nämlich die Empfängerschnittstelle sein:
RTLSDR, SDRPLAY, AIRSPY, RAWFILES, WAVFILES
Da wir mit dem RTLSDR empfangen wollen lautet der cmake Aufruf also so:
cmake .. -DRTLSDR=ON
Dann noch ein „make“ zum Compilieren.
make
sudo make install
Das Werkzeug was der Compiler nun erzeugt wird
eti-cmdline-XXX lauten, das XXX ist wieder die obige Bezeichnung der Zuspielquelle. In unserem Fall
lautet das übersetzte Werkzeug also eti-cmdline-rtlsdr und hat einige Aufrufoptionen wie man sehen kann:
$ eti-cmdline-rtlsdr -h
eti-cmdline-xxx options are
-D number time (in seconds) to look for a DAB ensemble
-B Band select DAB Band (default: BAND_III, or L_BAND)
-P number PPM correction
-C channel DAB channel to be used (5A ... 13F resp. LA ... LP)
-G Gain gain for device (range 1 .. 100)
-Q autogain for device (not all tuners support it!)
-F filename load samples from file
-E only for files: continue after EOF (replay file)
-O filename write output into a file (instead of stdout)
-S do not display quality messages while running
-R filename (if configured) dump to an *.sdr file
-h show options and quit
Soweit so klar!
3. Jetzt bauen wir uns unsere Demodulatorstufe mit der wir DAB (MP2) oder DAB+ (AAC-LC, HE-AAC, HE-AAC v2) „hörbar“ machen.
Wir wechseln also nach /dablin/build .
Zunächst installieren wir noch ein paar Bibliotheken falls diese noch nicht auf dem Zielsystem vorhanden sind.
sudo apt-get install libmpg123-dev libfaad-dev libsdl2-dev libgtkmm-3.0-dev
Achtung beim späteren Build-Prozess können auch andere und performantere Dekoder für schmalere Zielsystem installiert werden! Auch kann man sich entscheiden ob man den Sound „analog“, sprich zur Soundkarte schieben will oder ob einfach nur PCM-Samples erzeugt werden sollen mit denen man weitere Dinge anstellen kann. Wie das alles geht steht in den Docs, es wäre zu unübersichtlich hier jede Option durchzukauen.
Starten wir also den Buildprozess, wir befinden uns in /dablin/build
cmake ..
make
sudo make install
Als Ergebnis erhalten wir die beiden Demodulatoren „dablin“ für die Kommandozeile und
„dablin_gtk“ mit einer zusätzlichen grafischen Benutzeroberfläche. Für unsere Digitalradios brauchen wir im Prinzip nur dablin, die Benutzeroberfläche entwickeln wir ja selbst!
Rufen wir einfach mal dablin auf, was erhalten wir als Antwort:
odroid@odroid64:/usr/bin$ dablin
DABlin v1.9.0 - capital DAB experience
Plays a DAB/DAB+ audio service from a frame-aligned ETI-NI stream.
https://github.com/Opendigitalradio/dablin
SDLOutput: using SDL version '2.0.4'
ETISource: reading from 'stdin'
^C...DABlin exits...
Das Tool dablin wartet also auf einen ETI-Datenstrom von stdin, welche Aufrufparameter kann dablin haben? Schauen wir mal:
/usr/bin$ dablin -h
DABlin v1.9.0 - capital DAB experience
Plays a DAB/DAB+ audio service from a frame-aligned ETI-NI stream.
https://github.com/Opendigitalradio/dablin
Usage: dablin [OPTIONS] [file]
-h Show this help
-d <binary> Use DAB live source (using the mentioned binary)
-D <type> DAB live source type: "dab2eti" (default), "eti-cmdline"
-c <ch> Channel to be played (requires DAB live source)
-l <label> Label of the service to be played
-s <sid> ID of the service to be played
-x <scids> ID of the service component to be played (requires service ID)
-r <subchid> ID of the sub-channel (DAB) to be played
-R <subchid> ID of the sub-channel (DAB+) to be played
-g <gain> USB stick gain to pass to DAB live source (auto gain is default)
-p Output PCM to stdout instead of using SDL
-u Output untouched audio stream to stdout instead of using SDL
file Input file to be played (stdin, if not specified)
Wie man leicht erkennen kann, kann man mit -d eine „ETI-Quelle“ wählen, in unserem Fall also das
eti-cmdline-rtlsdr Programm , mit -D wird klar das eti-cmdline die Live Source sein wird.
In -c kann man einen DAB+ Kanal übergeben, nehmen wir doch einfach mal den Kanal „5C“, also den Nationalmux, mit -g kann man das Autogain des USB-Sticks übersteuern und mit -s die Service-ID des
Programmes im DAB Mux festlegen welches wir hören wollen.
Führen wir doch mal den folgenden Befehl aus und lauschen auf Kanal 5C:
dablin -d ./eti-cmdline-rtlsdr -D eti-cmdline -c 5C
DABlin v1.9.0 - capital DAB experience
Plays a DAB/DAB+ audio service from a frame-aligned ETI-NI stream.
https://github.com/Opendigitalradio/dablin
SDLOutput: using SDL version '2.0.4'
ETISource: playing from channel 5C (178352 kHz) via eti-cmdline (gain: auto)
tunedFrequency = 178352000
OK, functions seem to be loaded
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
samplerate set to 2048000
Supported gain values (29): there might be a DAB signal here
ensemble DR Deutschland detected
program ( 1) ERF Plus 1A64 is in the list
program ( 2) Dlf Nova D230 is in the list
program ( 3) Radio Horeb D01C is in the list
program ( 4) sunshine live 15DC is in the list
yes, here we go
Handling ensemble DR Deutschland until you quit
program ( 5) KLASSIK RADIO D75B is in the list
program ( 6) RADIO BOB! 15DD is in the list
program ( 7) Dlf D210 is in the list
program ( 8) Absolut relax 17FA is in the list
program ( 9) SCHLAGERPARADIES 10C3 is in the list
program (10) ENERGY DIGITAL 1A45 is in the list
program (11) Schwarzwaldradio 100D is in the list
program (12) DRadio DokDeb D240 is in the list
FICDecoder: SId 0xD75B: audio service (SubChId 6, DAB+, primary)
FICDecoder: SId 0x15DC: audio service (SubChId 21, DAB+, primary)
FICDecoder: SId 0xD01C: audio service (SubChId 5, DAB+, primary)
FICDecoder: SId 0x1A64: audio service (SubChId 2, DAB+, primary)
FICDecoder: SId 0xD210, SCIdS 1: service component label 'DlfTXT'
FICDecoder: SId 0x100D, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0x1A45, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0x10C3, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0x17FA, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SubChId 33: start 468 CUs, size 12 CUs, PL EEP 3-A = 16 kBit/s
FICDecoder: SubChId 31: start 456 CUs, size 12 CUs, PL EEP 3-A = 16 kBit/s
FICDecoder: SubChId 30: start 444 CUs, size 12 CUs, PL EEP 3-A = 16 kBit/s
FICDecoder: SubChId 22: start 390 CUs, size 54 CUs, PL EEP 3-A = 72 kBit/s
FICDecoder: SubChId 21: start 336 CUs, size 54 CUs, PL EEP 3-A = 72 kBit/s
FICDecoder: SubChId 20: start 294 CUs, size 42 CUs, PL EEP 2-B = 64 kBit/s
FICDecoder: SubChId 7: start 252 CUs, size 42 CUs, PL EEP 2-B = 64 kBit/s
FICDecoder: SId 0xD240: programme service label 'DRadio DokDeb'
FICDecoder: SubChId 6: start 198 CUs, size 54 CUs, PL EEP 3-A = 72 kBit/s
FICDecoder: SubChId 5: start 162 CUs, size 36 CUs, PL EEP 3-A = 48 kBit/s
FICDecoder: SubChId 4: start 108 CUs, size 54 CUs, PL EEP 3-A = 72 kBit/s
FICDecoder: SubChId 3: start 54 CUs, size 54 CUs, PL EEP 3-A = 72 kBit/s
FICDecoder: SubChId 2: start 0 CUs, size 54 CUs, PL EEP 3-A = 72 kBit/s
FICDecoder: SId 0xD210: audio service (SubChId 10, DAB+, primary)
FICDecoder: SId 0xD220: audio service (SubChId 11, DAB+, primary)
FICDecoder: SId 0xD230: audio service (SubChId 12, DAB+, primary)
FICDecoder: SId 0xD240: audio service (SubChId 13, DAB+, primary)
FICDecoder: SubChId 10: start 480 CUs, size 104 CUs, PL EEP 2-A = 104 kBit/s
FICDecoder: SubChId 11: start 584 CUs, size 112 CUs, PL EEP 2-A = 112 kBit/s
FICDecoder: SubChId 12: start 696 CUs, size 104 CUs, PL EEP 2-A = 104 kBit/s
FICDecoder: SubChId 13: start 800 CUs, size 36 CUs, PL EEP 3-A = 48 kBit/s
FICDecoder: SubChId 14: start 836 CUs, size 24 CUs, PL EEP 3-A = 32 kBit/s
FICDecoder: SId 0x100D: audio service (SubChId 7, DAB+, primary)
FICDecoder: SId 0x1A45: audio service (SubChId 4, DAB+, primary)
FICDecoder: SId 0x10C3: audio service (SubChId 20, DAB+, primary)
FICDecoder: SId 0x17FA: audio service (SubChId 3, DAB+, primary)
FICDecoder: SId 0x15DD: audio service (SubChId 22, DAB+, primary)
FICDecoder: SId 0x15DD, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0xD75B, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0x1A64, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0x15DC, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0xD75B, SCIdS 0: MSC service component (SubChId 6)
FICDecoder: SId 0xD240, SCIdS 0: service component label 'DRadio DokDeb'
FICDecoder: SubChId 20: language 'German'
FICDecoder: SId 0xD240, SCIdS 1: service component label 'DDokDeb Text'
FICDecoder: SId 0xD240, SCIdS 0: MSC service component (SubChId 13)
FICDecoder: SId 0xD230, SCIdS 0: MSC service component (SubChId 12)
FICDecoder: SId 0xD210, SCIdS 0: MSC service component (SubChId 10)
FICDecoder: SId 0xD220, SCIdS 0: MSC service component (SubChId 11)
FICDecoder: SId 0xD220, SCIdS 0: Slideshow (2 bytes UA data)
program (13) Dlf Kultur D220 is in the list
FICDecoder: EId 0x10BC: ensemble label 'DR Deutschland'
FICDecoder: SId 0x15DD, SCIdS 0: MSC service component (SubChId 22)
FICDecoder: SId 0xD220: programme service label 'Dlf Kultur'
FICDecoder: SId 0x1A64: programme service label 'ERF Plus'
FICDecoder: SId 0x17FA, SCIdS 0: MSC service component (SubChId 3)
FICDecoder: SId 0x1A64, SCIdS 0: MSC service component (SubChId 2)
FICDecoder: SId 0xD01C, SCIdS 0: MSC service component (SubChId 5)
FICDecoder: SId 0xD01C: programme service label 'Radio Horeb'
FICDecoder: SId 0x10C3, SCIdS 0: MSC service component (SubChId 20)
FICDecoder: SId 0xD220, SCIdS 0: service component label 'Dlf Kultur'
FICDecoder: SId 0x15DC, SCIdS 0: MSC service component (SubChId 21)
FICDecoder: SId 0xD220, SCIdS 1: service component label 'DlfkTXT'
(FIB) FICDecoder: SId 0xD75B: programme service label 'KLASSIK RADIO'
FICDecoder: SId 0x100D, SCIdS 0: MSC service component (SubChId 7)
FICDecoder: SId 0x15DD: programme service label 'RADIO BOB!'
FICDecoder: SId 0x17FA: programme service label 'Absolut relax'
FICDecoder: SId 0x10C3: programme service label 'SCHLAGERPARADIES'
FICDecoder: SId 0xD230: programme service label 'Dlf Nova'
FICDecoder: SId 0x1A45: programme service label 'ENERGY DIGITAL'
FICDecoder: SId 0x100D: programme service label 'Schwarzwaldradio'
FICDecoder: SId 0xD230, SCIdS 1: service component label 'DlfnTXT'
FICDecoder: SId 0xD210: programme service label 'Dlf'
FICDecoder: SId 0xD210, SCIdS 0: service component label 'Dlf'
FICDecoder: SId 0x15DC: programme service label 'sunshine live'
FICDecoder: SId 0x1A45, SCIdS 0: MSC service component (SubChId 4)
FICDecoder: SId 0xD210, SCIdS 0: Slideshow (2 bytes UA data)
FICDecoder: SId 0xD230, SCIdS 0: Slideshow (2 bytes UA data)
^C
Signal 2 caught, terminating!
...DABlin exits...
ofdmProcessor is shutting down
terminating
Terminated
Ahh! Nun sehen wir was sich im 5C alles verbirgt. Welche Programme mit welchen Service-Ids und
Datenraten usw.
Wollen wir mal die Service-ID 0x100D, also das Schwarzwaldradio hören, ändern wir unseren Befehl oben ab:
sudo dablin -d ./eti-cmdline-rtlsdr -D eti-cmdline -c 5C -s 0x100D
Und schon tönt das Schwarzwaldradio aus unserem Monitor. Beenden tun wir das ganze wie immer in der Konsole mit Strg + c.
Nun steht unserem DAB+ Eigenbauradio eigentlich nichts mehr im Wege.
Abschließend ein Bild des „Demodulators“ mit der mitgelieferten grafischen Oberfläche, ändern wir einfach dablin durch dablin_gtk, dann springt uns auf dem Unix-Desktop gleich ein fertiges DAB+ Radioprogramm, eingestellt auf Schwarwaldradio entgegen.
Eigentlich doch alles ganz einfach und mit genau solchen Werkzeugen können wir auch einen DAB+ Sender aufbauen.
Viele Grüße
Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung.
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")