Tutorial: Memahami RF virtual (vRF) melalui demodulasi Aqua menggunakan Radio GNU

Dalam Tutorial: Data downlink dari satelit publik, data dari satelit Aqua NASA di-downlink menggunakan modem terkelola, yang berarti sinyal RF mentah yang diterima dari satelit Aqua oleh stasiun darat diteruskan melalui modem yang dikelola oleh Azure Orbital. Output modem ini, yang dalam bentuk byte, kemudian dialirkan ke VM pengguna. Sebagai bagian dari langkah Konfigurasikan profil kontak untuk misidownlink satelit publik, Konfigurasi Demodulasi diatur ke Aqua Direct Broadcast, yang mengaktifkan dan mengonfigurasi modem terkelola untuk mendemodulasikan/mendekode sinyal RF yang diterima dari Aqua. Menggunakan konsep vRF, tidak ada modem terkelola yang digunakan, dan sebaliknya sinyal RF mentah dikirim ke VM pengguna untuk diproses. Konsep ini dapat berlaku untuk downlink dan uplink, tetapi dalam tutorial ini kita memeriksa proses downlink. Kami membuat vRF, berdasarkan Radio GNU, yang memproses sinyal RF mentah dan bertindak sebagai modem.

Dalam panduan ini, Anda akan mempelajari cara:

  • Pahami batasan dan tradeoff penggunaan vRF.
  • Konfigurasikan profil kontak melalui vRF alih-alih modem terkelola.
  • Proses data yang di-downlink dari Aqua (dalam bentuk RF mentah) menggunakan Radio GNU sebagai modem, menggunakan penyiapan offline/pengembangan dan penyiapan realtime.

Prasyarat

  • Tutorial Lengkap : Data downlink dari satelit publik Aqua NASA, karena tutorial ini mengasumsikan Anda sudah mengonfigurasi pesawat ruang angkasa dan VM.

Memahami batasan dan tradeoff penggunaan vRF

Sebelum kita mempelajari tutorial, penting untuk memahami cara kerja vRF dan bagaimana perbandingannya dengan menggunakan modem terkelola. Dengan modem terkelola, seluruh lapisan fisik (PHY) terjadi dalam Azure Orbital, yang berarti sinyal RF segera diproses dalam sumber daya Azure Orbital dan pengguna hanya menerima byte informasi yang dihasilkan oleh modem. Dengan memilih vRF, tidak ada modem terkelola, dan sinyal RF mentah dialirkan ke pengguna dari digitizer stasiun darat. Pendekatan ini memungkinkan pengguna untuk menjalankan modem mereka sendiri, atau menangkap sinyal RF untuk diproses nanti.

Keuntungan vRF termasuk kemampuan untuk menggunakan modem yang tidak didukung atau diakses Oleh Azure Orbital. vRF juga memungkinkan menjalankan sinyal RF yang sama melalui modem sambil mencoba parameter yang berbeda untuk mengoptimalkan performa. Pendekatan ini dapat digunakan untuk mengurangi jumlah pass satelit yang diperlukan selama pengujian dan mempercepat pengembangan. Karena sifat sinyal RF mentah, ukuran paket/file biasanya lebih besar dari byte yang terkandung dalam sinyal RF tersebut; biasanya antara 2-10x lebih besar. Lebih banyak data berarti throughput jaringan antara VM dan Azure Orbital berpotensi menjadi faktor pembatas untuk vRF.

Sepanjang tutorial ini, Anda mempelajari terlebih dahulu cara kerja vRF. Di akhir tutorial ini, kami menyertakan beberapa detail khusus RF dan digitizer yang menarik bagi pengguna vRF.

Peran DIFI dalam vRF

Stasiun darat Azure Orbital terdiri dari digitizer yang menggunakan DIFI untuk mengirim dan menerima sinyal RF digital. Protokol Paket DIFI, secara teknis disebut sebagai "IEEE-ISTO Std 4900-2021: Digital IF Interoperability Standard", mendefinisikan antarmuka sarana data yang dimaksudkan untuk mengirimkan dan menerima data IF digital (seperti sampel IQ) dan metadata yang sesuai melalui jaringan IP standar. Meskipun DIFI adalah standar "IF", sampel IQ di baseband juga dapat dialirkan dengan DIFI, seperti halnya dengan Azure Orbital. Kasus penggunaan utama paket DIFI adalah menciptakan antarmuka antara digitizer stasiun darat satelit (transceiver) dan modem perangkat lunak, memungkinkan interoperabilitas dan memerangi penguncian vendor yang mengganggu industri satelit.

Protokol Paket DIFI berisi dua jenis pesan utama: paket data dan paket konteks. Karena alasan perangkat keras warisan, ada dua versi paket konteks yang berbeda. Stasiun darat Azure Orbital menggunakan paket konteks terbaru (DIFI v1.1) untuk sinyal X-Band, dan format warisan untuk sinyal S-Band. Jika Anda menggunakan paket Radio GNU gr-difi , Anda ingin memastikan untuk memilih format 108-byte untuk X-Band dan format 72-byte untuk S-band. Untuk vRF Radio non-GNU, Anda perlu memastikan versi DIFI yang benar digunakan untuk paket konteks, v1.1 dapat ditemukan di sini dan versi warisan dapat disimpulkan dari bagian kode ini. Pertimbangan lebih lanjut disertakan dalam vRF dalam Referensi AOGS di akhir tutorial ini.

Langkah 1: Gunakan AOGS untuk menjadwalkan kontak dan mengumpulkan data Aqua

Pertama, kami menghapus modem terkelola, dan mengambil data RF mentah ke dalam file pcap. Jalankan langkah-langkah yang tercantum dalam Tutorial: Data downlink dari satelit publik Aqua NASA tetapi selama langkah Mengonfigurasi profil kontak untuk misi downlink Aqua membiarkan Konfigurasi Demodulasi kosong dan pilih UDP untuk Protokol. Terakhir, menjelang akhir, alih-alih socat perintah (yang menangkap paket TCP), jalankan sudo tcpdump -i eth0 port 56001 -vvv -p -w /tmp/aqua.pcap untuk mengambil paket UDP ke file pcap.

Catatan

Tiga modifikasi berikut diperlukan untuk Tutorial: Menurunkan data dari satelit publik Aqua NASA:

  • Konfigurasi Demodulasi: biarkan kosong
  • Protokol: pilih UDP
  • Langkah 8 dan 9: sebagai gantinya gunakan perintah sudo tcpdump -i eth0 port 56001 -vvv -p -w /tmp/aqua.pcap

Setelah pass satelit, Anda harus memiliki file /tmp/aqua.pcap berukuran 10-20 GB (tergantung pada elevasi maks). File ini berisi paket DIFI yang berisi sinyal RF mentah yang diterima oleh stasiun darat, dalam bentuk sampel IQ.

Langkah 2: Ekstrak sampel IQ dari paket DIFI

Selanjutnya kita mengekstrak sampel IQ dan menyimpannya dalam bentuk yang lebih tradisional; file IQ biner. Langkah-langkah berikut dapat dilakukan pada VM/komputer apa pun yang memiliki salinan file aqua.pcap yang Anda buat. Langkah-langkah ini melibatkan penggunaan skrip Python singkat yang dikelola oleh Konsorsium DIFI untuk mengekstrak sampel IQ dari paket UDP DIFI ke dalam file IQ.

  1. Unduh atau salin kode berikut ke dalam skrip python baru.
  2. Edit filename untuk mencocokkan di mana pun Anda menyimpan pcap (/tmp/aqua.pcap).
  3. Jalankan skrip Python menggunakan python3 difi_to_binary_iq.py, dan harus membuat file baru di direktori yang sama dengan pcap Anda, dengan .cs8 ekstensi. File ini adalah file IQ biner, yang berisi sampel RF digitalisasi sebagai bilangan bulat 8-bit dan tidak ada yang lain. Skrip membutuhkan waktu untuk berjalan, dan karena menjalankan file menjadi lebih besar. Ketika skrip selesai, file kira-kira berukuran sama dengan file pcap. Anda dapat menghentikan skrip sebelum penyelesaian (dengan control-C) dan melanjutkan tutorial; seluruh durasi kontak tidak diperlukan untuk sisa tutorial.
  4. (Opsional) Jika Anda ingin memvisualisasikan sinyal, instal Inspectrum menggunakan https://github.com/miek/inspectrum/wiki/Build#building-on-debian-based-distros lalu jalankan Inspectrum menggunakan inspectrum /tmp/aqua.pcap.cs8 (menggunakan jalur ke file baru .cs8 Anda). Setelah berada di Gui Inspectrum, Anda dapat menyesuaikan Power Max dan Power Min melihat rentang sinyal dinamis penuh.

Jika Anda juga menginginkan sampel IQ dalam format float32 alih-alih int8 (beberapa perangkat lunak hanya memungkinkan Anda memuat format float32), Anda dapat menggunakan cuplikan Python berikut:

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

Kita akan menggunakan versi float32 untuk langkah berikutnya, karena menyederhanakan alur Radio GNU.

Langkah 3: Demodulasikan sinyal Aqua di Radio GNU

Selanjutnya kita membuat modem vRF aktual, berdasarkan Radio GNU, digunakan untuk mendemodulasikan sinyal Aqua.

Logo for GNU Radio Free Software Project.

Radio GNU adalah toolkit pengembangan perangkat lunak gratis dan sumber terbuka yang menyediakan blok pemrosesan sinyal dan banyak contoh aplikasi pemrosesan sinyal digital (DSP). Ini dapat digunakan dengan perangkat keras RF berbilang rendah yang tersedia untuk membuat radio yang ditentukan perangkat lunak, atau tanpa perangkat keras di lingkungan seperti simulasi. Radio GNU banyak digunakan dalam lingkungan penelitian, industri, akademisi, pemerintah, dan hobi untuk mendukung penelitian komunikasi nirkabel dan sistem radio dunia nyata. Dalam tutorial ini, kami menggunakan Radio GNU untuk mendemodulasikan Aqua (yaitu, Radio GNU bertindak sebagai modem).

Meskipun Radio GNU dapat digunakan dalam mode tanpa kepala, dalam tutorial ini we1 menggunakan GUI Radio GNU (yaitu, antarmuka desktop), jadi Anda harus menyalin /tmp/aqua.pcap.cf32 ke VM dengan penerusan X11 atau komputer dengan desktop Ubuntu 20/22. Perintah scp dapat digunakan untuk menyalin file dari VM di Azure ke komputer pengembangan lokal.

Pasang Radio GNU

Jika Anda menggunakan Ubuntu 22, jalankan sudo apt-get install gnuradio. Jika Anda menggunakan Ubuntu 20, gunakan perintah berikut untuk menginstal Radio GNU:

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

Verifikasi bahwa Radio GNU diinstal dengan benar dan grafik berfungsi menggunakan gnuradio-companion; jendela akan muncul yang terlihat seperti ini:

Screenshot of the GNU Radio desktop GUI.

Jika pohon blok di sebelah kanan tidak ditampilkan, Anda dapat menampilkannya menggunakan ikon kaca pembesar di kanan atas.

Menjalankan grafik alur Aqua

Aplikasi Radio GNU disebut "flowgraph," dan biasanya memproses atau menghasilkan sinyal RF. Alur pemula yang akan digunakan dapat diunduh di sini. Buka file ini .grc dalam Radio GNU dan Anda akan melihat alur berikut:

Screenshot of the GNU Radio Aqua flowgraph.

Catatan

Bagi mereka yang tidak tertarik dengan detail cara kerja grafik alur/modem, Anda dapat melewati paragraf berikut

Grafik alur dimulai dengan membaca dalam file IQ, mengonversinya dari bilangan bulat 8-bit yang terjalin menjadi jenis data kompleks Radio GNU, kemudian mengubah sampel sinyal untuk beralih dari 18,75 MHz asli menjadi 15 MHz, yang merupakan jumlah bilangan bulat sampel per simbol. Pengambilan sampel ulang ini mungkin sedikit membingungkan karena di Profil Kontak kami menentukan bandwidth 15 MHz. Seperti yang dibahas lebih lanjut di akhir tutorial ini, untuk X-Band memberi sinyal digitizer menggunakan laju sampel yaitu 1,25 kali bandwidth yang ditentukan. Ternyata dalam grafik alur ini kita menginginkan laju sampel 15 MHz, sehingga kita memiliki tepat dua sampel per simbol; oleh karena itu kita harus mengambil sampel ulang dari 18,75 MHz menjadi 15 MHz. Selanjutnya kita memiliki blok kontrol perolehan otomatis (AGC), untuk menormalkan tingkat daya sinyal. Filter akar kosinus yang dinaikkan (RRC) bertindak sebagai filter yang cocok. Perulangan Costas melakukan sinkronisasi frekuensi untuk menghapus offset frekuensi kecil yang disebabkan oleh kesalahan osilator atau koreksi Doppler yang tidak sempurna. Tiga blok berikutnya digunakan karena Aqua menggunakan offset QPSK (OQPSK) alih-alih QPSK reguler. Sinkronisasi simbol kemudian dilakukan sehingga simbol OQPSK diambil sampelnya di puncaknya. Kita dapat memvisualisasikan pengambilan sampel QPSK ini menggunakan blok Constellation Sink (contoh output ditampilkan). Sisa grafik alur mengganggu bagian nyata dan imajiner, dan menyimpannya sebagai int8 (karakter/byte) yang mewakili simbol lunak. Meskipun dapat mengonversi simbol lunak ini menjadi 1 dan 0, nantinya memproses manfaat dari memiliki nilai simbol penuh.

Sebelum menjalankan grafik alur, klik dua kali blok Sumber File dan perbarui jalur agar sesuai di mana pun Anda menyimpan /tmp/aqua.pcap.cf32. Klik tombol putar di bagian atas untuk menjalankan grafik alur. Jika langkah-langkah sebelumnya berhasil, dan kontak Aqua Anda berhasil, Anda akan melihat kepadatan spektral daya (PSD) dan plot IQ berikut ditampilkan:

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

Screenshot of the IQ plot of the Aqua signal.

Anda bisa bervariasi, berdasarkan kekuatan sinyal diterima. Jika tidak ada GUI yang muncul, periksa output Radio GNU di kiri bawah untuk kesalahan. Jika GUI muncul tetapi menyerupai garis bising horizontal (tanpa punuk), itu berarti kontak tidak benar-benar menerima sinyal Aqua. Dalam hal ini, periksa kembali apakah autotrack diaktifkan di Profil Kontak Anda dan frekuensi tengah dimasukkan dengan benar.

Waktu yang dibutuhkan Radio GNU untuk menyelesaikan didasarkan pada berapa lama Anda membiarkan skrip pcap_to_iq berjalan, dikombinasikan dengan daya CPU komputer/VM Anda. Saat grafik alur berjalan, ia mendemodulasikan sinyal RF yang disimpan di /tmp/aqua.pcap.cf32 dan membuat file /tmp/aqua_out.bin, yang berisi output modem. Jangan ragu untuk menyalin file .bin ini dari VM.

Kami mengakhiri tutorial ini di sini. Jika Anda tertarik untuk mendekode byte menjadi citra, Anda dapat menggunakan alat NASA atau alat sumber terbuka seperti altillimity/X-Band-Decoders.

(Opsional) Langkah 4: Jalankan grafik aliran Radio GNU langsung

Tutorial ini hingga titik ini mewakili bagian desain/pengujian pembuatan vRF. Kami mengubah alur Radio GNU ini sehingga dapat dijalankan secara langsung di VM, menyerupan modem vRF sejati.

Menangani input

Sebelumnya, kami secara manual mengonversi pcap paket DIFI ke file IQ biner, lalu memuat file IQ biner itu ke radio GNU dengan blok Sumber Fink. Kita dapat menyederhanakan alur menggunakan blok dalam gr-difi (dikelola oleh Microsoft) yang dirancang untuk menerima paket DIFI ke radio GNU! Blok tambahan ini memang mengharuskan kita untuk menginstal modul GNU Radio out-of-tree (OOT), yang seperti plugin untuk Radio GNU:

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

Setelah langkah-langkah ini, Anda harus dapat membuka kembali Radio GNU dan melihat blok baru (Sumber DIFI dan Sink DIFI) yang tercantum di pohon blok. Di grafik alur yang Anda gunakan selama bagian sebelumnya, lakukan langkah-langkah berikut:

  1. Ganti blok Sumber File dengan blok Sumber DIFI
  2. Klik dua kali blok Sumber DIFI untuk mengedit parameternya
  3. Alamat IP Sumber harus menjadi IP antarmuka eth0 VM Anda
  4. Port harus 56001, seperti yang kami gunakan dalam langkah tcpdump
  5. Atur Nomor Aliran DIFI ke 0. Semua parameter lain dapat dibiarkan default

Jika Anda ingin menguji grafik alur ini pada komputer pengembangan Anda, Anda memerlukan alat seperti udpreplay untuk memutar kembali pcap yang kami rekam. Jika tidak, Anda dapat menunggu untuk menguji bagian ini hingga grafik alur digunakan langsung di VM yang tersambung ke Azure Orbital. Batasan ini adalah salah satu alasannya membantu membuat rekaman sinyal selama fase pengembangan dan pengujian vRF.

Menangani output

Anda dapat memilih untuk meninggalkan File Sink di akhir, dan mengambil file yang direkam setiap pass, tetapi banyak aplikasi memerlukan streaming byte keluar dari modem. Salah satu opsinya adalah menggunakan Blok Sink TCP sebagai pengganti File Sink. Blok Sink TCP dapat dikonfigurasi dalam mode server atau klien, tergantung pada sisi mana yang harus membuat koneksi awal. Atur Jenis Input ke Byte, dan Sink TCP mengalirkan byte melalui payload TCP mentah.

ZMQ PUB Sink adalah opsi lain, yaitu pustaka olahpesan yang berada di atas TCP atau komunikasi antarproses (IPC), untuk perilaku yang lebih kompleks seperti PUB/SUB.

Jika Anda membiarkannya sebagai File Sink, sebaiknya tambahkan beberapa baris Python di akhir grafik alur (setelah selesai) yang menyalin file yang dibuat ke lokasi baru.

Menjalankan grafik alur dalam mode tanpa kepala

Ada kemungkinan VM yang menerima aliran Azure Orbital tidak mendukung lingkungan desktop, yang menyebabkan Radio GNU mengalami crash. Kita harus mengonfigurasi grafik alur ini untuk menghindari penggunaan GUI.

  1. Edit blok Opsi di kiri atas
  2. Di bawah Opsi Hasilkan pilih Tidak ada GUI
  3. Di bawah Opsi Jalankan pilih Jalankan ke Penyelesaian
  4. Tekan OK

Langkah-langkah ini memungkinkan kita menjalankan grafik alur sebagai skrip Python tanpa GUI, dan ketika soket masuk menutup grafik alur harus berakhir secara otomatis.

Screenshot of GNU Radio running in Headless Mode.

Jalankan grafik alur langsung

Setelah grafik alur dikonfigurasi dengan Sumber DIFI dan dalam mode headless, kita dapat menjalankan grafik alur secara langsung di VM. Di GNU Radio Companion (GRC), setiap kali Anda menekan tombol putar, file .py dibuat di direktori yang sama. Skrip Python ini perlu disalin ke VM. Jika Radio GNU dan gr-difi diinstal dengan benar, Anda harus dapat menjalankan skrip Python menggunakan python yourflowgraph.py dan menunggu aliran DIFI dari Azure Orbital dimulai. Anda dapat merasa bebas untuk menambahkan kode Python apa pun yang Anda inginkan ke skrip Python ini, seperti menyalin file yang dihasilkan ke lokasi baru setiap pass. Catatan: jika Anda meregenerasi skrip Python dalam GRC, kode Python baru ini harus ditambahkan lagi secara manual.

Jika langkah-langkah di atas berhasil, Anda berhasil membuat dan menyebarkan downlink vRF, berdasarkan Radio GNU!

vRF dalam referensi AOGS

Di bagian ini, kami memberikan beberapa detail khusus RF/digitizer yang menarik bagi pengguna atau desainer vRF.

Di sisi downlink, vRF menerima sinyal dari Azure Orbital. Aliran DIFI dikirim ke VM pengguna oleh Azure Orbital selama kontak satelit. Pengguna diharapkan untuk mengambil aliran secara real-time, baik dengan merekamnya atau memprosesnya secara langsung. Contohnya termasuk menggunakan tcpdump, socat, atau langsung diserap ke dalam modem. Selanjutnya adalah beberapa spesifikasi yang terkait dengan bagaimana stasiun darat Azure Orbital menerima dan memproses sinyal:

  • Frekuensi tengah ditentukan dalam Profil Kontak
  • Bandwidth sinyal (BW) diatur di Profil Kontak, dan laju sampel adalah 1.25*BW untuk X-Band dan 1.125*BW untuk kontak S-Band
  • Aliran DIFI menggunakan kedalaman 8-bit (2 byte per sampel IQ)
  • Mode perolehan digitizer diatur untuk menggunakan kontrol perolehan otomatis (AGC) dengan target daya -10 dBFS
  • Tidak ada inversi spektral yang digunakan
  • Tidak ada offset frekuensi yang digunakan
  • Ukuran MTU VM pengguna harus diatur ke 3650 untuk X-Band dan 1500 untuk S-Band, yang merupakan ukuran paket maks yang berasal dari Azure Orbital

Di sisi uplink, pengguna harus menyediakan aliran DIFI ke Azure Orbital di seluruh pass, agar Azure Orbital dapat dikirimkan. Catatan berikut mungkin menarik bagi perancang uplink vRF:

  • Frekuensi tengah ditentukan dalam Profil Kontak
  • Laju sampel sinyal diatur melalui aliran DIFI (meskipun bandwidth disediakan sebagai bagian dari Profil Kontak, ini murni untuk konfigurasi jaringan di bawah tenda)
  • Kedalaman bit diatur melalui aliran DIFI tetapi Azure Orbital mengharapkan 8 bit
  • ID aliran DIFI harus diatur ke 0
  • Mirip dengan downlink, ukuran MTU harus 1500 untuk S-Band dan hingga 3650 untuk X-Band (pilihan Anda)
  • Tidak ada inversi spektral yang digunakan
  • Tidak ada offset frekuensi yang digunakan

Langkah berikutnya

Untuk dengan mudah menyebarkan komponen hilir yang diperlukan untuk menerima dan memproses data pengamatan bumi spaceborne menggunakan Azure Orbital Ground Station, lihat: