Benutzer-Werkzeuge

Webseiten-Werkzeuge


sdrx:de:architektur

Architektur

Überblick

SDRx implementiert ein Software Defined Radio mit dem folgenden groben Aufbau:

Dabei sind die gelb markierten Komponenten nicht Teil von SDRx, sondern von der jeweiligen Hardware abhängig. Es könnte sich dort zum Beispiel um einen RTL2823U-basierten USB-Dongle und die librtlsdr handeln.

Auf der Seite von SDRx übernimmt zuerst ein „Driver“ die hardwarespezifische Kommunikation und stellt SDRx eine einheitliche Schnittstelle zur Verfügung. Je nach Treiber kann auch keine Hardware beteiligt sein - der FileReader-Treiber liest die Daten aus einer Datei.

Die HF-Daten im IQ-Format werden zuerst in einem Puffer zwischengespeichert, um Schwankungen in der Datenrate auszugleichen.

Ein separater Thread übernimmt dann die eigentliche Verarbeitung des Signals. Zuerst wird mit der gewählten VFO-Frequenz gemischt und auf die eingestellte ZF-Samplerate downsampled. Dann wird der Eingangsfilter angewendet und das Signal an den ausgewählten Demodulator übergeben. Nach der Verarbeitung durch diesen wird das Audio-Signal auf die Samplerate des Audiogerätes reduziert und in einen weiteren Puffer geschrieben.

Die Audioausgabe erfolgt durch die Bass.dll, welche in einer unabhängigen Callbackfunktion aus dem NF-Puffer liest und das Ausgabegerät steuert.

Multithreading

Um moderne Mehrkern-CPUs auszunutzen, benutzt SDRx mehrere Threads. Dabei ist die Aufteilung wie folgt:

  1. Driver verwenden optional eigene Threads, um die Daten von der Hardware zu verarbeiten
  2. Haupt-Verarbeitung zwischen IQ-Buffer und NF-Buffer
  3. Audioverarbeitung in Bass
  4. Berechnungen der FFT-Spektren
  5. GUI und Ausgabe der Spektren

Die Hauptlast trägt dabei praktisch immer der Verarbeitungsthread. Er ist deswegen auch als einziger dazu Aussagekräftig, ob ein System schnell genug ist oder nicht. Der Windows-Eigene Taskmanager zeigt die dazu interessante Auflösung nicht an, besser ist dazu der Process Explorer, der in der Prozess-Detailansicht einen Tab „Threads“ anbietet. Die CPU-Nutztungs-Werte beziehen sich dabei immer auf alle Kerne, so dass ein auf einem Kern (also durch den Verarbeitungsthread) voll ausgelastetes Vierkernsystem zum Beispiel maximal 25% erreichen kann. Deswegen ist die Gesamtansicht im Task-Manager auch wenig hilfreich, da das bedeutet dass ein System schon mit einer 25% voll ausgelastet sein kann - oder aber mit vier 10%-Threads (in der Summe also 40%) noch Luft nach oben hat.

sdrx/de/architektur.txt · Zuletzt geändert: 2014/12/13 00:31 von martok