zur Startseite

Druckausgabe von https://privat.albicker.org
Iveco Daily 4x4, Hunde und multithematisches Blog

Media-PC: Der Empfang von DAB-Sendern

veröffentlicht am 13.08.2023 mit 1229 Worten - Lesezeit: 6 Minute(n) in * HARDWARE * MEDIEN * PROGRAMME *

Inhaltsverzeichnis

 

Vor zwei Jahren habe ich den Aufbau meines damals aktuellen Mediencenter-PC mit VDR und Kodi unter Debian Linux beschrieben. Heute geht es um eine Erweiterung der Funktionalität.

RTL2832 - Basis-Hardware

Der RTL2832 (Datenblatt) ist ein von der Realtek Corporation hergestellter IC zur Demodulation von DVB-T-Signalen (digitales Fernsehen) und deren Weiterleitung an einen Host-Computer über den USB-Bus. Er verfügt über einen zusätzlichen Modus, der den Empfang von allerhand anderen Signalen, z. B. DAB- und UKW-Radiosignalen, ermöglicht, indem er I/Q-Samples aufnimmt und sie zur Demodulation und Wiedergabe an den Host-Computer weiterleitet.

Die Tuner-Hardware

Basierend auf dem genannten Chip sind aus Fernost viele unterschiedliche Tuner zu günstigen Preisen erhältlich - hier ein Beispiel dazu, das mir kürzlich unter die Finger gekommen ist:

Links zu sehen die SMA-Buchse für den Antennenanschluss, rechts der USB-Ausgang zum PC.

Inbetriebnahme - Tuner anschließen

Regelmäßige Leser dieser Seiten wissen, daß derzeit alle meine Rechner auf Basis des jeweils aktuellen Debian Linux laufen. Des Weiteren arbeite ich vom Schreibtisch aus - das ist viel bequemer, als mich auf dem Sofa mit einer tragbaren Tastatur rumzuquälen und auf Terminal-Ausgaben auf dem entfernten Fernseher zu gucken. Dafür habe ich mich per ssh auf den Media-PC eingeloggt und bin dort in den root-Account gewechselt.

Im Root-Terminal prüfe ich zunächst, ob der Tuner am USB-Anschluss zu finden ist - die Angabe | grep [xyz] filtert die Ausgabe jeweils auf die gesuchten Angaben.

root@media:~# lsusb | grep RTL
Bus 001 Device 006: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T

Das sieht gut aus, eine sehr ausführliche Liste der Angaben zum Tuner läßt sich so ausgeben (hier auf die interessanten Angaben gekürzt):

root@media:~# lsusb -s 1:6 -v

Bus 001 Device 006: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0bda Realtek Semiconductor Corp.
  idProduct          0x2838 RTL2838 DVB-T
  bcdDevice            1.00
  iManufacturer           1 Realtek
  iProduct                2 RTL2838UHIDIR
  iSerial                 3 00000001
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0022
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          4 USB2.0-Bulk&Iso
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    (...)

Hier wird duch den Parameter -s [[Bus]:][Gerätenummer] bewirkt, daß nur noch die in Bus und/oder Gerätenummer angegebenen Geräte angezeigt werden, die Angaben wurden im ersten Befehl ja bereits angezeigt.

Treiber vorhanden?

Der Befehl dmesg liefert in der Standard-Vorgabe Meldungen des Kernels. Hier ist interessant, ob der Tuner erkannt und die nötigen Treiber aktiviert werden:

root@media:~# dmesg | grep DVB
[ 4096.327784] dvbdev: DVB: registering new adapter (Realtek RTL2832U reference design)
[ 4096.377540] usb 1-2: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))...
[ 4096.377550] dvbdev: dvb_create_media_entity: media entity 'Realtek RTL2832 (DVB-T)' registered.

und

root@media:~# dmesg | grep rtl
[   49.716851] r8169 0000:01:00.0: firmware: direct-loading firmware rtl_nic/rtl8168g-2.fw
[ 4096.377512] rtl2832 6-0010: Realtek RTL2832 successfully attached
[ 4096.544041] rtl2832_sdr rtl2832_sdr.1.auto: Registered as swradio0
[ 4096.544046] rtl2832_sdr rtl2832_sdr.1.auto: Realtek RTL2832 SDR attached
[ 4096.544048] rtl2832_sdr rtl2832_sdr.1.auto: SDR API is still slightly experimental and functionality changes may follow
[ 4096.551677] rc rc0: lirc_dev: driver dvb_usb_rtl28xxu registered at minor = 0, raw IR receiver, no transmitter
[ 4096.560475] usbcore: registered new interface driver dvb_usb_rtl28xxu

attached und registered klingt gut 😄

Erster Testlauf

Der Tuner-Stick ist ja eigentlich für den Fernsehempfang gedacht, deshalb habe ich im ersten Schritt versucht, in Anlehnung an diesen Artikel dieses Feature zu nutzen für einen ersten Test:

medcenter@media:~$ w_scan -ft -c DE -E 0 -L > vlc-channels.xspf
w_scan -ft -c DE -E 0 -L 
w_scan version 20170107 (compiled for DVB API 5.11)
using settings for GERMANY
DVB aerial
DVB-T Europe
scan type TERRESTRIAL, channellist 4
output format vlc xspf playlist
output charset 'ISO-8859-1'
Info: using DVB adapter auto detection.
	/dev/dvb/adapter0/frontend0 -> "Sundtek DVB-S/S2 (VI)" doesnt support TERRESTRIAL -> SEARCH NEXT ONE.
main:4004: FATAL: ***** NO USEABLE TERRESTRIAL CARD FOUND. *****
Please check wether dvb driver is loaded and
verify that no dvb application (i.e. vdr) is running.

Das ist nicht gut, zwar wird mein Sundtec-Satelliten-Tuner gefunden, nicht aber der neu hinzugefügte DVB-T-Stick. Ein Abhängen des Sundtec-Tuners ändert daran auch nix. Nach einigem Suchen bin ich dann hier auf einen Lösungsvorschlag gestoßen - die Rules-Datei. Diese Dateien enthalten udev-Regeln, die festlegen, was passiert, wenn ein Gerät erkannt wird. Eine udev-Regel enthält dazu mindestens eine Bedingung und mindestens eine Zuweisung (Regelsyntax). Mehr dazu z. B. hier.

Zunächst wird in das richtige Verzeichnis gewechselt und mal aufgerufen, was da schon “so rumliegt”:

root@media:~# cd /etc/udev/rules.d/
root@media:/etc/udev/rules.d# ls
80-remote-eeti.rules  80-remote-sundtek.rules

Zwei Dateien sind vorhanden, darunter eine für meinen Satelliten-Tuner.
Erstellen wir also eine für den neuen DVB-T-Tuner:

root@media:/etc/udev/rules.d# touch 81-rtl-sdr.rules

Mittels des Terminal-Editors Nano kann dann die Datei geöffnet werden:

root@media:/etc/udev/rules.d# nano 81-rtl-sdr.rules

und der mit dem Inhalt

# Realtek Semiconductor Corp. RTL2838 DVB-T 
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE:="0666", GROUP="adm", SYMLINK+="rtl_sdr"

in die Datei kopiert und gespeichert werden. Das Verzeichnis-Listing zeigt nunmehr eine Datei mehr …

root@media:/etc/udev/rules.d# ls
80-remote-eeti.rules  80-remote-sundtek.rules  81-rtl-sdr.rules

Tuner funktioniert …

Nunmehr zeigt w_scan als Ergebnis:

benutzername@media:~$ w_scan -ft -c DE -E 0 -L > vlc-channels.xspf
w_scan -ft -c DE -E 0 -L 
w_scan version 20170107 (compiled for DVB API 5.11)
using settings for GERMANY
DVB aerial
DVB-T Europe
scan type TERRESTRIAL, channellist 4
output format vlc xspf playlist
output charset 'ISO-8859-1'
Info: using DVB adapter auto detection.
	/dev/dvb/adapter0/frontend0 -> TERRESTRIAL "Realtek RTL2832 (DVB-T)": good :-)
	/dev/dvb/adapter1/frontend0 -> "Sundtek DVB-S/S2 (VI)" doesnt support TERRESTRIAL -> SEARCH NEXT ONE.
Using TERRESTRIAL frontend (adapter /dev/dvb/adapter0/frontend0)
-_-_-_-_ Getting frontend capabilities-_-_-_-_ 
Using DVB API 5.11
frontend 'Realtek RTL2832 (DVB-T)' supports
INVERSION_AUTO
QAM_AUTO
TRANSMISSION_MODE_AUTO
GUARD_INTERVAL_AUTO
HIERARCHY_AUTO
FEC_AUTO
BANDWIDTH_AUTO not supported, trying 6/7/8 MHz.
FREQ (174.00MHz ... 862.00MHz)
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 
Scanning DVB-T...
Scanning 8MHz frequencies...
474000: (time: 00:02.724) 
482000: (time: 00:05.044) 
490000: (time: 00:07.252) 
498000: (time: 00:09.492) 

Gefunden hat der Suchlauf nichts. Zunächst dachte ich, hier am Ort sei einfach “kein Empfang” mittels der “mickrigen Zimmer-Teleskop-Antenne”, doch auch andernorts mit deutlich erkennbarem Signal

DVB-T2 OFDM-Signalausschnitt

bleibt der Suchlauf ergebnislos. Man könnte jetzt anhand des Alters des Chips (13 Jahre, wenn die Angabe auf dem Datenblatt richtig ist) vermuten, daß mit DVB-T wirklich DVB-T gemeint ist und nicht etwa DVB-T2 … (P.S.: tvheadend findet auch nix).

Immerhin freut sich w_scan über den gefundenen Tuner:

/dev/dvb/adapter0/frontend0 -> TERRESTRIAL "Realtek RTL2832 (DVB-T)": good :-)

Jetzt - da die Hardware-Erkennung funktioniert - kann’s also weitergehen:

Der Empfang von DAB-Signalen mittels SDR

Wie oben bereits erwähnt ist der RTL-Stick eigentlich dafür gedacht, DVB-T zu dekodieren und dann an einen Medien-Player auf dem PC weiterzureichen.

Für DAB-Empfang wird das Zusatz-Feature genutzt, daß der Stick auch Rohdaten (I/Q-Signale) an den PC weiterreichen kann, dann muß dort dieser Rohdaten-Strom erstmal dekodiert werden, bevor er einem Audio-Player “zum Fraß vorgeworfen” werden kann. Dies übernimmt Software, die unter dem Begriff “Software Defined Radio (SDR)” zusammengefaßt wird.

Benötigte Software

Eine solche Software ist welle.io - das Programm kann direkt aus den Debian-Paketquellen installiert werden:

root@media:~# apt install welle.io

Starten, Suchlauf, Empfang …

Nach dem ersten Start ist erstmal ein Suchlauf fällig:

welle.io - Screenshot DAB

Die Standard-Darstellung des Programms zeigt neben Sendername und Untertitel vor allem mitgelieferte Multimedia-Inhalte in der Slideshow:

welle.io - Screenshot DAB

Technisch interessierte Nutzer können aber auch zusätzliche oder andere Angaben anzeigen lassen, die z. B. auch die Beurteilung der Empfangssituation erlauben:

welle.io - Screenshot DAB

Faustregeln: Der Empfang ist umso besser, je höher der SNR-Wert im rechten oberen Fenster (Senderdetails) ist, das Minimum für eine Dekodierung scheint irgendwo zwischen 6 und 8dB zu liegen. Im Konstellationsdiagramm zeigt sich die Empfangsqualität darin, daß mit besserem Empfang die “Punkte-Wolken” sich zu Linien bei +/-45° und +/-135° konzentrieren.

Alles in allem ein “schönes Spielzeug” …

 


weitere Artikel