Project Members
Derek Ling
Tyler Thomassen
Srishti Hazra
Advisors
Ivan Seskar
Goal: Create a labeled, machine-readable channel model dataset spanning as many signal types, frequencies, and power levels as possible. The ultimate objective is to replace traditional SDR algorithms (which rely on hand-crafted DSP and idealized channel models) with AI models trained on real-world RF data. The dataset serves as the training corpus for neural networks to learn channel behavior from ground truth, improving generalization over rigid mathematical models.
Approach: We utilize the COSMOS/ORBIT testbed to perform controlled wireless experiments. We capture raw IQ data using USRP nodes (specifically Sandbox 7 and the wider grid) and integrate the SigMF standard for metadata management. Our pipeline evolves from basic GNU Radio flowcharts to automated Python-based scripts that handle data capture, post-processing (SNR, BER, CFO), and final ingestion into a vector database for search and retrieval.
Week 1: Onboarding and Environment Setup
https://docs.google.com/presentation/d/1D2OUZyUC9shGFYABVgAm0Ezi35X3_Y2BJ9HrsjzabZ0/edit?slide=id.g3a8cc5f8fa6_0_3684#slide=id.g3a8cc5f8fa6_0_3684
During the first week, we focused on onboarding and familiarizing ourselves with the project's overarching goals and the technical environment. We introduced ourselves and the project's mission to replace rigid SDR algorithms with AI trained on a comprehensive RF dataset. The core objective was to deploy an SDR platform across the COSMOS/ORBIT testbeds to capture labeled IQ data across varied conditions (frequency, environment, antenna config).
To achieve this, we focused on three main learning areas: understanding the ORBIT testbed workflow, including the use of OMF commands and secure SSH access to the console and nodes; practicing fundamental Linux commands for directory navigation and file management; and learning the basics of Software Defined Radio (SDR), specifically the representation of radio signals using complex IQ samples (In-phase and Quadrature components) to describe amplitude and phase.
Week 2: GNU Radio Fundamentals and Signal Capture
https://docs.google.com/presentation/d/1gbTmQ23vhYKIGh1HkP9oVu8cmr-fby0TV4yflofkmjw/edit?slide=id.g3e8420d5dcb_0_0#slide=id.g3e8420d5dcb_0_0
In the second week, we moved from theoretical understanding to practical implementation by mastering GNU Radio and the USRP hardware. We created flowcharts for transmitting and receiving controlled known reference/pilot signals. We successfully executed experiments using the USRP2 in Sandbox 7 (SB7) by working through COSMOS tutorials and running experiments to transmit and receive signals on the USRP.
We delved into the specifics of signal generation (where a signal source generates digital IQ samples, which are sent via UHD to the USRP to be converted to RF) and signal reception (where the USRP captures RF, converts it to IQ samples, and sends them to GNU Radio for visualization via FFT). We also increased our knowledge of channel modeling concepts, including scattering and pathloss. A significant challenge this week was overcoming the complexity of managing multiple terminals, GNU Radio versions, and mismatched configurations to successfully bridge the transmitter and receiver.
Week 3: Recording IQ Data and Extracting Measurements
https://docs.google.com/presentation/d/1TrLuYk5gkFJBUm3n6kkDYxl7RiLisnLPJMwy_l_tLcs/edit?slide=id.g3eafc11caab_5_1218#slide=id.g3eafc11caab_5_1218
Week 3 marked our transition into running our first controlled experiments and establishing a foundational pipeline for data processing. We extended our GNU Radio receiver flowgraph by adding a file sink, allowing us to permanently store raw IQ samples from each experiment as .dat files instead of just visualizing them in real-time.
To make sense of this raw data, we created a Python analysis script (analyze_iq.py). This script reads the captured IQ samples and computes key channel metrics, including Received Power (dB), Signal-to-Noise Ratio (SNR), and Channel Gain. The output of this script is a structured CSV dataset, which allows us to easily visualize and analyze how the channel behaves as we change parameters (such as gain).
Week 4: Metadata Standards and Why We Need SigMF
https://docs.google.com/presentation/d/1tDQMOg7H909ldch0CIk0LsSEnEFlRjs-REqG1oG5sPg/edit?slide=id.g3edb8dec2a0_3_3429#slide=id.g3edb8dec2a0_3_3429
As we scaled our experiments, we realized that raw IQ samples alone are insufficient. A file containing only IQ samples does not tell us which node transmitted, which node received, the center frequency, sample rate, or gain used. Without this metadata, large datasets become difficult to organize and analyze, and they are largely useless for training AI models.
To solve this, we integrated SigMF (Signal Metadata Format) into our workflow. SigMF is an open standard that pairs raw IQ data (.sigmf-data) with a structured JSON metadata file (.sigmf-meta). This ensures that every dataset is fully self-describing, interoperable across different SDR software, and machine-readable. We mapped out how post-process metadata—like SNR, BER, and CFO—gets computed and appended back into the SigMF annotations array.
Week 5: OFDM Sweeps and Moving to Python Automation
https://docs.google.com/presentation/d/1lpjBrfYQ1ggUGAkSLW-HlonT9EnbAQA3H9NrcUqtR1Q/edit?slide=id.g3ef31e784c4_1_34#slide=id.g3ef31e784c4_1_34
This week, we made a critical infrastructure shift. We identified that the old workflow (dragging and dropping GNU Radio Companion blocks and manually changing parameters for each individual experiment) was not scalable, hard to reproduce, and lacked automation.
We replaced the GRC manual workflow with a modular Python script architecture. We developed tx.py (transmitter), rx.py (receiver), run_experiments.py (the automation engine), and experiment_config.py (centralized parameter control). We tested this new framework by running OFDM sweeps across multiple TX gain levels (0dB, 5dB, 10dB, 15dB). Additionally, we designed a robust Day/Night automated pipeline: experiments capture data during the day, and an automated script pulls files, post-processes them (calculating SNR, BER, CFO, Frame Count), writes the results back into the SigMF metadata, and ingests the final labeled dataset into a database overnight.
Week 6: Constructing the BPSK Pipeline and Establishing a Baseline
https://docs.google.com/presentation/d/1RKwz1tOsXdjRYXWVyPbLLx5IGnNLiHog-L1HhO_lhOE/edit?slide=id.g3ef31e784c4_1_0#slide=id.g3ef31e784c4_1_0
In Week 6, we focused on constructing a dedicated BPSK pipeline to establish a single-frequency, single-power baseline. We generated a reference bit file, transmitted the signal over-the-air using our USRP B210, and captured the unprocessed IQ samples. We established a strict three-file output per experiment: the raw IQ capture file, a metadata file (with TX/RX node IDs and frequency), and the random bit file used for the transmission.
This structure allows us to run a "Classical Demod" (using a GNU Radio BPSK receiver) alongside an "AI Model Demod" (which takes the IQ data and attempts to recover the bits). By comparing the demodulated bits to the reference bit file, we can compute a definitive BER for both methods. The post-processing pipeline was also refined to focus exclusively on calculating and comparing BER and SNR above all else.
Week 7: Phase Lock Issues, Differential Demodulation, and BER Analysis
https://docs.google.com/presentation/d/1YiL3jdu_WLRPYNsU5Ttiii2DgDGMwRWYbn2-i-q82lc/edit?slide=id.g3f434360ac7_2_202#slide=id.g3f434360ac7_2_202
Deploying our BPSK pipeline onto the wider grid revealed a critical issue: the Costas Loop used for coherent demodulation was failing to lock onto the carrier phase. While the code worked perfectly on Sandbox 7 nodes, experiments on the wider grid produced a "ring" scatter plot, indicating amplitude collapse and a failure to lock the absolute phase. Raw IQ and power spectrum plots showed the signal was getting through clearly, so the issue was in the demodulation stage.
We solved the phase lock problem by switching to differential detection (comparing the phase of adjacent symbols instead of trying to lock to an absolute phase). This immediately produced tight clusters in the scatter plot. We ran an extensive 11-trial matrix across multiple frequencies (900 MHz, 3.5 GHz) and distances (~1m to ~9.9m). While close-range and differential schemes achieved perfect 0 BER, long-distance coherent detection hovered around 50% BER (random guessing). Switching to differential detection at long distances produced the expected "waterfall" curve, drastically reducing BER.