Kurz: Pochopení virtuálního RF (vRF) prostřednictvím demodulace Aqua pomocí GNU Radio

V kurzu: Data downlinku z veřejné satelitu, data ze satelitu Aqua NASA jsou dolů propojena pomocí spravovaného modemu, což znamená, že nezpracovaný RF signál přijatý ze satelitu Aqua pozemní stanice je předán prostřednictvím modemu spravovaného Azure Orbital. Výstup tohoto modemu, který je ve formě bajtů, se pak streamuje do virtuálního počítače uživatele. V rámci kroku Konfigurace kontaktního profilu pro veřejnou satelitní downlink misi Demodulation Configuration byla nastavena na Aqua Direct Broadcast, což je to, co povolilo a nakonfigurovalo spravovaný modem tak, aby demodulat/dekódoval rf signál přijatý z Aqua. Při použití konceptu vRF se nepoužívá žádný spravovaný modem a místo toho se na virtuální počítač uživatele odešle nezpracovaný rf signál ke zpracování. Tento koncept se může vztahovat jak na downlink, tak na odesílání, ale v tomto kurzu se podíváme na proces downlinku. Vytvoříme vRF na základě GNU Radio, který zpracovává nezpracovaný RF signál a funguje jako modem.

V této příručce se naučíte:

  • Seznamte se s omezeními a kompromisy při používání nástroje vRF.
  • Místo spravovaného modemu nakonfigurujte profil kontaktu prostřednictvím nástroje vRF.
  • Zpracování downlinkovaných dat z Aqua (ve formě nezpracovaného RF) pomocí GNU Radio jako modemu pomocí nastavení offline/vývoje i nastavení v reálném čase.

Požadavky

Vysvětlení omezení a kompromisů při používání vRF

Než se pustíme do kurzu, je důležité pochopit, jak funguje vRF a jak se porovnává s používáním spravovaného modemu. U spravovaného modemu se celá fyzická vrstva (PHY) vyskytuje ve službě Azure Orbital, což znamená, že rf signál se okamžitě zpracuje v rámci prostředků azure Orbital a uživatel obdrží pouze bajty informací vytvořené modemem. Při výběru vRF neexistuje žádný spravovaný modem a nezpracovaný RF signál se streamuje uživateli z digitizátoru pozemní stanice. Tento přístup umožňuje uživateli spustit vlastní modem nebo zachytit rf signál pro pozdější zpracování.

Mezi výhody nástroje vRF patří možnost používat modemy, ke kterým Azure Orbital nepodporuje ani nemá přístup. VRF také umožňuje spuštění stejného RF signálu prostřednictvím modemu při pokusu o optimalizaci výkonu různými parametry. Tento přístup lze použít ke snížení počtu satelitních průchodů potřebných během testování a urychlení vývoje. Vzhledem k povaze nezpracovaných RF signálů je velikost paketu/souboru obvykle větší než bajty obsažené v tomto RF signálu; obvykle mezi 2-10x větší. Další data znamenají, že propustnost sítě mezi virtuálním počítačem a Azure Orbital může být limitačním faktorem pro vRF.

V tomto kurzu se naučíte, jak funguje vRF. Na konci tohoto kurzu zahrneme několik podrobností specifických pro RF a digitizátor, které jsou zajímavé pro uživatele vRF.

Role DIFI v rámci vRF

Pozemní stanice Azure Orbital se skládají z digitizátorů, které využívají DIFI k odesílání a přijímání digitalizovaných RF signálů. Paketový protokol DIFI, technicky označovaný jako "IEEE-ISTO Std 4900-2021: Digital IF Interoperability Standard", definuje rozhraní roviny dat určené pro přenos a příjem digitalizovaných dat IF (jako jsou vzorky IQ) a odpovídající metadata ve standardních sítích IP. I když je DIFI standardem IF, vzorky IQ v basebandu je možné streamovat také pomocí DIFI, stejně jako u Azure Orbital. Primárním případem použití paketů DIFI je vytvoření rozhraní mezi satelitními pozemními digitizátory (transceivery) a softwarovými modemy, což umožňuje interoperabilitu a boj proti uzamčení dodavatele, který zamoří satelitní průmysl.

Paketový protokol DIFI obsahuje dva primární typy zpráv: datové pakety a kontextové pakety. Kvůli starším hardwarovým důvodům existují dvě různé verze kontextových paketů. Pozemní stanice Azure Orbital používají aktuální kontextové pakety (DIFI v1.1) pro signály X-Band a starší formát signálů S-Band. Pokud používáte balíček gr-difi GNU Radio, musíte vybrat formát 108 bajtů pro X-Band a formát 72 bajtů pro S-band. V případě jiných souborů než GNU Radio vRFs je nutné zajistit, aby se pro kontextové pakety používala správná verze DIFI, naleznete zde v1.1 a starší verze lze odvodit z této části kódu. Další aspekty jsou součástí vRF v rámci AOGS Reference na konci tohoto kurzu.

Krok 1: Použití AOGS k naplánování kontaktu a shromáždění dat Aqua

Nejprve odebereme spravovaný modem a zachytíme nezpracovaná data RF do souboru pcap. Proveďte kroky uvedené v kurzu: Data downlinku z veřejné satelitu NASA, ale během kroku Nakonfigurujte profil kontaktu pro misi Aqua downlink ponechte prázdnou konfiguraci Demodulation Configuration a zvolte UDP pro protokol. Nakonec na konci místo socat příkazu (který zachycuje pakety TCP), spusťte sudo tcpdump -i eth0 port 56001 -vvv -p -w /tmp/aqua.pcap zachytávání paketů UDP do souboru pcap.

Poznámka:

V kurzu jsou potřeba následující tři úpravy: Downlink data z veřejné satelitní NASA:

  • Konfigurace demodulace: Ponechte prázdné
  • Protokol: Zvolte UDP.
  • Krok 8 a 9: Místo toho použijte příkaz sudo tcpdump -i eth0 port 56001 -vvv -p -w /tmp/aqua.pcap

Po satelitním průchodu byste měli mít soubor /tmp/aqua.pcap o velikosti 10–20 GB (v závislosti na maximálním zvýšení oprávnění). Tento soubor obsahuje pakety DIFI obsahující nezpracovaný RF signál přijatý pozemní stanicí ve formě vzorků IQ.

Krok 2: Extrahování ukázek IQ z paketů DIFI

Dále extrahujeme vzorky IQ a uložíme je v tradiční podobě; binární soubor IQ. Následující kroky je možné provést na jakémkoli virtuálním počítači nebo počítači, který má kopii souboru aqua.pcap, který jste vytvořili. Tyto kroky zahrnují použití krátkého skriptu Pythonu spravovaného konsorciem DIFI k extrakci ukázek IQ z paketů UDP DIFI do souboru IQ.

  1. Stáhněte nebo zkopírujte následující kód do nového skriptu Pythonu.
  2. Upravit filename tak, aby odpovídala všude, kde jste uložili pcap (/tmp/aqua.pcap).
  3. Spusťte skript Pythonu pomocí python3 difi_to_binary_iq.pya měl by se vytvořit nový soubor ve stejném adresáři jako pcap s příponou .cs8 . Tento soubor je binární soubor IQ, který obsahuje digitalizované ukázky RF jako 8bitové celé číslo a nic jiného. Spuštění skriptu nějakou dobu trvá a při spuštění souboru se zvětší. Po dokončení skriptu má soubor přibližně stejnou velikost jako soubor pcap. Skript můžete zastavit před dokončením (pomocí control-C) a pokračovat v kurzu; pro zbytek kurzu není nutná celá doba trvání kontaktu.
  4. (Volitelné) Pokud chcete vizualizovat signál, nainstalujte Nástroj Inspectrum pomocí https://github.com/miek/inspectrum/wiki/Build#building-on-debian-based-distros příkazu Inspectrum ( inspectrum /tmp/aqua.pcap.cs8 pomocí cesty k novému .cs8 souboru). Jakmile budete v grafickém uživatelském rozhraní Inspectrum, můžete upravit Power Max a Power Min zobrazit úplný dynamický rozsah signálu.

Pokud byste také chtěli ukázky IQ ve formátu float32 místo int8 (některé software umožňují načíst pouze formát float32), můžete použít následující fragment kódu Pythonu:

import numpy as np
samples = np.fromfile('/tmp/aqua.pcap.cs8', np.int8) / 127.0
samples = samples.astype(np.float32)
samples.tofile('/tmp/aqua.pcap.cf32')

Pro další krok použijeme verzi float32, protože zjednodušuje GNU Radio flowgraph.

Krok 3: Demodulate aqua signál v GNU Radio

Dále vytvoříme skutečný modem vRF založený na GNU Radio, který se používá k demodulaci aqua signálu.

Logo for GNU Radio Free Software Project.

GNU Radio je bezplatná opensourcová sada nástrojů pro vývoj softwaru, která poskytuje bloky zpracování signálů a mnoho příkladů aplikací DSP (Digital Signal Processing). Dá se použít s snadno dostupným nízkonákladovým hardwarem RF k vytváření softwarově definovaných rádií nebo bez hardwaru v prostředí podobném simulaci. GNU Radio se široce používá ve výzkumu, průmyslu, akademickém prostředí, vládě a konzistenci k podpoře výzkumu bezdrátové komunikace i v reálném světě rádiových systémů. V tomto kurzu používáme GNU Radio k demodulaci Aqua (tedy GNU Radio funguje jako modem).

Ačkoli GNU Radio lze použít v bezobrátovém režimu, v tomto kurzu používáme GUI GNU Radio (tj. desktopové rozhraní), takže musíte kopírovat /tmp/aqua.pcap.cf32 na virtuální počítač s přeposílání X11 nebo počítače s Ubuntu 20/22 desktop. Tento příkaz scp můžete použít ke zkopírování souboru z virtuálního počítače v Azure do místního vývojového počítače.

Instalace GNU Radio

Pokud používáte Ubuntu 22, spusťte sudo apt-get install gnuradio. Pokud místo toho používáte Ubuntu 20, použijte následující příkazy k instalaci GNU Radio:

sudo add-apt-repository ppa:gnuradio/gnuradio-releases
sudo apt-get update
sudo apt-get install gnuradio python3-packaging

Ověřte, že GNU Radio správně nainstalovalo a že grafika funguje . gnuradio-companionMělo by se zobrazit okno, které vypadá takto:

Screenshot of the GNU Radio desktop GUI.

Pokud se strom bloku vpravo nezobrazuje, můžete ho zobrazit pomocí ikony lupy v pravém horním rohu.

Spuštění vývojového diagramu Aqua

Aplikace GNU Radio se nazývá "flowgraph", a obvykle buď zpracovává nebo generuje rf signál. Počáteční vývojový graf, který se má použít, si můžete stáhnout zde. Otevřete tento .grc soubor v GNU Radio a měli byste vidět následující vývojový graf:

Screenshot of the GNU Radio Aqua flowgraph.

Poznámka:

Pro ty, kteří nemají zájem o podrobnosti o tom, jak tok/modem funguje, můžete přeskočit následující odstavec.

Vývojový graf začíná tím, že čte v souboru IQ a převede ho z prokládání 8bitových celých čísel na komplexní datový typ GNU Radio a pak převzorkuje signál, který má jít z původního 18,75 MHz na 15 MHz, což je celočíselné množství vzorků na symbol. Toto převzorkování může být trochu matoucí, protože v profilu kontaktu jsme zadali šířku pásma 15 MHz. Jak je popsáno více na konci tohoto kurzu, pro signály X-Band digitalizátor používá vzorkovací frekvenci, která je 1,25krát zadaná šířka pásma. Ukázalo se, že v tomto toku chceme vzorkovací frekvenci 15 MHz, abychom měli přesně dva vzorky na symbol; proto musíme převzorkovat z 18,75 MHz na 15 MHz. Dále máme blok automatického získání řízení (AGC) pro normalizaci úrovně napájení signálu. Kořenový vyvolaný kosinus (RRC) funguje jako odpovídající filtr. Smyčka Costas provádí synchronizaci frekvencí, aby se odebraly všechny malé odchylky frekvence způsobené chybou oscilátoru nebo chybou doppleru. Další tři bloky se používají, protože Aqua místo pravidelného QPSK používá posun QPSK (OQPSK). Synchronizace symbolů se pak provede tak, aby se symboly OQPSK vzorkovaly ve špičce. Toto vzorkování QPSK můžeme vizualizovat pomocí bloku jímky souhvězdí (zobrazí se ukázkový výstup). Zbytek toku proplete skutečné a imaginární části a uloží je jako int8 (znaky/bajty), které představují měkké symboly. I když by se tyto měkké symboly mohly převést na 1 a 0, pozdější zpracování bude mít výhody z toho, že budou mít úplné hodnoty symbolů.

Před spuštěním vývojového diagramu poklikejte na blok Zdroj souborů a aktualizujte cestu tak, aby odpovídala všude, kde jste uložili /tmp/aqua.pcap.cf32. Kliknutím na tlačítko přehrát v horní části spusťte vývojový graf. Pokud byly předchozí kroky úspěšné a váš kontakt Aqua byl úspěšný, měl by se zobrazit následující graf spektrální hustoty výkonu (PSD) a IQ:

Screenshot of the GNU Radio Aqua Power Spectral Density (PSD).

Screenshot of the IQ plot of the Aqua signal.

Vaše zařízení se může lišit v závislosti na síle, kterou signál přijal. Pokud se grafické uživatelské rozhraní nezodpovědělo, zkontrolujte, jestli výstup GNU Radio v levém dolním rohu neobsahuje chyby. Pokud se grafické uživatelské rozhraní zobrazí, ale podobá se vodorovné hlučné přímce (bez humpu), znamená to, že kontakt ve skutečnosti nepřijal signál Aqua. V takovém případě pečlivě zkontrolujte, jestli je ve vašem profilu kontaktu povolené automatické sledování a zda byla správně zadána frekvence centra.

Doba, po kterou trvá dokončení GNU Radio, je založena na tom, jak dlouho necháte pcap_to_iq skript běžet v kombinaci s výkonem procesoru počítače nebo virtuálního počítače. Při běhu toku se demoduje rf signál uložený v /tmp/aqua.pcap.cf32 souboru a vytvoří soubor /tmp/aqua_out.bin, který obsahuje výstup modemu. Neváhejte zkopírovat tento .bin soubor mimo virtuální počítač.

Tento kurz ukončíme tady. Pokud vás zajímá dekódování bajtů do obrázků, můžete použít nástroje NASA nebo opensourcové nástroje, jako jsou altillimity/X-Band-Decoders.

(Volitelné) Krok 4: Živé spuštění radiotegrafu GNU

Tento kurz až do této chvíle představuje část návrhu/testování vytvoření vRF. Transformujeme tento radiograf GNU tak, aby mohl běžet živě na virtuálním počítači, který se podobá skutečnému modemu vRF.

Zpracování vstupu

Dříve jsme ručně převedli paket DIFI pcap do binárního SOUBORU IQ a pak tento binární IQ soubor načetli do GNU Radio s blokem Fink Source. Náš vývojový graf můžeme zjednodušit pomocí bloku v rámci gr-difi (udržovaného Microsoftem) navrženým pro příjem paketů DIFI do GNU Radio! Tento přidaný blok vyžaduje, abychom nainstalovali modul GNU Radio out-of-tree (OOT), který je jako modul plug-in pro GNU Radio:

sudo apt-get install python3-pip cmake liborc-dev doxygen
sudo pip install pytest pybind11
cd ~
git clone https://github.com/DIFI-Consortium/gr-difi
cd gr-difi
mkdir build
cd build
cmake -DCMAKE_FIND_ROOT_PATH=/usr ..
make -j4
sudo make install
sudo ldconfig

Po těchto krocích byste měli být schopni znovu otevřít GNU Radio a zobrazit nové bloky (zdroj DIFI a jímka DIFI) uvedené ve stromu bloků. V toku, který jste použili v předchozí části, proveďte následující kroky:

  1. Nahrazení zdrojového bloku souboru blokem zdroje DIFI
  2. Poklikáním na blok zdroje DIFI upravte jeho parametry.
  3. Zdrojová IP adresa by měla být IP adresa rozhraní eth0 vašeho virtuálního počítače.
  4. Port by měl být 56001, stejně jako jsme použili v kroku tcpdump.
  5. Nastavte číslo datového proudu DIFI na hodnotu 0. Všechny ostatní parametry můžou zůstat ve výchozím nastavení.

Pokud chcete testovat tento vývojový graf na vývojovém počítači, potřebujete nástroj, jako je udpreplay , abyste mohli přehrát záznam pcap, který jsme zaznamenali. Jinak můžete počkat na otestování této části, dokud se vývojový graf nepoužije na virtuálním počítači připojeném k Azure Orbital. Toto omezení je jedním z důvodů, proč pomáhá vytvořit záznam signálu během fáze vývoje a testování vRF.

Zpracování výstupu

Můžete se rozhodnout ponechat jímku souborů na konci a načíst zaznamenaný soubor každý průchod, ale mnoho aplikací vyžaduje streamování bajtů z modemu. Jednou z možností je použít blok jímky TCP místo jímky souborů. Blok jímky TCP je možné nakonfigurovat v režimu serveru nebo klienta v závislosti na tom, na které straně by mělo být počáteční připojení. Nastavte vstupní typ na Bajt a jímka TCP streamuje bajty přes nezpracovanou datovou část TCP.

Jímka ZMQ PUB je další možností, což je knihovna pro zasílání zpráv, která je umístěná nad protokolem TCP nebo komunikaci mezi procesy (IPC), pro složitější chování, jako je PUB/SUB.

Pokud ho necháte jako jímku souborů, doporučujeme na konec vývojového diagramu (po dokončení) přidat několik řádků Pythonu, které zkopírují vytvořený soubor do nového umístění.

Spuštění toku v bezobrátovém režimu

Existuje dobrá šance, že virtuální počítač, který přijímá stream Azure Orbital, nepodporuje desktopové prostředí, což způsobuje chybové ukončení GNU Radio. Tento tok musíme nakonfigurovat tak, aby se zabránilo použití gui.

  1. Úprava bloku Možnosti v levém horním rohu
  2. V části Možnosti generování zvolte Bez grafického uživatelského rozhraní .
  3. V části Možnosti spuštění zvolte Spustit do dokončení.
  4. Stiskněte OK

Tyto kroky nám umožní spustit vývojový graf jako skript Pythonu bez grafického uživatelského rozhraní a když příchozí soket zavře vývojový graf, měl by tok automaticky končit.

Screenshot of GNU Radio running in Headless Mode.

Spuštění vývojového diagramu za provozu

Jakmile je tok nakonfigurovaný se zdrojem DIFI a v bezobjemovém režimu, můžeme na virtuálním počítači spustit vývojový graf živě. V GNU Radio Companion (GRC) se při každém stisknutí tlačítka přehrát vytvoří soubor .py ve stejném adresáři. Tento skript Pythonu je potřeba zkopírovat do virtuálního počítače. Pokud byly správně nainstalovány GNU Radio a gr-difi, měli byste být schopni spustit skript Pythonu pomocí python yourflowgraph.py a čeká na spuštění datového proudu DIFI z Azure Orbital. Do tohoto skriptu Pythonu můžete přidat libovolný kód Pythonu, například zkopírovat výsledný soubor do nového umístění. Poznámka: Pokud znovu vygenerujete skript Pythonu v GRC, musí se tento nový kód Pythonu znovu přidat ručně.

Pokud výše uvedené kroky fungovaly, úspěšně jste vytvořili a nasadili downlink vRF na základě GNU Radio!

vRF v rámci referenční dokumentace AOGS

V této části poskytujeme několik podrobností specifických pro RF/digitizer, které jsou zajímavé pro uživatele nebo návrháře vRF.

Na straně downlinku obdrží vRF signál z Azure Orbital. Stream DIFI se odesílá do virtuálního počítače uživatele službou Azure Orbital během satelitního kontaktu. Očekává se, že uživatel zachytí stream v reálném čase buď tak, že ho zaznamená nebo zpracuje živě. Mezi příklady patří použití protokolu tcpdump, socat nebo přímé ingestování do modemu. Dále jsou některé specifikace týkající se toho, jak pozemní stanice Azure Orbital přijímá a zpracovává signál:

  • Frekvence centra je zadána v profilu kontaktu.
  • Šířka pásma signálu (BW) je nastavena v profilu kontaktu a vzorkovací frekvence je 1.25*BW určena pro X-Band a 1.125*BW pro kontakty S-Band.
  • Datový proud DIFI používá 8bitovou hloubku (2 bajty na vzorky IQ).
  • Režim získání digitizátoru je nastaven na použití automatického řízení získání (AGC) s výkonovým cílem -10 dBFS.
  • Nepoužívá se žádná spektrální inverze.
  • Nepoužívá se žádný posun frekvence.
  • Velikost MTU virtuálního počítače uživatele by měla být nastavená na 3650 pro X-Band a 1500 pro S-Band, což je maximální velikost paketů pocházející z Azure Orbital.

Na straně odchozího připojení musí uživatel poskytnout datový proud DIFI do Azure Orbital po celém průchodu, aby azure Orbital přenášel. Následující poznámky můžou být zajímavé pro návrháře vRF pro odesílání:

  • Frekvence center je zadána v profilu kontaktu.
  • Vzorkovací frekvence signálu se nastavuje prostřednictvím datového proudu DIFI (i když je šířka pásma poskytována jako součást profilu kontaktu, je to čistě pro konfiguraci sítě pod kapotou).
  • Hloubka bitu se nastavuje prostřednictvím datového proudu DIFI, ale Azure Orbital očekává 8 bitů.
  • ID datového proudu DIFI by mělo být nastaveno na hodnotu 0.
  • Podobně jako u downlinku by velikost MTU měla být 1500 pro S-Band a 3650 pro X-Band (podle vašeho výběru)
  • Nepoužívá se žádná spektrální inverze.
  • Nepoužívá se žádný posun frekvence.

Další kroky

Pokud chcete snadno nasadit podřízené komponenty nezbytné pro příjem a zpracování dat pozorování vesmíru pomocí stanice Azure Orbital Ground Station, přečtěte si: