Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Den Raspberry Pi als einfachen SDR-Tx mit GNURadio programmieren.
#1
Hallo Funkamateure und Radiobastler.

Per Mail habe ich mit Bezug auf das "sendende iRadio" vom Jan/Feb. diesen Jahres eine Frage bekommen. 
Kann man einen Raspberry als SDR anstelle von csdr nicht auch mit GNU Radio programmieren. So wie wir das mit der FL2000 Grafikkarte gezeigt haben? 

Klar geht das. Zur Erinnerung: Der Raspberry kann ohne weitere Hardware Signale bis 750MHz bzw. 1.5 GHz erzeugen. Siehe auch dazu diese Seite: https://github.com/F5OEO/rpitx

Nicht nur auf Grund der Art der Signalerzeugung ist es aber "überlebenswichtig" ein ordentliches Rekofilter am Ausgang zu nutzen! Mit einem passenden Filter kann der Raspberry zum Beispiel 
als Amateurfunksender genutzt werden. Die gängigen Modulationsarten sind keine Probleme und es gibt im Netz auch fertig programmierte Software die aus dem Raspberry einen kostengünstigen Afu-Transceiver machen.

Für die "Senderprogrammierung" mit GNU-Radio brauchen wir nur das Dienstprogramm rpitx welches auf der oben genannten Github-Seite zu beziehen ist. 

Wir laden uns das ganze Archiv als gepacktes Zip-runter oder checken das komplette Projekt einfach mittels git aus:

Code:
git clone https://github.com/F5OEO/rpitx


Danach ist das Projekt im Ordner "rpitx" bei uns auf der SD-Karte abgelegt. Wir wechseln in dieses Verzeichnis und bauen eine ganze Reihe von Programmen, darunter auch rpitx wie folgt:

Code:
cd rpitx
./install.sh

Die Änderungen in der boot.config beja-en wir und ein anschließender Reboot (sudo reboot) runden die Transformation des Raspberry in einen Universalsender ab. 

Nachdem der Raspberry wieder aus dem Warmstart hochgekommen ist und wir uns an der Konsole angemeldet haben, starten wir rpitx, damit es unsere Sendedaten - die wir mit GNU-Radio errechnen lassen - entgegen nimmt. 

Schauen wir uns erstmal die Aufrufparameter von rpitx an!

Code:
pi@raspberrypi:~ $ rpitx -h
Warning : rpitx V2 is only to try to be compatible with version 1

rpitx -2.0
Usage:
rpitx [-i File Input][-m ModeInput] [-f frequency output] [-s Samplerate] [-l] [-p ppm] [-h]
-m            {IQ(FileInput is a Stereo Wav contains I on left Channel, Q on right channel)}
             {IQFLOAT(FileInput is a Raw float interlaced I,Q)}
             {RF(FileInput is a (double)Frequency,Time in nanoseconds}
           {RFA(FileInput is a (double)Frequency,(int)Time in nanoseconds,(float)Amplitude}
     {VFO (constant frequency)}
-i            path to File Input
-f float      frequency to output on GPIO_4 pin 7 in khz : (130 kHz to 750 MHz),
-l            loop mode for file input
-p float      frequency correction in parts per million (ppm), positive or negative, for calibration, default 0.
-h            help (this help).

pi@raspberrypi:~ $

rpitx nimmt also mit der Option -i eine Datei unterschiedlichen Formates entgegen, welches wir mit der Option -m bestimmen. Gesendet wird der "Dateiinhalt" auf der in der Option -f angegebenen Trägerfrequenz.

Wir sind so frei und wollen rpitx einfach aus dem Netzwerk heraus füttern. Dazu nehmen wir unser in anderen Projekten schon hilfreiches netcat. Netcat wird auf einer bestimmten Portadresse lauschen und den TCP/IP Datenverkehr zu rpitx pipen.

Erreichen tuen wir das zum Beispiel durch folgenden Aufruf:

Code:
nc -l 8011 | sudo rpitx -i- -m IQFLOAT -f 1430

Übersetzung:

netcat lauscht auf Port 8011 auf eingehende Verbindungen (zum Beispiel von GNURadio) und übergibt die Daten 
an rpitx, welches seinerseits die einkommenden Daten im Format IQFLOAT auf der Trägerfrequenz 1430 kHz abstrahlt.

Es wird schon klar, wir wollen hier im Mittelwellenbereich eine Testsendung vornehmen. Bauen wir uns das passende Basisband für eine solche Aussendung mit GNU-Radio zurrecht.

Hier der Signalgraph in GNU-Radio:

   

Wir bauen uns also aus einer Audiodatei (das könnte auch MIC- oder LineIn einer Audiokarte sein oder die PCM-Samples eines Internetradiostreams) eine AM zurecht, die wir im Spektrum bei 10 kHz ablegen werden.
Zur Kontrolle schauen wir uns das auf einem Wasserfall an. Das so erzeugte Basisband schreiben wir über ein TCP Sink (IP hier Localhost, könnte auch ein anderer Rechner im Netz sein und Port 8011) zu Netcat.

   

Nach dem Klick auf Ausführen sehen wir das erzeugte Signal im Basisband und hören den AM-modulierten Träger auf der alten luxemburger Frequenz 1440 kHz. (1430kHz + 10kHz Offset)

Die vom Sender abgegeben Leistung ist hinter dem Reko-Filter für den direkten Radioeingang ggf. noch abzuschwächen, damit das Gerät nicht übersteuert wird! Auf diese Art und Weise können sehr flexibel Sender zusammen programmiert werden, die mit nichts anderem als einem Raspberry funktionieren. Im Netz findet man dazu einige Beispiele von AM, LSB/USB oder UKW Sendern, auch DVB-S zum Beispiel für den Uplink zu Qatar-Oscar 100. Natürlich ist der Pi kein LimeSDR oder HackRF, aber für den Einstieg und viele Zwecke ausreichend. Ich denke mit diesem kleinen Leitfaden dürfte die Frage ausreichend beantwortet sein, der oder die Interessierten werden mit Google schnell weitere Ergebnisse und tiefgehendere Berichte finden.

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


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Raspberry 4 für iTV und iRadio OttoBerger 9 750 25.06.2019, 19:26
Letzter Beitrag: power-dodge
  FMBerry, UKW-Sender mit einem Raspberry saarfranzose 20 1.639 17.05.2019, 17:12
Letzter Beitrag: saarfranzose
  Briconti-Internetradio mit Raspberry saarfranzose 5 792 14.12.2018, 23:21
Letzter Beitrag: saarfranzose
  PIMORONI-Internetradio auf Raspberry Model A/B Bernhard45 51 3.843 26.11.2018, 21:11
Letzter Beitrag: Radiobastler
  WorldRadio, der Raspberry als Welt- und Breitbandemfänger Bernhard45 0 449 22.11.2018, 20:15
Letzter Beitrag: Bernhard45

Gehe zu: