Theory of Operation¶
AirStack Core is a Deepwave Linux distribution that enables the command and control of Deepwave hardware. It is based upon the NVIDIA Jetpack and the Ubuntu operating system and includes all the drivers necessary to control the AIR-T. This section of the documentation will provide a high level overview of the AIR-T + AirStack Core ecosystem. Specifically, it addresses how to use AirStack Core to build and integration applications into the AIR-T.
AIR-T Hardware Overview¶
Before diving into the fundamentals of AirStack Core, it is important to understand the basic functionality of the Deepwave hardware. While each AIR-T model may differ slightly based on the hardware features available, the general theory of operation is described in the figure below.
flowchart LR
%% Define Shapes
RFANT@{ shape: f-circ }
LNA[**Gain Stages** <br> TX / RX]
RFIC[**RFIC** <br> ADC/DAC]
FPGA[**FPGA** <br> Interp / Dec]
GPU[**NVIDIA Jetson** <br> GPU / CPU]
CPU@{ shape: f-circ }
GPS_ANT@{ shape: f-circ }
CLK[**GPS / Clocking**]
DIST[**Clock Distribution**]
%% Define Connections
RFANT <--ANT--> LNA <--RF--> RFIC <--JESD--> FPGA <--PCIe--> GPU <--"KVM<br>ETH<br>USB"--> CPU
GPS_ANT -- "GPS<br>REF<br>PPS" --> CLK --> DIST
The NVIDIA Jetson is the interface for command and control of the AIR-T. This may be done by directly connecting to the AIR-T to a keyboard, video, and mouse (KVM), or by connecting the AIR-T to a network and remotely logging in using ssh. Once the user is operating the AIR-T's NVIDIA Jetson, they have the ability to control the GPU, CPU, and RF subsystems on the system. The primary API for commanding and controlling the AIR-T subsystems is using the built-in SoapySDR driver with the SoapyAIRT plugin.
AirStack Core Application Development Overview¶
The SoapyAIRT driver abstracts away all the difficulties of controlling the FPGA, RFIC, and analog gain stages while also acting as the tool to request or send RF samples to the transceiver.
The figure below outlines a basic flowchart for how to integrate a receive application using the AirStack Core API. The Setup block sets the AIR-T subsystem parameters, which are defined in this programming guide. The Work block receives RF data, sends the signal to a neural network for inference, and repeats until the loop is done. Finally, when the loop has completed, the stream is closed and the application returns.
flowchart
subgraph "**Setup**"
Start([Start]) -->
SDR(Instantiate Device Class) -->
CLK(Set Clock/Time Parameters) -->
SETRF(Set RF Parameters) -->
STREAM(Set Stream Parameters) -->
setup(Setup Stream)
end
subgraph **Work**
setup --> while{"<br>While Receiving Buffers<br><br>Done?"}
while -- No -->
tweak("Update Parameters (Optional)") -->
activate(Activate Stream) -->
read("Read Stream<br> (loop optional)") -->
deactivate(Deactivate Stream) -->
err(Error Check) -->
calc[["**Perform Inference**"]] -->
while & Report[[**Assess and Report**]]
end
subgraph **Close**
while -- Yes -->
close(Close Stream) -->
Done(["Done"])
end
Report -- Network -->
Network@{ shape: f-circ }
Programming Languages¶
Applications in AirStack Core may be developed using almost any software language, but Rust, C/C++, and Python are the primary supported languages. This programming guide may contain reference to various programming languages, however the majority of example are provided using Python.