Software Configuration and Setup
This section provides guidance on configuring and running the software components of the High-Performance Analog Meets AI demonstration.
Overview
The demonstration consists of two main software components:
Holoscan Modulation Classification Application - A real-time AI-powered modulation classification system built with NVIDIA Holoscan SDK
Data Visualization Dashboard - A Python-based Dash application for monitoring and analyzing classification results
Holoscan Modulation Classification Application
Description
This application performs real-time modulation classification on incoming data using MATLAB-generated CUDA code. It processes signals from ADRV9009 devices and classifies them into one of eight modulation schemes:
BPSK (Binary Phase Shift Keying)
QPSK (Quadrature Phase Shift Keying)
8PSK (8-Phase Shift Keying)
16QAM (16-Quadrature Amplitude Modulation)
64QAM (64-Quadrature Amplitude Modulation)
PAM4 (4-Pulse Amplitude Modulation)
GFSK (Gaussian Frequency Shift Keying)
CPFSK (Continuous Phase Frequency Shift Keying)
Key Components
- Holohub application: The Holohub application and IIO operators
Example applications: https://github.com/nvidia-holoscan/holohub/tree/main/applications/iio
Generic operators: https://github.com/nvidia-holoscan/holohub/tree/main/operators/iio_controller
There are 5 operators (each with its own Python binding) that can read/write IIO attributes, read/write IIO buffers and configure the initial setup for a device/system. This demonstration uses the buffer read operator in order to read from the 2 ADRV9009 devices. After that, the matlab module (that needs to be compiled beforehand) will call the classification function that returns the modulation and confidence level. This will be printed to the output file from where the python dash app will read and display the information.
Configuration
Network Configuration
Update IP addresses in main.cpp for your ADRV9009 devices:
// Configure IIO buffer read for Talise device at IP 10.43.1.10 auto iio_rx_1 = make_operator<ops::IIOBufferRead>("iio_rx_1", Arg("ctx") = std::string("ip:10.43.1.10"), Arg("dev") = std::string("axi-adrv9009-rx-hpc"), // ... other parameters
Output Configuration
Modify the YAML file to set output file paths:
matlab: out_file: "modulation_results.txt"
Channel Configuration
The application is configured for 8 channels (4 I/Q pairs):
std::vector<std::string> channel_names = { "voltage0_i", "voltage0_q", "voltage1_i", "voltage1_q", "voltage2_i", "voltage2_q", "voltage3_i", "voltage3_q" };
Building and Running
Build the Application
Run the Application
The application will:
Connect to the specified ADRV9009 devices
Continuously read data samples (8192 samples per buffer, but it is configurable from the code)
Process data through the MATLAB classification model
Output results to
modulation_results.txtandmodulation_results1.txt
Data Visualization Dashboard
Location
The visualization script is located at: jupiter_modulation/examples/plot_identification_data.py
Description
This Python application provides a web-based dashboard for monitoring and analyzing the modulation classification results in real-time. It features:
Real-time confusion matrices
Constellation diagrams
Time-domain waveform plots
Classification accuracy metrics
Interactive modulation selection
Key Features
- Real-time Monitoring
Reads results from Holoscan output files every 3 seconds
Updates visualizations dynamically
Tracks classification performance over time
- Modulation Control
Manual modulation selection or automatic random switching
Real-time transmission to connected SDR devices
Supports all 8 modulation schemes
- Signal Visualization
Constellation diagrams showing I/Q relationships
Time-domain waveforms (I and Q components)
Interactive plots with hover information
Prerequisites
Install required Python packages:
~$
pip3 install dash plotly pandas scipy scikit-learn numpy pyadi-iio
Hardware Requirements
The dashboard expects the following hardware setup:
4 ADRV9002 devices for signal transmission (IPs: 192.168.0.15-18)
2 ADRV9009ZU11eg devices for signal reception (configured in Holoscan app)
Modulated data files in
modulated_data/directory
Configuration
File Paths
Update file paths to match your Holoscan output location:
file_path = '/home/analog/git/holohub/build/matlab_classify_modulator/modulation_results.txt' file_path1 = '/home/analog/git/holohub/build/matlab_classify_modulator/modulation_results1.txt'
SDR Configuration
Configure SDR devices with appropriate IP addresses and stream profiles:
sdr = adi.adrv9002(uri="ip:192.168.0.15") sdr.write_stream_profile("lte_40_lvds_api_68_14_10.stream", "lte_40_lvds_api_68_14_10.json")
Modulated Data
Ensure modulated data files are available in the
modulated_data/directory:mod_BPSK.mat
mod_QPSK.mat
mod_8PSK.mat
mod_16QAM.mat
mod_64QAM.mat
mod_PAM4.mat
mod_GFSK.mat
mod_CPFSK.mat
Running the Dashboard
Start the Holoscan Application
Ensure the Holoscan modulation classification application is running and generating output files.
Launch the Dashboard
~$
python3 plot_identification_data.pyAccess the Web Interface
Open a web browser and navigate to
http://localhost:8050
Usage Workflow
Select Modulation: Use the dropdown to choose a specific modulation or select “Random” for automatic switching
Monitor Classification: Observe real-time classification results for both ADRV9009 devices
Analyze Performance: Review confusion matrices and accuracy metrics
Examine Signals: Study constellation diagrams and time-domain waveforms
Support and Resources
For additional support and documentation:
Holoscan SDK Documentation: https://docs.nvidia.com/holoscan/
PyADI-IIO Documentation: Analog Devices Hardware Python Interfaces