Themabewertung:
  • 3 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Universeller Sender für AM, FM, DAB(+), DVB-x, GPS für 20 Euro.
(26.10.2019, 18:13)Bernhard45 schrieb: Dann, du hast drei Signalgeneratoren (für die Trägererzeugung) auf der Endsamplerate von 8.46... M laufen! Hier kann man einiges an CPU-Leistung sparen, wenn man mit niedrigeren Samplerates arbeitet und das Summensignal später nur einmalig auf die Zielsamplerate von 8.46..M resampled.

Das war der Hinweis. Jetzt läuft es auch bei mir besser.


Beispiel

1. 550 kHz  
2. 580 kHz
3. 660 kHz

-> 3x Signalgenerator mit fast 10 MSPS (hohe Auslastung), so also nicht

Stattdessen

1. Träger kurz vor DC ( zum Beispiel 20 kHz)
2. Träger + 30 kHz 
3. Träger + 80 kHz

Jetzt ist die Berechnung viel schneller, das Basisband liegt fast noch im Bereich moderner Soundkarten (192kHz). Die 3 Signalgeneratoren haben also nur hunderte kHz an Samplerate

CPU Auslastung im Bereich einer Audiobearbeitung.


Summe Basisband -> Filter (Interpolieren), also Resampling auf Samplerate des Fl2k. Auffüllen mit Nullen ist kaum rechenintensiv.

dann um Lo hochschieben mit 1x Signalgenerator mit Samplerate des Fl2k
Zitieren
Also, ich hab Ottos letzten Vorschlag (BENFEI) mal bestellt, da ich selbst nicht mehr daran geglaubt habe noch FL2ks ohne vergossenes Gehäuse zu bekommen. Es sind tatsächlich noch FL2k drin.   Smiley34 Danke für den Tipp.
Code:
fl2k_test
Kernel mass storage driver is attached, detaching driver. This may take more than 10 seconds!
Allocating 6 zero-copy buffers
Reporting PPM error measurement every 10 seconds...
Press ^C after a few minutes.
real sample rate: 100001852 current PPM: 19 cumulative PPM: 19
real sample rate: 100002479 current PPM: 25 cumulative PPM: 22
real sample rate: 99998323 current PPM: -17 cumulative PPM: 9
real sample rate: 100004832 current PPM: 48 cumulative PPM: 19
real sample rate: 99998315 current PPM: -17 cumulative PPM: 11
real sample rate: 100003424 current PPM: 34 cumulative PPM: 15
real sample rate: 100000980 current PPM: 10 cumulative PPM: 15
^CSignal caught, exiting!
Leider ist auch bei dieser Variante der Mass Storage als Treiberhost aktiv gestellt. Aber da darf man nicht mehr scheckig sein, denke ich.
Zitieren
Question 
Was ich vor längerem schon vor hatte, ist I/Q Samples aus der bekannten "https://github.com/fsphil/dsr/" Applikation über den FL2k zu modulieren. BM45 war damals sehr überzeugt, dass es gehen müsste.  Tatsächlich können zwar PX Signale über den DSR Receiver empfangen werden, es erfolgt aber keine De-Modulation. Die Gegenprobe über einen HackRF war hingegen erfolgreich. 
Am I/Q File selbst kann es also nicht liegen. 
Bei >12MHz Bandbreite komme ich aber auch schon ziemlich an die Grenzen des FL2k Basisbands heran? Auf dem tinySA sieht das Signal auch schmaler aus, als auf dem HackRF was den Verdacht erhärtet. Welche Bandbreiten sind denn überhaupt realistisch hier wenn es um breitbandiges PX über FL2k geht?
   

Mod-Hinweis: Bilder bitte in den Beitrag einfügen und dann den Beitrag aktualisieren.
Zitieren
Die mögliche theoretische Bandbreite zeigt fl2k_test an. B ei 160 also 80 MHz Bandbreite. Aber das ist Theorie die nur das Bild zwischen USB-Controller und FL2k zeigt. Um das nutzen zu können muss dein PC ein 80 MHz breites Signal in Echtzeit unter Gnuradio berechnen können oder die Sendedatei muss so schnell von der Festplatte gelesen und zu USB übertragen werden können.
Ich vermute du bist an die Grenzen der USB-Schnittstelle oder allgemein deines PC gekommen. Schafft dein Rechner denn diesen gezeigten Flowgraphen zu berechnen?

Ich sehe zusätzliche  Probleme in

1. Eingangssamplerate 10.24 MSPS. Stimmt das mit der Konfiguration https://github.com/fsphil/dsr/blob/master/example.conf 

[output]
;type = file ; Output to a file
;output = signal.iq ; Write to "signal.iq"
;data_type = float ; uint8|int8|uint16|int16|int32|float
;sample_rate = 20480000 ; Or any multiple of 10240000

beim HackRF steht ja sample_rate = 20480000 ; Or 10240000, but signal quality may suffer
Der HackRF macht das aber intern was du hier mit GNU Radio berechnest, also stimmen seine Werte.
Hier in GNU Radio kann aber die falsche Samplerate  sein, dann schaut das Signal im SpectrumAnalyzer auch schmaler oder breiter aus. Je nach dem wie das Missverhältnis zur tatsächlichen Samplerate ist. Ich vermute 20.48 MSPS IQ aber nur 10.48 MSPS in Gnu radio, Signalbreite ändert sich.

 Probleme auch bei der Samplerate von 102.4 MSPS in den Signalgeneratoren.
1. Schafft das dein PC in Realtime? Du überträgst diese riesige Datenmenge ja in TCP live an fl2k_tcp. Selbst wenn die Samplerates im IQ File und GNU Radio stimmen, aber während der TCP Datenübergabe Pufferprobleme oder Geschwindigkeitsänderungen auftreten, wirkt das wie ein Resampling auf die falsche Rate mit der Folge das das Signal im Analyzer wieder seine Breite ändert oder kurz ganz ausfällt. Die Erklärung liegt im fehlenden Puffer und wie die fl2k Programme die Daten zur Übertragung takten. Das sehe ich im Quellcode weil ich das fl2k_file gerade umschreibe und erweitere. Sobald der PC an seine Grenzen kommt, stimmen die Timing-Zeiten nicht mehr was wie eine neue Samplerate wirkt.

Für Frequenzen im 100 MHz Bereich und mehr konfiguriert man besser so, weil der fl2k ja keinen Up-Mixer verbaut hat. Im HDRadio Demo des Fl2k wird das so gemacht

[Bild: attachment.php?thumbnail=71609]


Die Var n_harmonic steht hier bei 10 nicht auf 1 wie bei dir. Damit ist die Samplerate im GNURadio im Bereich die ein mittelstarker PC in Echtzeit ohne Pufferprobleme schafft. Für DSR muss es mehr sein als in der Demo aber 102.4 MSPS sind arg viel. Die deviation gleicht den Frequenzfehler aus,sonst bekommt der Empfänger keinen lock oder rastet sporadisch wieder aus. Der Wert unterscheidet sich bei meinen fl2k immer und muss am Spektrumanalyser mit Konstellations-Anzeige oder versuchsweise ermittelt werden (bis der Empfänger immer einen lock hat).

2. Kannst du die Samplerate von 102.4 MSPS genau am FL2k einstellen? Bei mir klappt das nicht, ich habe da einen Error. Das gibt eine fehlerhafte Übertragung zum Empfänger wenn das nicht durch resampling angepasst wird.


Das waren meine Probleme die ich bei DSR (oder überhaupt) mit fl2k umschiffen musste. Dann funktionierte es aber gut. Die üblichen Warnhinweise kennst du bestimmt, Filter, DC Block und Att. vor den RX, sonst wird er übersteuert und dann geht es auch nicht.


Ich habe noch einen weiteren Artiekl bei Amazon gefunden der fl2k haben müsste.
Zitieren
Hallo Otto,
vielen Dank erstmal für deine schnelle, ausführliche Antwort!  Thumbs_up

Bezüglich Sampling Rates des DSR Encoders: Ich habe es natürlich auch mit 20480000 probiert. Da ist es aber so, dass es am HackRF nicht mehr direkt im "Lifebetrieb" mit ffmpeg funktioniert hat. Ich war deshalb skeptisch und habe mich erst einmal auf 10240000 eingeschlossen. Über den Umweg mit I/Q Datei läuft der HackRF mit beiden Raten aber problemlos.
Somit denke ich sind wir dann wieder im Reich der Performance Probleme.
Der Rechner ist ein Eprimo Thinclient I5 der 8.Generation(8400T) mit Ubuntu22.04.4LTS als Host . Ist jetzt kein Überflieger aber auch kein Celeron. Sorgen macht mit eher die schlechte USB Performance.. immer so um ~100e6 herum... geht dann mitunter während des Tests auch mal in Richtung 133e6 aber nie höher.. 

Ich werde mal bei Gelegenheit den Flowgraph nach deiner Empfehlung umbauen. Letztlich denke ich auch, dass der Rechner die Daten nicht schnell genug an den pufferlosen Fresco-Logiker leifern kann. Die Ausgabe ist auch immer mit "Underflow! Skipped 1..2 buffers" begleitet. Meiner Ansicht nach kein gutes Zeichen... Bei AM Basisband Erzeugung im Sampling-Beriech 8e6 macht fl2k_tcp das natürlich nicht...
Python gönnt sich während der Ausführung so ~400% CPU Last. Bis 600% kann die CPU ja arbeiten...
Am RX (Sony 1000ES) ist ein DC Blocker und mehrere BNC Adapter dazwischen. Die Pegel sehen im tinySA noch "human" aus
Zitieren
Ich hab mal versucht die Sache etwas zu vereinfachen.  
   
Die Ausgabe im Spektrum des FL2k sieht die dem HackRF schon mal sehr Ähnlich aus. Ein eigentlich sauberes Rechteck mit ca. 12-14Mhz Bandbreite. Die 2. Harmonische liegt bei ca 61MHz. Der Sony empfängt das Signal, aber nach wievor kein Log.  Was mich aber verwundert ist, das das I/Q Signal nach dem Rational-Resampler komplett verhackschnitzelt wird.
Ich meine da kann ich verstehen, wenn da im Receiver nix bei raus kommt. Wie resampled man I/Q Signale "fachgerecht" damit der Inhalt auch erhalten bleibt?
   
Zitieren
Hallo Janosch,

Ich habe das Projekt nur überflogen, verstehe aber, dass Du vor hast ein DSR Signal zu erzeugen? Vermutlich wird das mit dem FL2K und den Frequenzen um 40-100MHz nicht klappen wegen diverser Performance Probleme. Nur eine paar Gedanken dazu von meiner Seite:

- Wäre es nicht besser die komplette I/Q Modulation in der komplexen Ebene zu machen? Also ein Sinusgenerator mit 40,96 MHz und ein Multiplizierer in der komplexen Ebene das ist das gleiche wie das was Du machst also zwei Multiplizierer für Real-  (I) und Imaginärteil (Q). Dann erst am Ende das Ganze in Float umwandeln.

- Als HF Techniker würde ich das Signal in einer Zwischenfrequenz (ZF) erzeugen so ca. 10-20MHz. und dann mit analogen mitteln Das Ganze auf eine höhere Frequenz bringen. Das ginge z.B. mit einen SA612 Mischer IC recht einfach. Gut ein paar analoge Filter müsste noch an den Ausgang aber das kannst Du mit dem freien Programm "Elsie" leicht berechnen.

Ich hoffe ich liege hier mit meinen Überlegungen nicht total daneben. Als weiteren Vorschlag würde ich dieses Thema DSR in einem gesonderten Thread unterbringen um nicht verschiedenen Themen die nur den FL2K gemeinsam haben zu vermischen.
Viele Grüße
Semir
---------------------------------
"Alle sagten: Das geht nicht. Dann kam einer der wußte das nicht, und hat es gemacht."
(Prof. Hilbert Meyer, Uni Oldenburg)
Zitieren
Hallo Semir,
ja, quasi angefixt bin ich ja schon vor längerem von Bernhard in diesem Faden (https://radio-bastler.de/forum/showthrea...#pid206732). Ist vlt. auch der passendere Thread. Und passender als mit dem Spruch in deiner Signatur kann man den Vorgang auch kaum beschreiben... Nur hat mich meine Unwissenheit hier auch kaum weiter gebracht... :-) Den Ansatz mit der komplett komplexen Sturktur hatte ich sogar auch schon erfolglos versucht. Alle anderen Beispiele bezüglich I/Q-Modulation verfolgen in den Osmocom Beispielen aber den Umweg über float Konvertierungen.
Ich denke aber auch wie gesagt, die fragwürdige Interpolation mit den vielen Filtermöglchkeiten verwirrt mich besonders. Nehme ich nun einen FIR oder Rational Resampler, und welche Auswirkungen hat das auf die I/Q Samples..?. Bei analogen Modulationen ist dann durch falsche Frequenzlage oder Mickeymausstimmen alles klar, aber bei digitalen Modulationsarten ist eben ohne passende Analysatoren nix zu reißen. Es gibt einfach keinen log im RX. Und ja, die Grenzen des Systems nach oben sind eben nur theoretisch beschrieben...
Zitieren
(18.02.2024, 18:28)janosch79 schrieb: aber bei digitalen Modulationsarten ist eben ohne passende Analysatoren nix zu reißen

Diese Analysatoren hast du alle vor dir. Mache es wie die Universitäten und die Industrie, nutze GNU Radio mit dem du das Signal erstellt hast!
Du kannst auch aus dem gesendeten Signal wieder eine Konstelllationsanzeige mit allen Fehlerberechnungen machen und den Bitstrom erzeugen. Du kannst damit sogar Ausbreitungswege und Kanalstörungen simulieren.
Nur der DSR-Decoder für Audio fehlt, wobei man den Datenstrom aber zunächst mit mit einem Hexeditor prüfen kann.
Sieht man die Senderkennungen? Dann wird der Rest auch erstmal stimmen. 

Wenn du gnu radio nicht zur Signalprüfung nehmen willst gibt es einen Haufen anderer Signalanalysatoren wie SigDigger. Du kannst auch kostenlose Testversionen von Kaufsoftware benutzen mit denen man die berechnete HF über Datei oder TCP wieder einlesen kann, als wäre sie wirklich OTA gekommen  https://de.mathworks.com/help/signal/ref...r-app.html  R&S, Agilent alle haben sie irgendwo auf ihren Seiten passende Trialsoftware die mindestens ein File einlesen kann. Die Software braucht aber Lust zur Einarbeitung, sonst kannst du sie nicht bedienen und die Anzeigen sagen dir nichts.

Ich würde das nutzen was schon da ist, GNU Radio. Der Performence wegen auf einem zweiten PC, beide über Ethernet/File verbunden. Der eine Sender, der andere Empfänger und Analysator.



Ich versuche hier meinen Quick'n Dirty DSR Versuch von heute früh zu beschreiben. (vielleicht kann jemand damit was anfangen)

Dabei setze ich voraus das gnuradio, dsr-encoder mit ffmpeg, fl2k richtig installiert sind.

1. DSR Multiplex konfigurieren

Dazu gibt es ja diese Datei https://github.com/fsphil/dsr/blob/master/example.conf

Ich habe meine so abgeändert damit sie halbwegs zu euren bisherigen Experimenten passt.



; Example configuration file for dsrtx.

; Enable verbose output (defaults to false)
verbose = true

; Only one output may be defined each time

[output]
;type = hackrf ; Output to a hackrf
;frequency = 855e6 ; Transmit on 855MHz
;sample_rate = 20480000 ; Or 10240000, but signal quality may suffer
;gain = 47 ; Control the TX gain
;amp = false ; Control the TX amplifier (default false)

;[output]
type = file ; Output to a file
output = signal.iq ; Write to "signal.iq"
data_type = float ; uint8|int8|uint16|int16|int32|float
sample_rate = 20480000 ; Or any multiple of 10240000


[channel]
channel = 1 ; This is channel 1
name = TEST1000
type = tone     ; Generate a test tone
frequency = 1000 ; Set the tone to 330 Hz
level = 0.1 ; Audio level is 0.1


; Channel 2 is a 330 Hz test tone (Stereo)

[channel]
channel = 2 ; This is channel 2
name = TEST330
type = tone ; Generate a test tone
frequency = 330 ; Set the tone to 330 Hz
level = 0.1 ; Audio level is 0.1

[channel]
channel = 3
name = "DK DR1"
program_type = 10 ; See below for a full list of program types
music = true
input = ffmpeg -i http://live-icy.gss.dr.dk:8000/A/A04H.mp3 -ar 32000 -ac 2 -f s16le -
exec = true ; The input is a command, not a file. Audio is read
; from the command stdout



; Available program types:
;
; No | Program type                  | Short term
;  0 | No programme type or undefined |
;  1 | News                          | NEWS
;  2 | Current affairs                | AFFAIRS
;  3 | Information                    | INFO
;  4 | Sport                          | SPORT
;  5 | Education                      | EDUCATE
;  6 | Drama                          | DRAMA
;  7 | Culture                        | CULTURES
;  8 | Science                        | SCIENCE
;  9 | Varied                        | VARIED
; 10 | Pop music                      | POP M
; 11 | Rock music                    | ROCK M
; 12 | M.O.R. music                  | M.O.R. M
; 13 | Light classical                | LIGHT M
; 14 | Serious classical              | CLASSICS
; 15 | Other music                    | OTHER M




Ausgabe in Datei signal.iq mit 20.48 MSPS, 3 Testkanäle

Kanal 1 - 1 kHz Testton mit Kanalkennung TEST1000
Kanal 2 - 330 Hz Testton mit Kanalkennung TEST330
Kanal 3 - Eine Internetradiostation die wir bereits in der Defaultliste vom iRadioAndroid haben, diese wird direkt vom Encoder empfangen und konvertiert, Kanalkennung DK DR1

alles abspeichern!

DSR Encoder aufrufen und laufen lassen.

./dsrtx -c /home/testuser/dsr/example.conf

Jetzt gibt der DSR Erzeuger einen Haufen bla bla aus und man sieht wie er das DSR Signal erzeugt. Ich lasse ihn etwas laufen, damit wir genug Material für den I/Q Modulator haben.


2.Jetzt zum I/Q Modulator
er ist in der Technischen Richtlinie zum DSR-Format abgebildet


 [Bild: attachment.php?thumbnail=66366]


ich baue das Ding in GNU Radio nach, beziehungsweise nehme ihn aus der DVB-T Demo des FL2k und passe ihn an. Es ist ja nichts geheimnisvolles dran, jedes SDR funktioniert im DUC oder DDC im Prinzip so

   

Die Frequenzabweichung ppm lasse ich zunächst bei 0.
 Ich suche mir passende Übertragungsparameter die das Abtasttheorem erfüllen. Hier ist es jetzt n_harmonic 3 , In 20.48 MSPS Out 40.96 MSPS, also einfaches Resampling mit Faktor 2 (wir schauen später nach ob wir den Fehler am fl2k so lassen können oder nochmal resamplen), Sendefrequenz ist somit 112 MHz (kann man am DSR Tuner einstellen), Die beiden Signalgeneratoren haben 10.88 MHz bei Samplerate 40.96 MSPS, passt auch. Für meine Testumgebung liegt jeder Parameter im grünen Bereich.

Berechnetes 112 MHz Signal wird in die Datei fl2k_dsr.out geschickt.

Jetzt lasse ich gnu radio laufen damit mir die vorher vom DSR Encoder erzeuge IQ Datei moduliert wird.


3. errechnetes 112 MHz Signal ausgeben

zunächst teste ich mit fl2k_file ob ich mit der Samplerate von 40.96 MSPS gut hinkomme, der fl2k Adapter hängt an einer USB3 Schnittstelle

Ergebnis

Requested sample rate 40960000 not possible, using 40952378.000000, error is -7622.000000


40.96 MSPS geht nicht aber der Fehler ist für eine Quick'n Dirty Lösung nicht so groß das man es nicht mal versuchen könnte !

Also sende ich die berechnete HF zum fl2k

fl2k_file -s 40960000 fl2k_dsr.out


Das FL2k ist schon mit dem DSR Empfänger verbunden, ich gehe in den DSR Modus und tune auf 112 MHz


Kanal 1 mit richtiger Kennung, kein Programmtyp (den haben wir ja nicht vergeben) und es tönt ein klarer 1 kHz Ton


.jpg   kanal1.jpg (Größe: 10,31 KB / Downloads: 439)


Kanal 2 mit richtiger Kennung, kein Programmtyp (den haben wir hier ja auch nicht vergeben) und es tönt ein klarer 330 Hz Ton


.jpg   kanal2.jpg (Größe: 13,65 KB / Downloads: 439)

Kanal 3 mit richtiger Kennung, Programmtyp 10 = POP (was aber nicht zum gesendeten Inhalt der Station passt, Klassik wäre passender, also Wert 13 oder 14 in der DSR-Konfigdatei), Ton klar und deutlich in Stereo vom Dänischen Radio


.jpg   kanal3.jpg (Größe: 9,4 KB / Downloads: 439)


Der Empfänger bleibt jetzt schon auf dem Signal gelock-ed, ein Resampling mit dem Error bei dem Gerät noch nicht nötig, die Frequenzabweichung ist so gering das der DSP im Empfänger das hinbekommt.  Für Quick'n Dirty war das ein Erfolg. Jetzt kann man noch anfangen und das Signal genau einzumessen und optimieren. Mit anderen Datentypen die nicht gerade Float (Ressourcenfresser) sind kann man den DSR-Encoder und auch den Modulator noch viel effizienter machen. Dazu fehlt mir aber die Lust an diesem Montagmorgen, da ich gleich zum Arzt fahren muss und ein paar andere Gedanken im Kopf sind.

Gruß
Otto
Zitieren
Ich bin zurück und bevor das "Gift" mich für ein paar Tage zum Zombie macht  eine Übersicht aus dem Livebetrieb.

Ich habe das Trio DSR Encoder -> GNU Radio -> fl2k  dauerhaft laufen lassen und den Audioausgang als Trigger genommen. Es gab in der ganzen Zeit vom Empfänger kein Ausrasten des Signals oder Abbruch der Dekodierung . Die Last auf meinem sehr alten Laptop (2 CPU  und 20 Jahre alt)  liegt für 3 Kanäle im guten bereich. Vielleicht geht noch ein 4 ter Kanal

   


Wie die Berechnung der Verschiebung durch den IQ-Modulator/Mixer erfolgt steht in den Bausteinen, (n_harmonic*out_rate)-tx_freq das ist dann die Frequenz mit denen die Signalgeneratoren arbeiten.
Man erhält also logischerweise auch ein Signal bei 40.96 + 10.88 , 81.92 - 10.88 ............. auf das man tunen könnte, wenn es der RX kann. Diese werden aber je nach Qualität des Bandpasses mehr oder weniger stark hinter dem DAC ausgefiltert.
Auf diese Weise kommt man hoch bis in den GHz Bereich und kann zum Beispiel auch DATV über QO 100 generieren. Das war das ganz einfache Beispiel wie es beim Fl2k in den Demos gezeigt wird, mit ein bisschen rumrechnen und resamplen kommt man auch auf andere gewünschte Frequnezen. Wenn man mehr Live kanäle haben will, pro DSR Kanal sind 16 Audiochannels möglich, wird die Sache rechenintensiver.

Semir auch dein Ansatz geht natürlich und ich habe den Flowgraphen jetzt mal entsprechend aufgebaut.
Signalgenerator auf 11,8 MHz und mit man ist genau drauf. Allerdings funktioniert jetzt bei mir dann kein Live-Betrieb mehr, mit dem I/Q Mod/Mix problemlos. Was wird da soviel mehr gerechnet?

Otto
Zitieren
(19.02.2024, 14:17)OttoBerger schrieb: Was wird da soviel mehr gerechnet?

Vergessen zu sagen, die Samplerate 40.96 MSPS habe ich natürlich zum Vergleich gelassen.
Zitieren
Die Frage warum der I/Q Modulator im Vergleich zu Semirs vorgeschlagene Multiplikation im komplexen Bereich so viel schneller läuft liegt  in den Rechenschritten die dafür nötig sind.  Man kann die GNU Radio Implementierung des NCO Blocks im komplexen und der dazugehörigen Multiplikation für komplexe Zahlen ansehen.

Bei der IQ Modulator Sache die in allen Demos genutzt wird, wird nur der komplexe Eingangsvektor i[0]q[0]i[1]q[1]....i[n]q[n]   nach i und q aufgespalten, das geht einfach über Index (gerade/ungerade) und kostet nichts. Dann nur eine Multiplikation aus dem NCO für jeden Step() und dahinter wieder eine einfache Addition (i+q). Man kommt nicht wieder in die komplexe Zahlenebene/Datentyp zurück, sondern hat dann sofort die HF die nur noch für den DAC skaliert wird (wieder eine Multiplikation).


Bei der Multiplikation in der Komplexen Zahlenebene ist das komplizierter. Ohne den NCO selbst zu betrachten, werden in der GNU Radio Blockimplementierung aus zwei (float) Multiplikationen  4 float Multiplikationen und eine Addition und eine Subtraktion. Dann wird das wieder zur Komplexen Zahl, die von uns wieder in 2xFloat + Add für den DAC herbereitet werden muss + Skalierung. Dazu noch die Ops im NCO!   Das ist aber nur der Fall wenn man die Fast-Blöcke nutzt, für die Standardblöcke gilt

/ The built-in complex.h multiply has significant NaN/INF checking that
// considerably slows down performance.

Also nochmals langsamer als schon beschrieben. Das ist ein signifikantes Problem wie man über Suchmaschinen herausfinden kann. Es wurde von einer weiteren Verlangsamung um den Faktor 30-50 berichtet!

Ich denke auch wenn man GNU Radio mit maximaler Optimierung kompiliert bleibt ein Überhang an Operationen, der einen Weg ohne I/Q Modulator immer unattraktiver macht.  Vielleicht gibt es spezielle und trickreiche Rechenwerke, dazu die passenden Kompiler die noch was an Gewinn bringen. Nicht in meinen genutztem Uralt-PC mit Standard CPU und Ausrüstung.

Ich beende den DSR Versuch erfolgreich und baue die Testinstallation wieder ab.

Otto
Zitieren
Zitat:Ich bin zurück und bevor das "Gift" mich für ein paar Tage zum Zombie macht  eine Übersicht aus dem Livebetrieb.
Hallo Otto,
wenn ich richtig vermute um was es dir hier geht, natürlich zu allererst die Besten Wünsche und viel Kraft. Da ist alles andere sowas von unwichtig.
-
Trotz allem zurück zu GNURadio und auch erst einmal "Vielen Dank" für deine Mühe das Promblem nachzustellen. Ich kann jetzt sicher sein, dass es auf jeden Fall machbar wäre. Thumbs_up
Habe alles penibel genau nachgebaut und trotzdem nicht erfolgreich. (Gut mein Sony als RX ist vlt. gegen SamplingRaten Fehler empfindlicher...) Die Signale auf dem tinySA sind weiter überzeugend, der Pegel am RX wird vernommen, nur erfolgt wieder kein Log. Weder über den Umweg- Output Datei noch direkt über TCP.
Ich konnte leider nicht weiter analysieren, wo in der Kette der Fehler liegt...  nur Prüfen, ob der generierte Output mit dem HackRF direkt funktioniert. (Dazu habe ich die AusgangsSR von dsrtx auf 10240000 reduziert und auf int8 umgestellt). HackRF_Transfer kann die 20.48e6 nicht schlucken (USB2). Die DSR-Config aber funktioniert. Die Wiedergabe über Hackrf_Transfer spielt letztlich.
 
Wieder zurück auf float/20480000 kann es zwar im GNURadio verarbeitet werden, nur sieht das Constellation Diagramm nach dem Rational Resampler wieder richtig "bescheiden" aus... Langsam werde ich den Gedanken nicht los, das irgendetwas mit meinem GNURadio selbst nicht passt... 

VG  Jan
Zitieren
Danke Jan!

Funktion mit Fl2k auf Sony 1000 DSR kann ich bestätigen, den hatten wir auch schon laufen. Vielleicht ein paar ppm / Hz drüber oder drunter nochmal versuchen,

Otto
Zitieren
(16.02.2024, 15:46)Semir schrieb:
(16.02.2024, 11:18)OttoBerger schrieb: Hat eigentlich schon mal jemand mit mehreren DACs des FL2k gleichzeitig gearbeitet? Ich meine nicht mit mehreren FL2k's wie das die Dienstprogramme über "\t[-d device_index (default: 0)]\n" anbieten, sondern direkt mit allen 3 Kanalbuffern in einem Fl2k.

Hallo Otto,

nein das habe ich nicht, aber es würde mich interessieren. Ich sehe da zwei Möglichkeiten:

Hallo Semir,
ich glaube ich versuche etwas umzusetzen was bereits umgesetzt wurde.
https://github.com/vrunk11/fl2k_2/blob/m...l2k_file.c

aus dem Fork https://github.com/vrunk11/fl2k_2

Die Samplerate muss nicht bei Default 100 MSPS oder PAL / NTSC gesetzt sein, sondern ist frei wählbar

case 's':
if((strcmp(optarg, "ntsc" ) == 0) || (strcmp(optarg, "NTSC" ) == 0) || (strcmp(optarg, "Ntsc" ) == 0))
{
input_sample_rate = (uint32_t) 14318181;
}
else if((strcmp(optarg, "pal" ) == 0) || (strcmp(optarg, "PAL" ) == 0) || (strcmp(optarg, "Pal" ) == 0))
{
input_sample_rate = (uint32_t) 17734475;
}
else
{
input_sample_rate = (uint32_t)atof(optarg);
}


gain kann für die Kanäle alle bei 0 bleiben und das RGB Geraffel muss man auch nicht über die Befehlszeile nutzen.
Statt der Videokanal-Dateien für R,G,B gehen hier die HF-Sampledateien aus GNU Radio oder womit man seine Hochfrequenz berechnet hat rein.

Die 3 RGB Threads werden auch synchronisiert. 

Damit wäre es möglich alle drei Kanäle des FL2K DAC unabhänig zu besenden. Entweder so wie du vorgeschlagen hast, verschiedene Stücke der MW oder vielleicht macht ein Kanal eine Internetradio -> MW Umsetzung, der zweite Kanal setzt die Kanäle auf FM(UKW) um und bei ganz starken PCs mit viel Power / RAM noch ein Kanal für DAB Multiplex
Zitieren
Das klappt alles zu gut.  Smiley34
 
Ich kann unabhängig auf allen drei Kanälen des Fl2k-Adapters verschiedene Wellenformen und Sendedateien ausspielen.

Das abgeleitete Projekt findet ihr auf dem BM45 github

https://github.com/BM45/fl2k_2_rgb/

   

Zunächst muss ich für jeden Kanal den ich benutzen möchte eine RF Datei mit Werkzeugen wie GNU Radio erstellen.

[Bild: gnuradio_to_fl2k_file2.jpg]

Danach kann ich die Dateien beliebig auf die gewünschten Kanäle übertragen.

Code:
To send an RF broadcast file on the Red Channel:

./fl2k_file2 -u -s 7777777 -R8 -R r_out.bin  -VmaxR 0.7 -not_tbcR

To send RF on Red and Blue Channel

./fl2k_file2 -u -s 7777777 -R8 -R r_out.bin  -VmaxR 0.7 -not_tbcR  -B8 -B b_out.bin -VmaxB 0.7 -not_tbcB

To send RF on all 3 DACs

./fl2k_file2 -u -s 7777777 -R8 -R r_out.bin  -VmaxR 0.7 -not_tbcR  -G8 -G g_out.bin  -VmaxG 0.7 -not_tbcG -B8 -B b_out.bin -VmaxB 0.7 -not_tbcB

R8 G8 B8 => weil es 8 Bit Daten sind
--not_tbc[X] => weil es keine TBC Dateien sind
-Vmax[X] 0.7 => maximum output voltage for channel X (0.003 to 0.7) (scale value) (disable Cgain and Sgain)

-R .... => Sendedatei R - Kanal
-G .... => Sendedatei G - Kanal
-B ... => Sendedatei B -Kanal

Die Übertragung mehrere Mittelwellenbänder mit jeweils mehreren Stationen ist mir ebenso geglückt. Ich kann auch auf einem Kanal auf der Mittelwelle in AM und mit einem I/Q Modulator auf einem anderen Kanal hoch auf UKW gehen und FM Stationen senden! 

In allen Fällen braucht der DAC nach dem Sendestart ein paar Momente bis er stabil läuft, ich vemute mein alter Recher braucht ein paar Augenblicke bis er den USB3 Datenstrom stabil senden kann. (Die Sache weil der FL2k Adapter keinen eigenen Puffer hat).
Zitieren
Hallo zusammen,
wie bekomme ich es eigentlich hin, einen Live-Stream mit VLC zu Streamen um ihn in GNU-Radio als Audio-Quelle zu nutzen. In den Beispielen hier werden immer nur statische WAV Files als Audioquelle benutzt (Wav File Source). Angeblich lassen sich ja mit VLC in RAW gesammelte Streams verarbeiten. Nur scheitern schon bei mir eine UDP-RAW Verbindung über bspw. 127.0.0.1:25000 zu einem anderen VLC. Und VLC unterscheidet noch zwischen RAW oder WAV  als Verkapselung. Aber eigentlich möchte ich ja überhaupt keine Verkapselung sondern eben den RAW Audio-Stream streamen... ?!   VG Jan
Zitieren
(23.02.2024, 22:55)janosch79 schrieb: Hallo zusammen,
wie bekomme ich es eigentlich hin, einen Live-Stream mit VLC zu Streamen um ihn in GNU-Radio als Audio-Quelle zu nutzen. In den Beispielen hier werden immer nur statische WAV Files als Audioquelle benutzt (Wav File Source).

Nicht überall werden statische WAV Files genutzt. An Stelle des Wav File Blocks wird der Audio Source Block genommen.

https://radio-bastler.de/forum/showthrea...#pid163773

Virtuelle Soundkarten sind mit das einfachste Mittel PCM-Samples kanalgetrennt an GNU Radio zu streamen.

https://wiki.gnuradio.org/index.php/Audio_Source
Zitieren
Danke Otto für den Link,
ich hab es mit den Lifestreams hinbekommen.
Der DLF sendet endlich wieder über Mittelwelle... Smiley20
 
Ergänzend zu Semirs Ansatz kann ich noch sagen die ".asoundrc" ist nicht optional, sondern essentiell damit GNURadio die Loopback Adapter zuordnen kann.    Siehe auch 2. Absatz hier: https://wiki.gnuradio.org/index.php/ALSAPulseAudio

Wieder auch was gelernt, was es mit den "." in den Dateinamen auf sich hat.

Leider ist es mir noch nicht gelungen das .pasetup.sh script in rc.local auszuführen. rc.local unterstützt Ubuntu 22 wohl nicht mehr..
Also ist nach einem Reboot erst mal wieder Handarbeit gefragt...
Dann habe ich noch den Bug, dass ich VLC nicht automatisch starten kann. Ich muss händisch VLC öffnen, den Stream Starten und dann die Ausgabe auf VSC1..4 legen. Über die Konsole ist es mir noch nicht gelungen. Ein "vlc" im Terminal wird mit : VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2) quittiert. Das was dann... Wie gesagt über Icon-Klick startet VLC normal... !?

VG Jan
Zitieren
(25.02.2024, 22:35)janosch79 schrieb: Leider ist es mir noch nicht gelungen das .pasetup.sh script in rc.local auszuführen. rc.local unterstützt Ubuntu 22 wohl nicht mehr..

Es gibt viele Wege unter  Linux, Unix den Start zu beeinflussen, rc.local ist ein seit Ewigkeiten bestehender Weg, den es immer noch gibt auch wenn bei vielen Distributionen vielleicht so eine Startdatei nicht mehr mitgeliefert wird und andere Wege genutzt werden um Distributionsdienste zu starten. https://manpages.ubuntu.com/manpages/nob...tor.8.html


(25.02.2024, 22:35)janosch79 schrieb: Dann habe ich noch den Bug, dass ich VLC nicht automatisch starten kann. Ich muss händisch VLC öffnen, den Stream Starten und dann die Ausgabe auf VSC1..4 legen.

Über die Konsole ist es mir noch nicht gelungen. Ein "vlc" im Terminal wird mit : VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2) quittiert. Das was dann... Wie gesagt über Icon-Klick startet VLC normal... !?

Wenn VLC über die Konsole gestartet wird und nur seine Version ausgibt, dann wird man wahrscheinlich die Streaming URL nicht richtig angegeben haben und VLC hat kein Eingangssignal. Über die Konsole gestartet bietet sich der Befehl cvlc an, die Kommandozeilenversion damit die Nutzeroberfläche nicht gestartet werden muss was Ressourcen spart.

Übersicht aller Befehle/Optionen für vlc und cvlc https://wiki.videolan.org/VLC_command-line_help/

Anwendungsbeispiele im Script vlcd des iRadio-Paketes.

Ohne zu sehen was du in die Konsole geschrieben hast und welche Meldungen vollumfänglich ausgegeben werden können wir keine Hilfestellung geben.

Otto
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
Music KW-SW Sender radio_bs 24 1.012 23.04.2024, 08:53
Letzter Beitrag: Stefan02
  Duschkorb-AM-Sender saarfranzose 8 478 02.04.2024, 20:48
Letzter Beitrag: nflanders
  MW-Sender mit ESP32 DrNeurosurg 23 4.851 06.02.2024, 14:56
Letzter Beitrag: navi
  DRM - Sender mit Fl2K-Grafikkarte Bernhard45 0 2.066 21.04.2020, 09:47
Letzter Beitrag: Bernhard45
  HDRadio / IBOC Sender mit FL2K-Grafikkarte Bernhard45 8 4.630 21.01.2020, 20:51
Letzter Beitrag: Bernhard45

Gehe zu: