SvxLink Streaming & GNU Radio

Dieser Artikel beschreibt das im August 2012  neu hinzugekommene Streaming von Audiodaten per UDP des Svxlink. Hier wird die von SM0SVX erwähnte Anbindung von SvxLink an GnuRadio mit einem Beispiel gezeigt. GnuRadio [1] ist eine Open Source Entwicklungsumgebung für die OSI/ISO-Ebene „0“. Es wird insbesondere für SDR-Systeme eingesetzt.

Das hier erläuterte Beispiel ist von Michael (DK5HH) und soll Signalnach- und -vorverarbeitung in einem als Repeater betrieben Svxlink ermöglichen. Das GnuRadio-GRC-Beispiel erzeugt aus dem UDP-Audiostream des Svxlink:

  1. eine Oszilloskop-Schirm-Darstellung
  2. einen FFT-Plot
  3. eine Ausgabe auf die Soundkarte (mit Lautstärkeregler)

Die Kommunikation zwischen Svxlink und GnuRadio erfolgt im Beispiel über
den UDP-Port 42420.
In der /etc/svxlink/svxlink.conf sind hierfür folgende Erweiterungen notwendig:

[TxUDP]
TYPE=Local
#AUDIO_DEV=udp:127.0.0.1:42420
AUDIO_DEV=udp:100.012.123.123:42420
AUDIO_CHANNEL=0
PTT_PORT=NONE 
PTT_PIN=DTR   
TIMEOUT=0     
TX_DELAY=0    
PREEMPHASIS=0 
CTCSS_LEVEL=0 
DTMF_TONE_LENGTH=100
DTMF_TONE_SPACING=50
DTMF_TONE_AMP=-18  

[TxMult]
TYPE=Multi
TRANSMITTERS=TxHft,TxUDP

Weiter oben in der svxlink.conf im Bereich [RepeaterLogic] muss dann noch der Parameter TX=TxMult gesetzt werden, damit dieser Multi-TX auch angesprochen wird.

Der von Svxlink im UDP-Paket gelieferte Datenstrom besteht aus 2 Audio-Kanälen zu jeweils 16 Bit. Diese müssen für eine weitere Verwendung entkoppelt werden (deinterlaced) werden. Der unbenutzte Stream geht dann
in die Null-Sink (diese gleichzeitige Übertragung von 2 Kanälen ist evtl.
noch ein Bug im Svxlink; Stand 21.08.2012, d.Red.).

Für die Abtastratenkonversion an der Soundkarte habe ich zunächst einen digitalen Interpolator und dann anschließend ein Tiefpassfilter vorgesehen, um die unangenehm pfeifenden Oberschwingungen aus dem Audiokanal herauszubekommen.

Schematic Signalfluß in GNU Radio

Schematic Signalfluß in GNU Radio

Noch eine Besonderheit ist die Konversion von short nach float. Dabei nutze ich den Scale-Wert zwischen 16000 und 32000 (hier gewählt 2^14-1=16383) um auf einen Wert zwischen -1 und +1 zu skalieren, so dass die Soundkarte nicht übersteuert wird.

Ausgabebild GNU Radio

Ausgabebild GNU Radio

Schön ist, dass der Stream von Svxlink nur dann Informationen schickt, wenn wirklich was los ist… in den Ruhezeiten (ohne Input) des sendenden Relais kommt kein Stream. (Ansagen und Rogerpiep werden aber mit übertragen)
Für einen Programmierer ist es nun keine große Aufgabe, aus dem UDP-Stream weiteres zu machen. Für die umgekehrte Richtung, die Sendeseite, muss dann entsprechend noch ein UDP-Empfänger im SvxLink (svxlink.conf) aufgesetzt werden.

Es sei auch der Hinweis gestattet, dass mit diesem neuen Stream des SVXLink sich recht leicht jetzt auch der Anschluss an einen Internet-Streamer IceCast erreichen lässt. — Und das geht dann auch für alle Versionen des Linux-Kernels. Des weiteren ließe sich mit diesem neuen Streaming-Konzept des Svxlink die Konstruktion des NetRX und NetTX in Svxlink zumindest in Teilen mit diesem Weg aufgreifen und ggf. auch einfach realisieren; hat allerdings dann die oben beschriebenen unangenehmen Nebeneffekte mit (störendem) unnützem Audio.

Kontakt:
Prof. Dr. Michael Hartje, DK5HH – dk5hh {ät} darc . de

Downloads:
GRC-file DB0HFT_reader.grc
aus GRC abgeleitetes Python-Skript HFT_reader.py

Links:

[1] GNU Radio – Project