Gnu Radio Companion unterstützt unterschiedliche Datentypen, die je nach Verarbeitungszweck bereitgestellt werden.
Über den Source Block wird festgelegt, woher die Ausgangsdaten stammen sollen.
Folgende Sources kommen dabei zum Einsatz:
- Selbst erzeugte Signalformen.
Verschiedene Signalformen wir Sinus, Dreieck oder Rechteck Signale können in GRC selbst erzeugt werden. Diese Signale lassen sich mit anderen Signalen überlagern um bestimmte Effekte zu erzeugen. - Aufgezeichnete Signale
Es ist möglich Signale aufzuzeichnen und als WAV File abzuspeichern. Das ist insbesondere dann interessant, wenn man verschiedene Demodulationstechniken erlernen will, ohne über eigene Signalquellen zu verfügen.
Im SigWiki ist eine Vielzahl von “Konserven” verfügbar, die so analysiert werden können - Signale empfangen
Für den Empfang eigener Signale werden verschiedene SDR Hardwarekoponenten unterstützt
Der Hardware Source Block gibt Daten normalerweise in Form von komplexen I/Q-Samples aus, wobei jedes Sample eine Kombination von In-Phase (I) und Quadrature (Q)-Komponenten ist. Die Daten werden mit einer eingestellten Abtastrate ausgegeben, die bestimmt, wie viele Samples pro Sekunde erfasst und verarbeitet werden.
Der WAV Block dagegen liefert eine Serie von Floating Point Werten.
Bei den internen Signalquellen kann der Type der Ausgabewerte eingestellt werden.
GNU Radio verwendet Buffer, um die Daten die zwischen den Blöcken übertragen werden zu speichern und weiterzugeben. Jedes Mal, wenn ein Block ein Signal verarbeitet, schreibt er das Ergebnis in einen Puffer, der dann von nachgeschalteten Blöcken gelesen wird.
Der Buffer dient als Zwischenspeicher für die Daten und ermöglicht es GNU Radio, asynchron zu arbeiten, wobei jeder Block so schnell arbeitet, wie er kann, unabhängig von den anderen.
Diese Pufferung ist auch notwendig, um Daten zwischen Blöcken mit unterschiedlicher Verarbeitungsgeschwindigkeit zu synchronisieren.
Die Größe der Puffer in GNU Radio ist variabel und wird vom System dynamisch verwaltet.
Standardmäßig wird ein Puffer von 32K für die Verarbeitung angelegt. Dieser kann aber automatisch verändert werden, wenn es die Verarbeitung erfordert.
Der Puffer arbeitet wie ein Ringpuffer, bei dem die Daten in einer zyklischen Struktur gespeichert werden. Sobald der Puffer voll ist, wird er überschrieben, sobald neue Daten ankommen (solange der Block die Daten weiterverarbeitet).
Der Scheduler in GNU Radio ist dafür verantwortlich, dass die Blöcke im Flowgraph in der richtigen Reihenfolge und mit der richtigen Geschwindigkeit arbeiten. Der Scheduler stellt sicher, dass:
- Blöcke Daten aus den Puffern lesen, sobald sie verfügbar sind.
- Blöcke nur dann schreiben, wenn der Puffer des nächsten Blocks bereit ist, neue Daten zu empfangen.
Der Scheduler verwaltet dabei die Kommunikation zwischen den Blöcken so, dass keine Daten verloren gehen und dass Blöcke mit unterschiedlichen Verarbeitungsanforderungen dennoch effizient miteinander arbeiten.