Format und Parsing von GNU Radio-Datenerfassungsdateien mit COMPLEX-Datentyp

GNU Radio COMPLEX IQ Dateiformat und Parsing

GNU Radio ermöglicht es SDR-Entwicklern, frequenztransformierte Basisbandsignale von USRP-Geräten in Dateien zu speichern oder vorab generierte Signale an HF-Hardware wiederzugeben. Das Verständnis des COMPLEX-IQ-Dateiformats ist für die Offline-Analyse, die Signalrekonstruktion und die Wellenformgenerierung unerlässlich.

0 Einleitung

Mit GNU Radio lassen sich Zwischenfrequenz- (ZF) oder Basisbandsignale, die von USRP-Geräten erzeugt werden, direkt in Dateien speichern. Diese Dateien können später mit externen Tools analysiert oder als modulierte Signale für die Übertragung regeneriert werden. Daher ist das Verständnis der Struktur und der Eigenschaften von GNU Radio COMPLEX-Dateien für SDR-Experimente von entscheidender Bedeutung.

1 GNU Radio Dateitypkonfiguration

GNU Radio unterstützt mehrere Datenformate sowohl für File Sink als auch File Source . Das am häufigsten verwendete Format ist COMPLEX , das komplexe Basisbandabtastwerte darstellt.

1.png

In diesem Format:

  • Jede Probe besteht aus einer I-Komponente (In-Phase-Komponente).
  • Und eine entsprechende Q-Komponente (Quadratur).
  • Beide werden als 32-Bit-Gleitkommawerte (float) gespeichert.
    3.png2.png

Sobald der Typ auf KOMPLETT gesetzt ist, kann die von File Sink erzeugte Datei direkt von File Source wiederverwendet werden. Die Dateierweiterung selbst ist dabei unerheblich.

2. Analyse komplexer Dateiformate

Durch die Visualisierung der erfassten Daten mit Tools wie Audacity lassen sich folgende Merkmale beobachten:
4.png

  • 5.png Zwei verschachtelte Wellenformen, die den I- und Q-Kanälen entsprechen.
  • Jeder Wert ist eine Gleitkommazahl im Bereich [-1.0, 1.0].

Daraus ergibt sich folgende abgeleitete Speicherstruktur:

 
FLOAT_I0, FLOAT_Q0,
 FLOAT_I1, FLOAT_Q1,
 FLOAT_I2, FLOAT_Q2,
 FLOAT_I3, FLOAT_Q3,
 ...

Jede COMPLEX-Probe belegt daher genau 8 Bytes (2 × 32-Bit-Gleitkommazahlen).

3. Parsen komplexer Dateien mit C

Basierend auf der Formatanalyse lässt sich das Parsen einfach in C implementieren. Das folgende Beispiel liest eine von GNU Radio generierte COMPLEX-Datei und extrahiert I/Q-Samples.

 
#define BUFF_SIZE (1024*1024*200)
 
unsigned char buff[BUFF_SIZE];
 int buff_size;

 int file2buff(char *fn, unsigned char *buff, int buff_len) {
 DATEI *fp;
 int Größe;
 fp = fopen(fn, "rb");
 if (fp == NULL) {
 printf("Datei kann nicht gelesen werden\n");
 getchar();
 }
 Größe = fread(buff, 1, buff_len, fp);
 fclose(fp);
 Rückgabegröße;
 }

Da die Dateidaten als verschachtelte Gleitkommazahlen gespeichert sind, können wir den Puffer mithilfe eines Gleitkommazeigers neu interpretieren:

 
int main() {
 float *pfloat = (float*)buff;
 int i, t;
 int buff_size_in_float, buff_size_in_complex;

 buff_size = file2buff("ring_recoder", buff, BUFF_SIZE);
 buff_size_in_float = buff_size / sizeof(float);
 buff_size_in_complex = buff_size_in_float / 2;

 for (i = 0; i < buff_size_in_float; i += 2) {
 if ((pfloat[i] > 0.5) || (pfloat[i+1] > 0.5)) {
 printf("start address %d\n", i / 2);
 break;
 }
 }

 t = 0;
 for (; i < buff_size_in_float; i += 2) {
 printf("%f,%f\n", pfloat[i], pfloat[i+1]);
 t++; 
if (t == 300) break;
 }
 }

Dieses Programm ermittelt die erste Probe, deren Amplitude 0,5 überschreitet, und gibt die nächsten 300 IQ-Proben aus.

4. Kompilierung und experimentelle Überprüfung

Der Code kann mit jedem gängigen C-Compiler kompiliert werden. Nach der Kompilierung wird die Ausgabe in eine CSV-Datei umgeleitet:

 
complex2csv.exe > aaa.csv

Die generierte CSV-Datei kann in Tabellenkalkulationsprogramme importiert werden, um Wellenformen darzustellen und sie mit Audacity-Visualisierungen zu vergleichen.
6.png

7.png
5. Ergebnisvergleich

Die aus der CSV-Datei extrahierte und dargestellte Wellenform stimmt exakt mit der in Audacity am entsprechenden Abtastindex beobachteten Wellenform überein. Dies bestätigt die Korrektheit des Analyseverfahrens.
8.png

10.png

9.png
11.png12.png
6. Schlussfolgerung

  • GNU Radio COMPLEX-Dateien speichern verschachtelte Gleitkomma-I/Q-Abtastwerte.
  • Jeder Abtastbereich ist auf [-1, 1] begrenzt.
  • Dateien werden auf den meisten modernen CPUs (x86, ARM) im Little-Endian-Format gespeichert.
  • Es sind keine Metadaten (HF-Frequenz, Abtastrate) enthalten.

Zur besseren Übersichtlichkeit empfiehlt es sich, Parameter in Dateinamen zu kodieren (z. B. ring_recorder.RF433M.IF1M ). Komplexe Dateien, die auf diese Weise erzeugt werden, können direkt als GNU Radio File Source-Eingaben wiederverwendet werden, um benutzerdefinierte IQ-Wellenformen über USRP-Geräte wie den B210 zu übertragen.

Schlüsselwörter: GNU Radio, COMPLEX IQ-Datei, SDR, USRP, IQ-Parsing, Basisbandsignal

Zurück zum Blog

Hinterlasse einen Kommentar