Samouczek: Omówienie wirtualnego RF (vRF) za pomocą demodulacji Aqua przy użyciu radia GNU

W samouczku: downlink danych z publicznej satelity, dane z satelity Aqua NASA są odłączone za pomocą zarządzanego modemu, co oznacza, że pierwotny sygnał RF odebrany z satelity Aqua przez stację naziemną jest przekazywany przez modem zarządzany przez platformę Azure Orbital. Dane wyjściowe tego modemu, które są w postaci bajtów, są następnie przesyłane strumieniowo do maszyny wirtualnej użytkownika. W ramach kroku Skonfiguruj profil kontaktowy dla publicznej misji pasma satelitarnego konfiguracja demodulacji została ustawiona na Aqua Direct Broadcast, która jest włączona i skonfigurowana zarządzany modem do dekodowania/dekodowania sygnału RF otrzymanego z Aqua. Korzystając z koncepcji vRF, nie jest używany zarządzany modem, a zamiast tego nieprzetworzone sygnał RF jest wysyłany do maszyny wirtualnej użytkownika do przetwarzania. Ta koncepcja może dotyczyć zarówno pasma, jak i pasma, ale w tym samouczku przeanalizujemy proces pasma. Tworzymy vRF, na podstawie GNU Radio, który przetwarza surowy sygnał RF i działa jako modem.

Niniejszy przewodnik zawiera informacje na temat wykonywania następujących czynności:

  • Zapoznaj się z ograniczeniami i kompromisami w korzystaniu z programu vRF.
  • Skonfiguruj profil kontaktu za pośrednictwem programu vRF zamiast zarządzanego modemu.
  • Przetwarzaj dane odłączone od Aqua (w postaci nieprzetworzonego RF) za pomocą radia GNU jako modemu, używając zarówno konfiguracji offline/programowania, jak i konfiguracji w czasie rzeczywistym.

Wymagania wstępne

Omówienie ograniczeń i kompromisów związanych z używaniem programu vRF

Zanim zapoznamy się z samouczkiem, ważne jest, aby zrozumieć, jak działa program vRF i jak działa w porównaniu z użyciem zarządzanego modemu. W przypadku zarządzanego modemu cała warstwa fizyczna (PHY) odbywa się w ramach platformy Azure Orbital, co oznacza, że sygnał RF jest natychmiast przetwarzany w zasobach usługi Azure Orbital, a użytkownik otrzymuje tylko bajty informacyjne generowane przez modem. Wybierając vRF, nie ma zarządzanego modemu, a nieprzetworzony sygnał RF jest przesyłany strumieniowo do użytkownika z cyfry stacji naziemnej. Takie podejście umożliwia użytkownikowi uruchamianie własnego modemu lub przechwytywanie sygnału RF do późniejszego przetwarzania.

Zalety programu vRF obejmują możliwość korzystania z modemów, do których usługa Azure Orbital nie obsługuje ani nie ma dostępu. VRF umożliwia również uruchomienie tego samego sygnału RF przez modem podczas próby różnych parametrów w celu optymalizacji wydajności. Takie podejście może służyć do zmniejszenia liczby przebiegów satelitarnych potrzebnych podczas testowania i przyspieszania opracowywania. Ze względu na charakter nieprzetworzonych sygnałów RF rozmiar pakietu/pliku jest zwykle większy niż bajty zawarte w tym sygnałie RF; zwykle od 2 do 10 razy większe. Więcej danych oznacza, że przepływność sieci między maszyną wirtualną a platformą Azure Orbital może potencjalnie być czynnikiem ograniczającym dla programu vRF.

W tym samouczku dowiesz się, jak działa vRF. Na końcu tego samouczka dołączymy kilka szczegółów specyficznych dla rf i cyfry, które są interesujące dla użytkownika vRF.

Rola DIFI w programie vRF

Stacje naziemne platformy Azure Orbital składają się z cyfry, które wykorzystują DIFI do wysyłania i odbierania cyfry sygnałów RF. Protokół pakietów DIFI, technicznie określany jako "IEEE-ISTO Std 4900-2021: Digital IF Interoperability Standard", definiuje interfejs płaszczyzny danych przeznaczony do przesyłania i odbierania cyfry danych IF (takich jak przykłady IQ) i odpowiednich metadanych w standardowych sieciach IP. Mimo że DIFI jest standardem "IF", próbki IQ w baseband można również przesyłać strumieniowo z DIFI, podobnie jak w przypadku usługi Azure Orbital. Podstawowym przypadkiem użycia pakietów DIFI jest utworzenie interfejsu między cyframi stacji naziemnej satelitarnej (transceivers) i modemami oprogramowania, umożliwiając współdziałanie i walkę z blokadą dostawcy, która nęka przemysł satelitarny.

Protokół pakietów DIFI zawiera dwa podstawowe typy komunikatów: pakiety danych i pakiety kontekstowe. Ze względu na starsze przyczyny sprzętu istnieją dwie różne wersje pakietów kontekstowych. Stacje naziemne platformy Azure Orbital używają aktualnych pakietów kontekstowych (DIFI v1.1) dla sygnałów X-Band i starszego formatu sygnałów S-Band. Jeśli używasz pakietu gr-difi GNU Radio, chcesz wybrać format 108-bajtowy dla X-Band i format 72-bajtowy dla S-band. W przypadku plików vRFs innych niż GNU Należy upewnić się, że poprawna wersja DIFI jest używana dla pakietów kontekstowych, wersja 1.1 można znaleźć tutaj, a starsza wersja może zostać wywnioskowana z tej sekcji kodu. Więcej zagadnień znajduje się w temacie vRF w dokumentacji AOGS na końcu tego samouczka.

Krok 1. Planowanie kontaktu i zbieranie danych Aqua za pomocą usługi AOGS

Najpierw usuniemy zarządzany modem i przechwycimy nieprzetworzone dane RF do pliku pcap. Wykonaj kroki wymienione w artykule Samouczek: odłączanie danych z publicznej satelity NASA Aqua, ale podczas kroku Konfigurowanie profilu kontaktu dla misji Aqua downlink pozostaw pustą konfigurację demodulacji i wybierz pozycję UDP dla pozycji Protokół. Na koniec zamiast socat polecenia (który przechwytuje pakiety TCP), uruchom polecenie sudo tcpdump -i eth0 port 56001 -vvv -p -w /tmp/aqua.pcap , aby przechwycić pakiety UDP do pliku pcap.

Uwaga

Do samouczka potrzebne są następujące trzy modyfikacje: odłączanie danych z publicznego satelity NASA Aqua:

  • Konfiguracja demodulacji: pozostaw wartość pustą
  • Protokół: wybierz pozycję UDP
  • Krok 8 i 9: zamiast tego użyj polecenia sudo tcpdump -i eth0 port 56001 -vvv -p -w /tmp/aqua.pcap

Po przejściu satelitarnym należy mieć plik /tmp/aqua.pcap o rozmiarze 10–20 GB (w zależności od maksymalnej wysokości). Ten plik zawiera pakiety DIFI zawierające surowy sygnał RF odbierany przez stację naziemną w postaci próbek IQ.

Krok 2. Wyodrębnianie przykładów IQ z pakietów DIFI

Następnie wyodrębnimy próbki IQ i zapiszemy je w bardziej tradycyjnej postaci; binarny plik IQ. Poniższe kroki można wykonać na dowolnej maszynie wirtualnej/komputerze z utworzoną kopią utworzonego pliku aqua.pcap. Te kroki obejmują użycie krótkiego skryptu języka Python obsługiwanego przez konsorcjum DIFI w celu wyodrębnienia przykładów IQ z pakietów UDP DIFI do pliku IQ.

  1. Pobierz lub skopiuj następujący kod do nowego skryptu języka Python.
  2. Edytuj filename , aby dopasować do miejsca, w którym zapisano pcap (/tmp/aqua.pcap).
  3. Uruchom skrypt języka Python przy użyciu polecenia python3 difi_to_binary_iq.pyi powinien utworzyć nowy plik w tym samym katalogu co pcap z .cs8 rozszerzeniem. Ten plik jest binarnym plikiem IQ, który zawiera zdigitalizowane próbki RF jako 8-bitowe liczby całkowite i nic innego. Uruchomienie skryptu zajmuje trochę czasu, a uruchomienie pliku staje się większe. Po zakończeniu wykonywania skryptu plik jest mniej więcej taki sam jak plik pcap. Skrypt można zatrzymać przed ukończeniem (za pomocą kontrolki C) i kontynuować samouczek; cały czas trwania kontaktu nie jest niezbędny w pozostałej części samouczka.
  4. (Opcjonalnie) Jeśli chcesz zwizualizować sygnał, zainstaluj program Inspectrum przy użyciu polecenia , a https://github.com/miek/inspectrum/wiki/Build#building-on-debian-based-distros następnie uruchom polecenie Inspectrum przy użyciu inspectrum /tmp/aqua.pcap.cs8 (przy użyciu ścieżki do nowego .cs8 pliku). Po przejściu do graficznego interfejsu użytkownika inspekcji można dostosować Power Max i Power Min zobaczyć pełny zakres dynamiczny sygnału.

Jeśli chcesz również, aby przykłady IQ w formacie float32 zamiast int8 (niektóre oprogramowanie umożliwia tylko ładowanie float32 format), możesz użyć następującego fragmentu kodu języka Python:

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')

Do następnego kroku użyjemy wersji float32, ponieważ upraszcza ona przepływograf GNU Radio.

Krok 3. Demodulate sygnał Aqua w GNU Radio

Następnie utworzymy rzeczywisty modem vRF, oparty na radiu GNU, używany do demodulacji sygnału Aqua.

Logo for GNU Radio Free Software Project.

GNU Radio to bezpłatny i open source zestaw narzędzi do tworzenia oprogramowania, który udostępnia bloki przetwarzania sygnałów i wiele przykładowych aplikacji do przetwarzania sygnałów cyfrowych (DSP). Można go używać z łatwo dostępnym, niskim kosztem sprzętu RF do tworzenia programów radiowych zdefiniowanych programowo lub bez sprzętu w środowisku przypominającym symulację. GNU Radio jest szeroko stosowane w badaniach, przemyśle, środowisku akademickim, rządowym i hobbystycznym w celu wspierania zarówno badań nad komunikacją bezprzewodową, jak i rzeczywistych systemów radiowych. W tym samouczku używamy gnu Radio do demodulate Aqua (czyli GNU Radio działa jako modem).

Mimo że radio GNU może być używane w trybie bezgłówkowym, w tym samouczku używamy graficznego interfejsu UŻYTKOWNIKA GNU Radio (czyli interfejsu pulpitu), więc musisz skopiować /tmp/aqua.pcap.cf32 na maszynę wirtualną z przekazywaniem X11 lub komputerem z systemem Ubuntu 20/22 desktop. scp Polecenie może służyć do kopiowania pliku z maszyny wirtualnej na platformie Azure do lokalnej maszyny deweloperów.

Instalowanie programu GNU Radio

Jeśli używasz systemu Ubuntu 22, uruchom polecenie sudo apt-get install gnuradio. Jeśli zamiast tego korzystasz z systemu Ubuntu 20, użyj następujących poleceń, aby zainstalować radio GNU:

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

Sprawdź, czy oprogramowanie GNU Radio jest poprawnie zainstalowane i czy grafika działa przy użyciu gnuradio-companion; okno powinno pojawić się, które wygląda następująco:

Screenshot of the GNU Radio desktop GUI.

Jeśli drzewo bloków po prawej stronie nie jest wyświetlane, możesz wyświetlić je przy użyciu ikony lupy w prawym górnym rogu.

Uruchamianie przepływu Aqua

Aplikacja radiowa GNU jest nazywana "flowgraph", a zazwyczaj przetwarza lub generuje sygnał RF. Przykładowy przepływograf do użycia można pobrać tutaj. Otwórz ten .grc plik w programie GNU Radio i powinien zostać wyświetlony następujący blok:

Screenshot of the GNU Radio Aqua flowgraph.

Uwaga

W przypadku osób, które nie są zainteresowane szczegółami działania grafu blokowego/modemu, możesz pominąć poniższy akapit

Flowgraph zaczyna się od odczytu w pliku IQ, konwertując go z przeplatanych 8-bitowych liczb całkowitych do złożonego typu danych GNU Radio, a następnie ponownie próbkuje sygnał, aby przejść z oryginalnej 18,75 MHz do 15 MHz, która jest liczbą całkowitą próbek na symbol. Ponowne próbkowanie może być nieco mylące, ponieważ w profilu kontaktu określono przepustowość 15 MHz. Jak opisano bardziej na końcu tego samouczka, w przypadku sygnałów X-Band cyfry używa częstotliwości próbkowania, która jest 1,25 razy większa niż określona przepustowość. Okazuje się, że w tym przepływografie chcemy mieć częstotliwość próbkowania 15 MHz, abyśmy mieli dokładnie dwie próbki na symbol; dlatego musimy ponownie próbkować z 18,75 MHz do 15 MHz. Następnie mamy blok automatycznego sterowania przyrostem (AGC), aby znormalizować poziom zasilania sygnału. Filtr korzeń podniesiony cosinus (RRC) działa jako dopasowany filtr. Pętla Costas wykonuje synchronizację częstotliwości, aby usunąć wszelkie małe przesunięcia częstotliwości spowodowane błędem oscylatora lub niedoskonałą korektą Dopplera. Następne trzy bloki są używane, ponieważ Aqua używa przesunięcia QPSK (OQPSK) zamiast zwykłego zestawu QPSK. Następnie wykonywana jest synchronizacja symboli, aby symbole OQPSK były próbkowane w ich szczytach. Możemy zwizualizować to próbkowanie zestawu QPSK przy użyciu bloku Ujście gwiazdozbioru (pokazano przykładowe dane wyjściowe). Pozostała część flowgrafu przeplata rzeczywiste i wyimaginowane części i zapisuje je jako int8 (chars/bajty), które reprezentują miękkie symbole. Chociaż może przekonwertować te miękkie symbole na wartości 1 i 0, późniejsze przetwarzanie korzyści wynikające z posiadania pełnych wartości symboli.

Przed uruchomieniem flowgraph kliknij dwukrotnie blok Źródło pliku i zaktualizuj ścieżkę tak, aby odpowiadała miejscu zapisania /tmp/aqua.pcap.cf32. Kliknij przycisk odtwarzania u góry, aby uruchomić flowgraph. Jeśli poprzednie kroki zakończyły się pomyślnie, a twój kontakt aqua zakończył się powodzeniem, powinny zostać wyświetlone następujące wykresy gęstości spektralnej mocy (PSD) i IQ:

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

Screenshot of the IQ plot of the Aqua signal.

Twój może się różnić w zależności od siły otrzymanej sygnału. Jeśli nie jest wyświetlany graficzny interfejs użytkownika, sprawdź dane wyjściowe radia GNU w lewym dolnym rogu pod kątem błędów. Jeśli graficzny interfejs użytkownika jest wyświetlany, ale przypomina poziomą hałaśliwą linię (bez garbu), oznacza to, że kontakt nie otrzymał sygnału Aqua. W takim przypadku należy dokładnie sprawdzić, czy funkcja automatycznego śledzenia jest włączona w profilu kontaktu i czy częstotliwość centrum została poprawnie wprowadzona.

Czas potrzebny na zakończenie programu GNU Radio zależy od tego, jak długo można uruchomić skrypt pcap_to_iq w połączeniu z mocą procesora CPU komputera/maszyny wirtualnej. W miarę uruchamiania grafu blokowego jest demodulatowanie sygnału RF przechowywanego w /tmp/aqua.pcap.cf32 i tworzenia pliku /tmp/aqua_out.bin, który zawiera dane wyjściowe modemu. Możesz skopiować ten plik .bin z maszyny wirtualnej.

Kończymy ten samouczek tutaj. Jeśli interesuje Cię dekodowanie bajtów do obrazów, możesz użyć narzędzi NASA lub narzędzi typu open source, takich jak altillimity/X-Band-Decoders.

(Opcjonalnie) Krok 4. Uruchamianie telegrafu radiowego GNU na żywo

W tym samouczku do tego momentu przedstawiono część projektowania/testowania tworzenia wirtualnegorfu. Przekształcamy ten przepływograf GNU Radio, aby można go było uruchamiać na żywo na maszynie wirtualnej, przypominając prawdziwy modem vRF.

Obsługa danych wejściowych

Wcześniej ręcznie przekonwertowaliśmy pcap pakietu DIFI na binarny plik IQ, a następnie załadowaliśmy ten binarny plik IQ do pakietu GNU Radio z blokiem Fink Source. Możemy uprościć nasz przepływograf przy użyciu bloku w gr-difi (utrzymywanym przez firmę Microsoft) zaprojektowanym do odbierania pakietów DIFI do GNU Radio! Ten dodany blok wymaga zainstalowania modułu GNU Radio out-of-tree (OOT), który jest jak wtyczka dla 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 wykonaniu tych kroków powinno być możliwe ponowne otwarcie programu GNU Radio i wyświetlenie nowych bloków (DIFI Source i DIFI Sink) wymienionych w drzewie bloków. W grafie blokowym użytym w poprzedniej sekcji wykonaj następujące kroki:

  1. Zastąp blok Źródło pliku blokiem źródła DIFI
  2. Kliknij dwukrotnie blok źródła DIFI, aby edytować jego parametry
  3. Źródłowy adres IP powinien być adresem IP interfejsu eth0 maszyny wirtualnej
  4. Port powinien mieć wartość 56001, podobnie jak w kroku tcpdump
  5. Ustaw wartość numeru strumienia DIFI na 0. Wszystkie inne parametry mogą pozostać domyślne

Jeśli chcesz przetestować ten przepływograf na maszynie dewelopera, potrzebujesz narzędzia takiego jak udpreplay , aby odtworzyć nagrany element pcap. W przeciwnym razie możesz poczekać na przetestowanie tej części do momentu użycia grafu blokowego na żywo na maszynie wirtualnej połączonej z usługą Azure Orbital. To ograniczenie jest jednym z powodów, dla których ułatwia zarejestrowanie sygnału podczas fazy opracowywania i testowania vRF.

Obsługa danych wyjściowych

Możesz pozostawić ujście pliku na końcu i pobrać zarejestrowany plik przy każdym przekazaniu, ale wiele aplikacji wymaga przesyłania strumieniowego bajtów z modemu. Jedną z opcji jest użycie bloku ujścia TCP zamiast ujścia pliku. Blok ujścia TCP można skonfigurować w trybie serwera lub klienta, w zależności od tego, która strona powinna nawiązać początkowe połączenie. Ustaw wartość Typ danych wejściowych na Bajt, a ujście TCP przesyła strumieniowo bajty na nieprzetworzonym ładunku TCP.

ZMQ PUB Sink to inna opcja, która jest biblioteką obsługi komunikatów, która znajduje się na podstawie protokołu TCP lub komunikacji między procesami (IPC), w celu bardziej złożonego zachowania, takiego jak PUB/SUB.

Jeśli pozostawisz go jako ujście pliku, zalecamy dodanie kilku wierszy języka Python na końcu przepływu (po zakończeniu), które kopiuje utworzony plik do nowej lokalizacji.

Uruchamianie grafu blokowego w trybie bezgłówkowym

Istnieje duża szansa, że maszyna wirtualna odbierający strumień Orbitalny platformy Azure nie obsługuje środowiska pulpitu, co powoduje awarię radia GNU. Musimy skonfigurować ten przepływograf, aby uniknąć używania interfejsów GUI.

  1. Edytuj blok Opcje w lewym górnym rogu
  2. W obszarze Generuj opcje wybierz pozycję Brak graficznego interfejsu użytkownika
  3. W obszarze Opcje uruchamiania wybierz pozycję Uruchom do ukończenia
  4. Naciśnij przycisk OK

Te kroki pozwalają nam uruchomić flowgraph jako skrypt języka Python bez graficznego interfejsu użytkownika, a gdy gniazdo przychodzące zamyka blokograf powinien zostać automatycznie zakończony.

Screenshot of GNU Radio running in Headless Mode.

Uruchamianie usługi flowgraph na żywo

Po skonfigurowaniu grafu blokowego za pomocą źródła DIFI i w trybie bezgłowym możemy uruchomić graf blokowy na żywo na maszynie wirtualnej. W programie GNU Radio Companion (GRC) przy każdym naciśnięciu przycisku odtwarzania plik .py jest tworzony w tym samym katalogu. Ten skrypt języka Python należy skopiować na maszynę wirtualną. Jeśli oprogramowanie GNU Radio i gr-difi zostały poprawnie zainstalowane, powinno być możliwe uruchomienie skryptu języka Python przy użyciu python yourflowgraph.py polecenia i oczekiwanie na uruchomienie strumienia DIFI z usługi Azure Orbital. Możesz dodać dowolny kod języka Python, który chcesz wykonać w tym skryfcie języka Python, na przykład skopiować wynikowy plik do nowej lokalizacji. Uwaga: w przypadku ponownego wygenerowania skryptu języka Python w środowisku GRC ten nowy kod języka Python musi zostać ponownie dodany ręcznie.

Jeśli powyższe kroki zadziałały, pomyślnie utworzono i wdrożono program vRF pasma opartego na radiu GNU!

Dokumentacja programu vRF w usłudze AOGS

W tej sekcji udostępniamy kilka szczegółów specyficznych dla rf/digitizer, które są interesujące dla użytkownika lub projektanta vRF.

Po stronie pasma wirtualnego odbiera sygnał z usługi Azure Orbital. Strumień DIFI jest wysyłany do maszyny wirtualnej użytkownika przez platformę Azure Orbital podczas kontaktu satelitarnego. Oczekuje się, że użytkownik przechwyci strumień w czasie rzeczywistym, rejestrując go lub przetwarzając na żywo. Przykłady obejmują użycie protokołu tcpdump, socat lub bezpośredniego pozyskiwania do modemu. Poniżej przedstawiono niektóre specyfikacje dotyczące sposobu, w jaki stacja naziemna platformy Azure Orbital odbiera i przetwarza sygnał:

  • Częstotliwość centrum jest określona w profilu kontaktu
  • Przepustowość sygnału (BW) jest ustawiona w profilu kontaktu, a częstotliwość próbkowania jest 1.25*BW dla połączeń X-Band i 1.125*BW S-Band
  • Strumień DIFI używa głębokości 8-bitowej (2 bajty na próbkę IQ)
  • Tryb przyrostu cyfry jest ustawiony tak, aby używał automatycznego sterowania przyrostkiem (AGC) z wartością docelową zasilania -10 dBFS
  • Nie jest używana inwersja spektralna
  • Nie jest używane przesunięcie częstotliwości
  • Rozmiar jednostki MTU maszyny wirtualnej użytkownika powinien być ustawiony na 3650 dla X-Band i 1500 dla S-Band, czyli maksymalny rozmiar pakietu pochodzącego z usługi Azure Orbital

Po stronie pasma użytkownik musi podać strumień DIFI do usługi Azure Orbital w trakcie przekazywania, aby usługa Azure Orbital przesyłała. Następujące uwagi mogą być interesujące dla projektanta pasma vRF:

  • Częstotliwość środkowa jest określona w profilu kontaktu
  • Częstotliwość próbkowania sygnału jest ustawiana za pośrednictwem strumienia DIFI (mimo że przepustowość jest dostarczana w ramach profilu kontaktu, jest to wyłącznie konfiguracja sieci pod maską)
  • Głębokość bitu jest ustawiana za pośrednictwem strumienia DIFI, ale usługa Azure Orbital oczekuje 8 bitów
  • Identyfikator strumienia DIFI powinien mieć wartość 0
  • Podobnie jak w przypadku pasma wstecznego, rozmiar jednostki MTU powinien wynosić 1500 dla S-Band i maksymalnie 3650 dla X-Band (wybór)
  • Nie jest używana inwersja spektralna
  • Nie jest używane przesunięcie częstotliwości

Następne kroki

Aby łatwo wdrożyć podrzędne składniki niezbędne do odbierania i przetwarzania danych obserwacji ziemi w przestrzeni kosmicznej przy użyciu stacji naziemnej platformy Azure, zobacz: