03.07.2019, 20:05
(Dieser Beitrag wurde zuletzt bearbeitet: 03.07.2019, 21:59 von Bernhard45.)
Hallo zusammen,
vor einiger Zeit habe ich mit Hilfe von SDRs in Form von HackOne und LimeSDR gezeigt, wie man einen eigenen DAB+ Sender für
relativ wenig Geld in den Luft bekommt. Dennoch waren die Kosten im unteren dreistelligen Bereich nicht für jeden Bastler finanzierbar.
Aus diesem Grund habe ich zwischenzeitlich als "Auftragsleistung" immer mal SDRs mit zusammengesampelten ADC/DACs und alten
Klein-FPGA gebaut und zum Selbstkostenpreis abgeben. Die aktuelle Lösung die ich vorstellen möchte, kostet
noch sehr viel weniger, daher der Titel "Universeller Sender für AM, FM, DAB(+), DVB-x, GPS für 20 Euro" oder auch "Ein
ganzes Mittelwellenband voller Sender für 20 Euro".
Was brauchen wir für ein leistungsfähiges SDR welches primär eine "nur" Sendefunktion benötigt? Es sind schnelle Digital-Analog-Wandler mit
einer Schnittstelle, die die Sendedaten in Echtzeit zum DAC transportieren kann. Solche DACs findet man preiswert in
externen Grafikkarten, die über USB2 oder USB3 angebunden werden! Je preiswerter und weniger kompliziert, desto besser für uns.
Externe Grafikkarten mit dem FL2000 Chip von Fresco Logic sind genau richtig. Diese Grafikkarten haben selbst nicht mal einen eigenen
Grafikspeicher, sondern müssen dauerhaft vom PC mit Echtzeitdaten aus dem RAM des Rechners versorgt werden um ein stabiles Bild
zu generieren. Für uns ideal, nur wo steht geschrieben, das die DACs der Grafikkarte ein VGA-Signal erzeugen müssen? Es gibt sogar einen Softwaretreiber
mit Dienstprogrammen, die diese Fresco-Chips für unseren Zweck "vorbereitet".
Hier erstmal ein Bild einer solchen Billig-Grafikkarte mit USB3-Schnittstelle:
Hier das Innenleben:
Man findet diese USB-Grafikkarten bei ebay und bei Amazon im Bereich unter 20 Euro. Der Hinweis auf eine max. Auflösung von 1920x1080 bei USB3.0 bzw. 800x600 bei USB2 ist fast schon richtungsweisend für den FL2000.
Hat man sich so eine Grafikkarte besorgt, so installiert man den Treiber in einem Unix/Linux - System wie folgt:
Danach sollte man mit
die maximale Transfergeschwindigkeit der Grafikkarte im eigenen System ermitteln. Bei USB3 und halbwegs aktuellen Computern sollten Werte um die 130-150 MS/s erreicht werden, bei USB2 immer noch Werte über 10 MS/s, was immer noch für den Betrieb als Mittelwellensender ausreicht.
Über Oberwellen, die wir natürlich(!) mit einem passenden Bandfilter herausfiltern, kommen wir auch in den DAB, DVB oder sogar GPS Bereich und können uns dort sendetechnisch austoben.
Was brauchen wir noch? Um die Signal aus der Grafikkarte zu bekommen, wäre ein selbstgebautes VGA-Breakout-Kabel auf BNC oder einer der nachfolgenden selbstgebauten Adapter hilfreich.
VGA_Breakout_Schaltplan.png (Größe: 9,98 KB / Downloads: 1.720)
Wie bringen wir den DAC dazu (wir verwenden erstmal nur den Rotkanal-DAC des VGA Signals) ein Sendesignal auszugeben?
Als ersten Schritt müssen wir mit GNU-Radio einen Signalweg zusammenklicken, weder der "dumme" DAC noch der Rechner wissen was wir senden wollen.
Starten wir als ein neues Projekt in GNU-Radio: Wir finden einen leeren Signallaufplan vor und auf der rechten Seite eine Biliothek mit Signalblöcken unterschiedlicher Funktionalität.
Die Signalblöcke lassen sich aus der Bibliothek ganz einfach in den Signallaufplan herüber ziehen. Die Ein- und Ausgänge der Signalblöcke haben unterschiedliche Farben, für jeden Datentypen eine eigene Farbe. Im aufzubauenden Mittelwellensender arbeiten wird fast durchgehend mit dem Datentyp "Float", also Gleitkommazahl.
In der obigen Abbildung sehen wir einen Signalblock, der von der Festplatte eine WAV-Datei (unser Modulationssignal für den Sender) einlesen kann und einen Tiefpassfilter (5kHz-Begrenzung des Modulationssignals). Die Datentypen passen noch nicht zusammen (unterschiedliche Farben)! Wir passen den Signalblock des Tiefpassfilters unseren Parametern an.
Die Samplerate des Tiefpassfilters bleibt auf der Variablen "samp_rate" defaultmäßig stehen, sie beträgt 44,1 kHz und damit auch genau der Samplerate des Modulationssignals in der WAV-Datei. Die Cut-off Frequenz des Filters wird auf 5000 Hz mit einem Übergangsbereich von 100 Hz festgelegt, der Datentyp des Filters in der Combobox auf Gleitkommazahl
gesetzt.
Jetzt haben die Ein-/Ausgänge beider Signalblöcke die gleiche Datentypfarbe und wir können eine logische Signalverbindung zwischen beiden Blöcken herstellen, siehe Bild.
Auf diese Weise bauen wir jetzt mit weiteren Signalblöcken unseren Sender auf.
Lesen tut sich der Signallaufplan etwa so.
1. Wir lesen eine WAV-File vom Dateisystem ein.
2. beide Audiokanäle der in diesem Fall Stereo-WAV, werden zu einem Mono-Signal zusammenaddiert
3. im Tiefpassfilter erfolgt ein Abschneiden aller Signalanteile ab 5 kHz
4. Unser 44.1 kHz Modulationssignal wird mit in einem Rational Resampler 200-fach hochgesampled um auf die in diesem Fall genutze Symbolrate von 8.82M zu kommen, mit
der der ganze Sender im PC läuft.
5. In der Signalquelle wird ein Sinus mit 1.8MHz und 8.82MS/s erzeugt, unser Trägersignal.
Die Amplitudenmodulation erfolgt mathematisch so: HFam(t) = (1+NF(t)) * HFträger(t)
6. Eine Signalverstärkung um den Faktor 128 erfolgt in "Multiply by Const".
Zwischen "Multiply by Const" und "Float To Char" liegen noch zwei Anzeigeinstumente (FFT und Wasserfallanzeige der HF), die aber nur zum Debuggen waren und weggelassen werden können.
7. im Signalblock "Float To Char" wird unser Signal im Datentyp gewandelt um im Signalblock "File Sink" in einer Datei "am_out.dat" weggeschrieben zu werden.
Das war unser AM-Sender, der gleich eine WAV-Datei auf 1.8 MHz in AM ausstrahlen wird.
Klicken wir oben im GNU-Radio auf den "Play-Pfeil", läuft unser Sender automatisch an.
Damit die Daten von am_out.dat im DAC wirklich erzeugt werden, öffnen wir in einem anderen Terminal folgendes Dienstprogramm:
AM_Datei_senden.jpg (Größe: 10,41 KB / Downloads: 1.702)
Mit dem Dienstprogramm fl2k_file wird unsere am_out.dat in der Systemsamplerate 8.82 MS/s kontinuierlich an den Rotkanal-DAC der Grafikkarte weitergeschrieben, wo es über einen passenden Tiefpass und ggf. weiterer Signalkonditionierung abgestrahlt werden kann.
Jetzt kommt der große Vorteil eines SDRs. Im Signallaufplan hantieren wir ja nur mit genau getakteten Zahlenwerten rum. Niemand hindert uns, den Signalverlauf über die Zwischenablage zu verdoppeln, verdreifachen, .....
Als Modulationsquelle wählen wir natürlich immer anderer Dateiquellen von der Festplatte. FIFOs oder Pipes bzw. Soundkarteneingänge gingen an der Stelle ebenso.
Am Ende addieren wir sämtliche HF zu einem Ausgangssignal was wir in eine Datei (FIFO, PIPE, ...) wegschreiben und dann im gleichen Atemzug zum DAC schicken.
Und mit wenigen Klicks haben wir jetzt zwei, drei, ... Sender mit unterschiedlichen Trägerfrequenzen am DAC-Ausgang anliegen.
Im Netz hat dies einer mal ziemlich weit getrieben und einen "Abgleichsender" mit 110 Kanälen und 110 synthetischen Modulationsquellen "aufgebaut".
https://hackaday.io/project/21145-am-ban...ncy-marker
Aber Dank des frei gestaltbaren Signallaufplans sind wir nicht auf 1,2,3... AM, oder FM-Sender beschränkt. Wir können so auch einen DAB+ oder DVB-x Sender zusammenklicken. Fertige Pläne zum Laden in GNU-Radio gibt es dazu hier: https://github.com/steve-m/fl2k-examples selber bauen macht aber mehr Spaß! Vielleicht auch für AM-Stereo ein wunderbares Spielzeug. Und wer das alles durch hat, der kann für weniger als 20 Euro auch seine eigenen GPS-Satelliten in die Luft bekommen.
Viel Spaß beim Senden und Experimentieren in jeder nur erdenklichen Betriebsart!
Gruß
Bernhard 45
vor einiger Zeit habe ich mit Hilfe von SDRs in Form von HackOne und LimeSDR gezeigt, wie man einen eigenen DAB+ Sender für
relativ wenig Geld in den Luft bekommt. Dennoch waren die Kosten im unteren dreistelligen Bereich nicht für jeden Bastler finanzierbar.
Aus diesem Grund habe ich zwischenzeitlich als "Auftragsleistung" immer mal SDRs mit zusammengesampelten ADC/DACs und alten
Klein-FPGA gebaut und zum Selbstkostenpreis abgeben. Die aktuelle Lösung die ich vorstellen möchte, kostet
noch sehr viel weniger, daher der Titel "Universeller Sender für AM, FM, DAB(+), DVB-x, GPS für 20 Euro" oder auch "Ein
ganzes Mittelwellenband voller Sender für 20 Euro".
Was brauchen wir für ein leistungsfähiges SDR welches primär eine "nur" Sendefunktion benötigt? Es sind schnelle Digital-Analog-Wandler mit
einer Schnittstelle, die die Sendedaten in Echtzeit zum DAC transportieren kann. Solche DACs findet man preiswert in
externen Grafikkarten, die über USB2 oder USB3 angebunden werden! Je preiswerter und weniger kompliziert, desto besser für uns.
Externe Grafikkarten mit dem FL2000 Chip von Fresco Logic sind genau richtig. Diese Grafikkarten haben selbst nicht mal einen eigenen
Grafikspeicher, sondern müssen dauerhaft vom PC mit Echtzeitdaten aus dem RAM des Rechners versorgt werden um ein stabiles Bild
zu generieren. Für uns ideal, nur wo steht geschrieben, das die DACs der Grafikkarte ein VGA-Signal erzeugen müssen? Es gibt sogar einen Softwaretreiber
mit Dienstprogrammen, die diese Fresco-Chips für unseren Zweck "vorbereitet".
Hier erstmal ein Bild einer solchen Billig-Grafikkarte mit USB3-Schnittstelle:
Hier das Innenleben:
Man findet diese USB-Grafikkarten bei ebay und bei Amazon im Bereich unter 20 Euro. Der Hinweis auf eine max. Auflösung von 1920x1080 bei USB3.0 bzw. 800x600 bei USB2 ist fast schon richtungsweisend für den FL2000.
Hat man sich so eine Grafikkarte besorgt, so installiert man den Treiber in einem Unix/Linux - System wie folgt:
Code:
git clone git://git.osmocom.org/osmo-fl2k.git
mkdir osmo-fl2k/build
cd osmo-fl2k/build
cmake ../ -DINSTALL_UDEV_RULES=ON
make -j 3
sudo make install
sudo ldconfig
Danach sollte man mit
Code:
fl2k_test -s 162e6
die maximale Transfergeschwindigkeit der Grafikkarte im eigenen System ermitteln. Bei USB3 und halbwegs aktuellen Computern sollten Werte um die 130-150 MS/s erreicht werden, bei USB2 immer noch Werte über 10 MS/s, was immer noch für den Betrieb als Mittelwellensender ausreicht.
Über Oberwellen, die wir natürlich(!) mit einem passenden Bandfilter herausfiltern, kommen wir auch in den DAB, DVB oder sogar GPS Bereich und können uns dort sendetechnisch austoben.
Was brauchen wir noch? Um die Signal aus der Grafikkarte zu bekommen, wäre ein selbstgebautes VGA-Breakout-Kabel auf BNC oder einer der nachfolgenden selbstgebauten Adapter hilfreich.

Wie bringen wir den DAC dazu (wir verwenden erstmal nur den Rotkanal-DAC des VGA Signals) ein Sendesignal auszugeben?
Als ersten Schritt müssen wir mit GNU-Radio einen Signalweg zusammenklicken, weder der "dumme" DAC noch der Rechner wissen was wir senden wollen.
Starten wir als ein neues Projekt in GNU-Radio: Wir finden einen leeren Signallaufplan vor und auf der rechten Seite eine Biliothek mit Signalblöcken unterschiedlicher Funktionalität.
Die Signalblöcke lassen sich aus der Bibliothek ganz einfach in den Signallaufplan herüber ziehen. Die Ein- und Ausgänge der Signalblöcke haben unterschiedliche Farben, für jeden Datentypen eine eigene Farbe. Im aufzubauenden Mittelwellensender arbeiten wird fast durchgehend mit dem Datentyp "Float", also Gleitkommazahl.
In der obigen Abbildung sehen wir einen Signalblock, der von der Festplatte eine WAV-Datei (unser Modulationssignal für den Sender) einlesen kann und einen Tiefpassfilter (5kHz-Begrenzung des Modulationssignals). Die Datentypen passen noch nicht zusammen (unterschiedliche Farben)! Wir passen den Signalblock des Tiefpassfilters unseren Parametern an.
Die Samplerate des Tiefpassfilters bleibt auf der Variablen "samp_rate" defaultmäßig stehen, sie beträgt 44,1 kHz und damit auch genau der Samplerate des Modulationssignals in der WAV-Datei. Die Cut-off Frequenz des Filters wird auf 5000 Hz mit einem Übergangsbereich von 100 Hz festgelegt, der Datentyp des Filters in der Combobox auf Gleitkommazahl
gesetzt.
Jetzt haben die Ein-/Ausgänge beider Signalblöcke die gleiche Datentypfarbe und wir können eine logische Signalverbindung zwischen beiden Blöcken herstellen, siehe Bild.
Auf diese Weise bauen wir jetzt mit weiteren Signalblöcken unseren Sender auf.
Lesen tut sich der Signallaufplan etwa so.
1. Wir lesen eine WAV-File vom Dateisystem ein.
2. beide Audiokanäle der in diesem Fall Stereo-WAV, werden zu einem Mono-Signal zusammenaddiert
3. im Tiefpassfilter erfolgt ein Abschneiden aller Signalanteile ab 5 kHz
4. Unser 44.1 kHz Modulationssignal wird mit in einem Rational Resampler 200-fach hochgesampled um auf die in diesem Fall genutze Symbolrate von 8.82M zu kommen, mit
der der ganze Sender im PC läuft.
5. In der Signalquelle wird ein Sinus mit 1.8MHz und 8.82MS/s erzeugt, unser Trägersignal.
Die Amplitudenmodulation erfolgt mathematisch so: HFam(t) = (1+NF(t)) * HFträger(t)
6. Eine Signalverstärkung um den Faktor 128 erfolgt in "Multiply by Const".
Zwischen "Multiply by Const" und "Float To Char" liegen noch zwei Anzeigeinstumente (FFT und Wasserfallanzeige der HF), die aber nur zum Debuggen waren und weggelassen werden können.
7. im Signalblock "Float To Char" wird unser Signal im Datentyp gewandelt um im Signalblock "File Sink" in einer Datei "am_out.dat" weggeschrieben zu werden.
Das war unser AM-Sender, der gleich eine WAV-Datei auf 1.8 MHz in AM ausstrahlen wird.
Klicken wir oben im GNU-Radio auf den "Play-Pfeil", läuft unser Sender automatisch an.
Damit die Daten von am_out.dat im DAC wirklich erzeugt werden, öffnen wir in einem anderen Terminal folgendes Dienstprogramm:

Mit dem Dienstprogramm fl2k_file wird unsere am_out.dat in der Systemsamplerate 8.82 MS/s kontinuierlich an den Rotkanal-DAC der Grafikkarte weitergeschrieben, wo es über einen passenden Tiefpass und ggf. weiterer Signalkonditionierung abgestrahlt werden kann.
Jetzt kommt der große Vorteil eines SDRs. Im Signallaufplan hantieren wir ja nur mit genau getakteten Zahlenwerten rum. Niemand hindert uns, den Signalverlauf über die Zwischenablage zu verdoppeln, verdreifachen, .....
Als Modulationsquelle wählen wir natürlich immer anderer Dateiquellen von der Festplatte. FIFOs oder Pipes bzw. Soundkarteneingänge gingen an der Stelle ebenso.
Am Ende addieren wir sämtliche HF zu einem Ausgangssignal was wir in eine Datei (FIFO, PIPE, ...) wegschreiben und dann im gleichen Atemzug zum DAC schicken.
Und mit wenigen Klicks haben wir jetzt zwei, drei, ... Sender mit unterschiedlichen Trägerfrequenzen am DAC-Ausgang anliegen.
Im Netz hat dies einer mal ziemlich weit getrieben und einen "Abgleichsender" mit 110 Kanälen und 110 synthetischen Modulationsquellen "aufgebaut".
https://hackaday.io/project/21145-am-ban...ncy-marker
Aber Dank des frei gestaltbaren Signallaufplans sind wir nicht auf 1,2,3... AM, oder FM-Sender beschränkt. Wir können so auch einen DAB+ oder DVB-x Sender zusammenklicken. Fertige Pläne zum Laden in GNU-Radio gibt es dazu hier: https://github.com/steve-m/fl2k-examples selber bauen macht aber mehr Spaß! Vielleicht auch für AM-Stereo ein wunderbares Spielzeug. Und wer das alles durch hat, der kann für weniger als 20 Euro auch seine eigenen GPS-Satelliten in die Luft bekommen.

Viel Spaß beim Senden und Experimentieren in jeder nur erdenklichen Betriebsart!
Gruß
Bernhard 45
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")