Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ein Softwarebausatz DAB+ Radio unter Unix/Linux
#1
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
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")
Zitieren
#2
Hallo Bernhard,

sehe ich das richtig, dass ich bei der Wahl des USB-Sticks 'nur' darauf achten muss, dass ich einen mit RTL-Chipsatz erwische?

Und: Läuft das ganze auch auf einem Raspberry Pi 3?


Viele Grüße

Martin
Zitieren
#3
(23.10.2018, 21:59)Radiobastler schrieb: sehe ich das richtig, dass ich bei der Wahl des USB-Sticks 'nur' darauf achten muss, dass ich einen mit RTL-Chipsatz erwische?

Laut Projektseite werden diese Tuner unterstützt, wo genau die verbaut sind kann ich nicht sagen, die Projektseite hat dazu nur eine zweite kleine Tabelle. Hier musst Du halt vorher mal in das Gehäuse schauen, möglichst das Gehäuse dabei nicht beschädigen.

Tuner Frequency range
Elonics E4000 52 - 2200 MHz with a gap from 1100 MHz to 1250 MHz (varies)
Rafael Micro R820T 24 - 1766 MHz
Rafael Micro R828D 24 - 1766 MHz
Fitipower FC0013 22 - 1100 MHz (FC0013B/C, FC0013G has a separate L-band input, which is unconnected on most sticks)
Fitipower FC0012 22 - 948.6 MHz
FCI FC2580 146 - 308 MHz and 438 - 924 MHz (gap in between)


VID PID tuner device name
0x0bda 0x2832 all of them Generic RTL2832U (e.g. hama nano)
0x0bda 0x2838 E4000 ezcap USB 2.0 DVB-T/DAB/FM dongle
0x0ccd 0x00a9 FC0012 Terratec Cinergy T Stick Black (rev 1)
0x0ccd 0x00b3 FC0013 Terratec NOXON DAB/DAB+ USB dongle (rev 1)
0x0ccd 0x00d3 E4000 Terratec Cinergy T Stick RC (Rev.3)
0x0ccd 0x00e0 E4000 Terratec NOXON DAB/DAB+ USB dongle (rev 2)
0x185b 0x0620 E4000 Compro Videomate U620F
0x185b 0x0650 E4000 Compro Videomate U650F
0x1f4d 0xb803 FC0012 GTek T803
0x1f4d 0xc803 FC0012 Lifeview LV5TDeluxe
0x1b80 0xd3a4 FC0013 Twintech UT-40
0x1d19 0x1101 FC2580 Dexatek DK DVB-T Dongle (Logilink VG0002A)
0x1d19 0x1102 ? Dexatek DK DVB-T Dongle (MSI DigiVox mini II V3.0)
0x1d19 0x1103 FC2580 Dexatek Technology Ltd. DK 5217 DVB-T Dongle
0x0458 0x707f ? Genius TVGo DVB-T03 USB dongle (Ver. B)
0x1b80 0xd393 FC0012 GIGABYTE GT-U7300
0x1b80 0xd394 ? DIKOM USB-DVBT HD
0x1b80 0xd395 FC0012 Peak 102569AGPK
0x1b80 0xd39d FC0012 SVEON STV20 DVB-T USB & FM

(23.10.2018, 21:59)Radiobastler schrieb: Und: Läuft das ganze auch auf einem Raspberry Pi 3?

Auf den LeMaker und Hardkernelboards mit den modernen Mehrkernern und Taktfrequenzen  1+x GHz habe ich das ohne Probleme nutzen können, warum also auch nicht auf den Pi3. Da läuft doch auch Welle.io und andere DAB+ Software drauf. Auf den alten Rasperrys wird die Prozessorleistung sicherlich kritisch, hier habe ich beim Zero dann einen Mix aus Software von der Stange und eigenen Programmen genommen. Also mit einem Model A / B oder Zero würde ich diese Lösung oben als grenzwertig/ungünstig erachten, eventuell mit weiteren Optimierungen nutzbar und definitiv ohne GUI.
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")
Zitieren
#4
Für Experimente im Bereich SDR und DAB+ möchte ich im Weiteren auf folgende Github-Seiten verweisen.
Der Author Jan va Katwijk, vielleicht bekannt durch die Seite https://www.sdr-j.tk , hat hier sehr interessante DAB+ Implementierungen 
für den Einsatz auf Kleinrechnern vorgenommen.

DAB decoding library : https://github.com/JvanKatwijk/dab-cmdline

qt-dab is a software dab decoder for use with a dabstick, airspy or sdrplay for RPI and PC: https://github.com/JvanKatwijk/qt-dab


Von meinem Funkfreund  HA7ILM mit dem ich sehr fruchtende Gespräche und regen Erfahrungstausch betreibe stammt folgende 
DSP Bibliothek. Hiermit lässt sich eine Signalverarbeitung direkt auf der Kommandozeile realisieren.
Durch geschicktes Pipen der einzelnen Programme lässt sich der komplette Signalpfad von HF bis NF direkt in der Konsole beschreiben und so adhoc ein Empfänger aufbauen.

https://github.com/simonyiszk/csdr

Bei der Gelegenheit darf nicht unerwähnt bleiben, daß sich ein Raspberry direkt zu einem leistungsfähigen experimentellen Sender mit unterschiedlichen analogen und digitalen Modualtionsarten verwenden lässt. Man braucht also nicht immer ein LimeSDR um ein Signal auszusenden.

https://github.com/F5OEO/rpitx

Zitat: 
rpitx is a general radio frequency transmitter for Raspberry Pi which doesn't require any other hardware unless filter to avoid intererence. It can handle frequencies from 5 KHz up to 1500 MHz.


Rpitx is a software made for educational on RF system. It has not been tested for compliance with regulations governing transmission of radio signals. You are responsible for using your Raspberry Pi legally.


Keep coding!
73 de B45
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")
Zitieren
#5
Hallo,
nachdem in einem anderem Thread hier im Forum aktuell auf dieses Thema
verwiesen wurde, möchte ich gerne nochmal darauf zurückkommen.

Ich hatte vor längerem mal die vorgeschlagene Software(Bausatz) Kombination
"rtl-sdr", "eti" und "dablin" auf einem Raspberry 3B+ ausprobiert. Das hat
grundsätzlich funktioniert, allerdings gab es mit dem Raspberry so starke
Performace Probleme, dass ich das Ganze dann nicht weiter verfolgt habe.

UKW Empfang funktionierte mit die entsprechenden Tools problemlos, bei DAB+
Empfang wurde die Senderliste des Multiplex noch angezeigt, beim Abspielen
eines ausgewählten Senders ging die Auslastung eines der CPU Kerne auf
Anschlag und eine vernünftige Wiedergabe war nicht möglich.

Eine auf Windows laufende DAB+ Software funktioniert mit derselben Antenne
und demselben Stick problemlos. Hardware- oder Empfangsprobleme sollten
also nicht die Ursache der Performace Probleme beim DAB+ Empfang gewesen
sein. Möglicherweise  habe ich bei der Implementierung der Softwarekomponenten
irgendwo einen Fehler gemacht.  

Mich würde nun interessieren, hat jemand DAB+ Empfang mit diesem Softwarebausatz
auf einem Raspberry 3B+ (oder ähnlich) realisiert?

Falls ja, wäre das vielleicht ein Möglichkeit herauszufinden, was das bei mir
damals schiefgegangen ist.

Gruß aus Kiel
Holger
Zitieren
#6
Raspberry 3B+ iRadio Worldradio Dab mit FDK-AAc aus Opendigitalradio. In dieser Kombination lauft der Empfang tadellos. Bedienung erfolgt ūber gpiod des iRadio.

Otto
Zitieren
#7
Hallo Otto,
danke für die Info, das werde ich mir mal angucken.

Eigentlich ging es mir aber darum, ob jemand das mit den Softwarekomponenten
"rtl-sdr", "eti" und "dablin" auf einem der leistungsfähigeren Raspberry's zum
Spielen bekommem hat.

Na, vielleicht meldet sich noch jemand.

Gruß aus Kiel
Holger
Zitieren
#8
(01.06.2019, 22:07)HolgerK schrieb: Eigentlich ging es mir aber darum, ob jemand das mit den Softwarekomponenten
"rtl-sdr", "eti" und "dablin" auf einem der leistungsfähigeren Raspberry's zum
Spielen bekommem hat.

Das sind Bestandteile des Opendigitalradio die Otto nutzt https://www.opendigitalradio.org/software und die ich oben vorgestellt habe. Natürlich alles unter einem gemeinsamen gpiod und displayd verbunden, die Modiumschaltung kann man so machen wie beim LorenzC2_V2 für Jupp / Uli gezeigt. Die Software auf dem Opendigitalradio läuft auch auf den neuen Raspberry. Siehe auch Ottos Satz: Raspberry 3B+ iRadio Worldradio Dab mit FDK-AAc aus Opendigitalradio. In dieser Kombination lauft der Empfang tadellos. Bedienung erfolgt ūber gpiod des iRadio.

An welcher Stelle in der Signalverarbeitungskette gibt es denn genau die Probleme?
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")
Zitieren
#9
Hallo Bernhard,
das Problem war eine extreme CPU Auslastung durch eti-cmdline-rtlsdr.

   

Gruß aus Kiel
Holger
Zitieren
#10
Schalte mal bitte bei der Compilierung die Compileroptimierung an, sehe das das oben nicht gemacht wurde. Ein ähnliches Verhalten hatte ich bei ausgeschalteter Compileroptimierung auf einem STM32-System. Da stockte dann die DAB+ Dekodierung. Mit O2 / O3 war flüssige Wiedergabe aber möglich. Es lohnt auch den AAC-Codec auszutauschen, denn da gibt es im Opendigitalprojekt bereits welche die effizienter laufen und sich auch besser anhören.
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")
Zitieren
#11
Hallo Bernhard,
danke für den Hinweis, das probiere ich aus.

Gruß aus Kiel
Holger
Zitieren
#12
Hallo Bernhard,
ich habe die Baukastenkomponenten, beginnend mit einem Raspian Stretch lite, nochmal
komplett neu aufgesetzt. Neben der Software, wurden nur die für eine erfolgreiche
Compilierung nötigen Bibliotheken hinzugefügt.

Die Option (-O3) für die Compileroptimierung habe ich jeweils der CMakeLists.txt ergänzt.
In den Compiler Logs  taucht die Option so auf:

/usr/bin/c++     -O3 -DNATIVE_ATOMICS_SUPPORT -std=c++0x….

Das scheint also zu funktionieren. Gibt es noch andere Möglichkeiten herauszufinden ob
tatsächlich eine entsprechende Code Optimierung stattfindet?

Am Ergebnis hat sich leider nix geändert. Das ganze startet recht zuversichtlich, es kommen
auch ein paar Audio Brocken, dann steigt die Prozessorlast durch eti-cmdline-rtlsdr auf
einem Kern stark an und im Lautsprecher ist silence.


.png   dab.png (Größe: 37,28 KB / Downloads: 888)

Zwischendurch hatte ich die Idee, dass die Ursache vielleicht die beim Raspberry ja mit dem
(Draht) Netzwerkanschluss konkurrierende USB2 Schnittstelle sein könnte. Aber auch die
Nutzung der WLAN Schnittstelle ändert nichts.

Hast Du noch eine Idee was da auf meinem Raspberry schief geht ?

Gruß aus Kiel
Holger
Zitieren
#13
Bei Dir scheint ja der empfangene Datenstrom fehlerhaft sein, die Meldungen werden zum Beispiel bei einem zu schlechten Signal so ausgegeben. Es nützt auch nichts wenn der Stick an einem anderen Rechner mit Herstellersoftware funktioniert, da wir in der Regel nicht feststellen wie dort die Software das HF-Frontend einstellt um guten Empfang zu haben.
Ich denke mal das eti-tool rechnet sich deshalb tot.

Hast Du vielleicht noch einen Linux-PC rumstehen? Einen auf dem die ganze Signalverarbeitung mit den hier genannten Tools problemlos läuft?
Wenn ja, dann sample mit dem Raspberry mal für ein, zwei Minuten nur die Rohdaten eines DAB+ Kanals. Mit diesen Rohdaten versuchst Du dann die Dekodierung auf dem PC. Auch mal den Weg anders herum ausprobieren, auf PC Rohdaten samplen, auf Raspberry (ohne gesteckten SDR-Stick) dekodieren. Ändert sich etwas am Verhalten?

Sollte sich da nichts ändern, würde ich auch mal einen anderen Tuner bzw. Chipsatz probieren oder dab2eti einsetzen.

Zur Compileroptimierung: Wenn die geklappt hat, dann sollte allein schon die Größe der Binärversion abgenommen haben. Wenn das der Fall ist, dann ist von einer erfolgreichen Compileroptimierung auszugehen.

Gruß 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")
Zitieren
#14
Hallo Berhard,
es kann am fehlerhaften Datenstrom liegen, ich habe allerdings eher den Eindruck, dass die
Fehler mit der Prozessorüberlastung kommen. Es fängt ja immer gut mit FIB quality 100 an,
dann geht es in einigen Sekunden runter bis 0.

Ich habe mehrere DAB Sticks probiert, hier zum Beispiel einer mit Rafael Micro R820T tuner,
wie in oben im Beispiel:
...
pi@raspberrypi:/usr/local/bin $ rtl_test
Found 1 device(s):
 0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Detached kernel driver
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...
Allocating 15 zero-copy buffers
lost at least 16 bytes
^CSignal caught, exiting!

User cancel, exiting...
Samples per million lost (minimum): 0
Reattached kernel driver
...


Gruß aus Kiel
Holger
Zitieren
#15
Hallo Otto,
könntest Du Deine auf dem Raspberry 3B+ laufende Software hier hochladen
oder per Link zur Verfügung stellen?

Das könnte mir die Ursachenforschung sicher erleichtern.

Gruß aus Kiel
Holger
Zitieren
#16
(10.06.2019, 18:31)HolgerK schrieb:

User cancel, exiting...
Samples per million lost (minimum): 0
Reattached kernel driver
...

Hallo Holger, 

das bedeutet ja nur, das das eigentliche samplen funktioniert und kein Wert verloren geht. Ein schlechter Empfang eines Signals, ggf. durch eine falsche Einstellung des MMIC, führt ja nicht zu lost samples! Verlorene Werte treten nur auf, wenn die Schnittstelle oder der Prozessor nicht schnell genug die Werte vom HF-Frontend übernehmen kann. Ist hier absolut(!) nicht der Fall wie man sieht! Du kannst aber auch ein komplett verrauschtes oder anderweitig kaputtes Signal ohne Sampleverlust vom Stick bekommen. Ins Stocken kommt dann erst der Prozess, der aus dem Signal versucht etwas "brauchbares" zu machen und da wären wir dann. 

Sample bitte mal für ein oder zwei Minuten einen DAB+ Kanal in der von Dir benutzten Konfiguration (Hard- wie Software) und analysiere danach welchen SNR und welche Bitfehlerrate Du hast. Betrachte auch mal das Konstellationsdiagramm vom empfangenen Signal. Man könnte einen fehlerfreien Datenstrom auch selbst erzeugen (siehe mein Thread zum DAB+ Sender) und der aktuellen Signalverabeitungskette auf dem Raspberry zuführen bzw. von SD-Karte einlesen lassen. Ich bin fast sicher, das es dann keine Probleme bei der Wiedergabe und Dekodierung geben wird. 

Wenn Du mit dem DAB+ Sender-Thread Probleme hast, so kann ich auch einen Mux selbst erzeugen und Dir die Rohdaten die ein RTLSDR bei sehr guten Empfang aus der Luft fischt per Dropbox, .... zukommen lassen. Dauert aber ein paar Tage, da ich momentan zeitlich ausgelastet bin. Haben schon einige hier im Forum durch meine zeitverzögerten Antworten gemerkt - Rentner haben halt nie Zeit!  Big Grin 

Ich werde im Spätsommer auch kurz in Kiel sein (über den Schwedenkai kommend), kann aber dank Wohnmobil ein- oder zwei Tage Rast machen. Dann können unsere Frauen Kiel erkunden, während wir uns um dein Radio kümmern?

Gruß B45
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")
Zitieren
#17
Hallo Bernhard,
das mit dem fehlerfreien Datenstrom klingt interessant.
Wäre super wenn Du mir da helfen könntest.

Gruß aus Kiel
Holger
Zitieren
#18
Hallo Holger, 

ich habe die OpenDAB-Tools jetzt auf einem Raspberry 3B+ installiert. Ein direktes Sampling vom einem FC0013 mit anschließendem eti-cmdline geht mit knapp 65-70% Systemlast einher.

   

Keine FIB oder FIC-Fehler sondern stotterfreie Tonwiedergabe über SDL, also der Bibliothek die wir auch im iRadio nutzen.

Nutze ich eine aufgezeichnete Sampledatei anstelle des RTLSDR ist die CPU Last erwartungsgemäß niedriger, ungefähr um 8%. Bei der Verwendung von dab2eti sind die Unterschiede marginal, allerdings sehe ich das ich gerade ohne Optimierung gebaut habe. Möglicherweise sind mit Compileroptimierung noch mehr Einsparungen möglich. Jetzt wären noch möglich den Verbiti und AAC-Dekoder gegen effektiver arbeitende Algorithmen zu patchen. Das habe ich bei Ottos DAB-Radio so gemacht weil ich im Zusammenspiel mit dem WorldRadio auf einem Pi 2 eine zu hohe Last befürchtet hatte, dann aber doch ein neuer 3er zum Einsatz kam.

Also ja es geht auf den neuen Raspberries. Jetzt kann ich dir meine Dateien hochladen, aber das sind einige hundert MB. Du findest fertige Testdateien aber auch auf den Projektseiten, auf die Schnelle zum Beispiel hier: https://sdr.kt.agh.edu.pl/sdrdab-decoder/download.html 
Die Dateien kannst Du auch mal mit etisnoop anschauen und nach CRC-Fehlern untersuchen. Mache das bitte auch mit dem was dein SDR direkt empfängt. Wahrscheinlich wirst Du dann sehen warum deine Dekodierung nicht funktioniert.

Gruß 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")
Zitieren
#19
Achso, ziehe ich die Antenne ab, dann haut es bei mir natürlich auch die Fehler in die Konsole und die CPU-Last geht nach oben. Dann dreht auch die automatische GAIN-Einstellung durch und macht den SDR-Stick mit seiner so schon geringen Dynamic dicht.
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")
Zitieren


Gehe zu: