RadarStream is a real-time RAWDATA acquisition, processing, and visualization system for TI MIMO mmWave radar series.
5.mp4
Demo1: Real-time Motion Detection and Radar Feature Visualization
Demo2: Real-time Gesture Recognition SystemThis system supports Texas Instruments' MIMO mmWave radar series for real-time raw data acquisition, processing, and visualization. In addition to the RF evaluation board, the DCA1000EVM is required for data capture. Currently, the system has been tested with:
- IWR6843ISK
- IWR6843ISK-OBS
- IWR1843ISK
If you encounter any issues while using this project, please feel free to submit a pull request.
- Real-time, Multi-threaded Radar Data Acquisition from TI MIMO mmWave Radar Sensors:
- Leveraging a multi-threaded architecture 🧵 for data acquisition and processing.
- To overcome Python's Global Interpreter Lock (GIL) and enable true multi-core processing, the data acquisition module is wrapped in C 🚀, ensuring near real-time, frame-loss-free data capture and handling.
- Multi-dimensional Feature Extraction:
- Range-Time Information (RTI)
- Doppler-Time Information (DTI)
- Range-Doppler Information (RDI)
- Range-Azimuth Information (RAI)
- Range-Elevation Information (REI)
- Interactive Visualization Interface
- Python 3.7+
- PyQt5
- PyQtGraph
- NumPy
- PyTorch
- Matplotlib
- Serial
- TI MIMO mmWave Radar Sensor (tested with IWR6843ISK and IWR6843ISK-OBS)
- DCA1000 EVM (essential for raw data capture)
- PC with Windows OS
The firmware must be selected from the mmwave_industrial_toolbox_4_10_1\labs\Out_Of_Box_Demo\prebuilt_binaries/ directory inside any version of the mmwave_industrial_toolbox.
There is no strict requirement to use version 4.10.1.
- Clone this repository
- Install the required dependencies:
pip install pyqt5 pyqtgraph numpy torch matplotlib pyserial - Connect the mmWave radar sensor and DCA1000 EVM to your computer (only need a 5V 3A DC power wire, a Ethernet Cable, and a micro USB wire)
- Configure the network IPv4 settings (referencing the IPv4 configuration process from using mmWaveStudio for the DCA1000 EVM)
Two different acquisition methods are shown here: one figure displays Raspberry Pi 4B acquisition, while the other demonstrates Windows-based acquisition. However, the Raspberry Pi acquisition has very few frames during real-time processing and display, making it prone to data loss. (not recommended to use Raspberry Pi for acquisition)
The repository includes STL files for a 3D printed structure designed to mount and secure the DCA1000EVM board.
Note: You will need some M3 size nylon standoffs and screws for assembly.
- Run the main application:
python main.py - Select the appropriate COM port for the radar CLI interface
- Choose a radar configuration file
- Click "Send Config" to initialize the radar
- Use the interface to:
- Visualize radar data in real-time
- Capture training data for machine learning models
The application UI can be opened without connecting the radar or DCA1000.
Hardware and the native capture library are initialized only after clicking
"Send Config". If Windows reports error 10049, configure the capture network
adapter IPv4 address to match NetworkConfig.host_address in app_config.py.
On startup, RadarStream automatically selects the TI XDS110 Application/User UART or the Silicon Labs CP2105 Enhanced COM Port as the radar CLI port. The Standard/Data port is not used because raw samples arrive through DCA1000.
Runtime and hardware policy is centralized in app_config.py. The selected TI
CLI .cfg file is the source of truth for ADC samples, chirps per TX, TX count
and RX count. Before each connection, RadarStream parses those values, rebuilds
the native double-buffer to the exact frame length and recreates the DSP
processor. Switching between compatible frame configurations no longer
requires editing app_config.py.
DEFAULT_CONFIG.radar is only the fallback before a file is selected. Network,
DSP and path policies still come from AppConfig; derived values such as raw
frame length and virtual antenna count are calculated automatically. A cfg for
a different physical antenna layout may still need a corresponding
DspConfig azimuth/elevation channel mapping, because array geometry cannot be
inferred safely from TI CLI commands alone.
Mutable UI/DSP coordination is kept separately in runtime_state.py. The old
string-keyed global state module has been removed from the application flow.
Core regression tests do not require radar hardware:
python -m unittest discover -s tests -v
assets/: static resourcesmedia/: README images and demo mediagesture_icons/: gesture visualization iconscad/: 3D-printing STL and CAD source files
radar_configs/: TI radar CLI configuration filesfirmware/: radar firmware binariesnative/: native UDP capture binaries for supported platformsmodel_checkpoints/: local trained-model checkpoints (gitignored)radar_dsp/: reusable low-level radar DSP algorithmstests/: hardware-independent regression testsmain.py: application entry point and composition rootapp_config.py: centralized immutable application configurationruntime_state.py: thread-safe UI/DSP runtime eventsdata_pipeline.py: native capture buffer and processing threadssignal_processor.py: stateful RTI/DTI/RDI/RAI/REI feature extractionhardware_interfaces.py: radar EVM and DCA1000 communication adaptersradar_profile.py: TI CLI profile shape validationradar_tlv.py: IWR6843 configuration and TLV parsergenerated_ui.py: PyQt5 generated UI definitionscolormap_utils.py: PyQtGraph colormap conversion helpers
If this project helps your research, please consider citing our papers that are closely related to this tool:
@ARTICLE{11270504,
author={Chen, Qin and Lu, Qunfeng and Chen, Yaoxi and Tian, Yu and Cui, Zongyong and Cao, Zongjie},
journal={IEEE Transactions on Instrumentation and Measurement},
title={Domain-Generalized Gesture Recognition via mmWave Radar Signal Multi-View Learning},
year={2025},
doi={10.1109/TIM.2025.3637962}}
@ARTICLE{10714388,
author={Chen, Qin and Cui, Zongyong and Tian, Yu and Chen, Yaoxi and Cao, Zongjie},
journal={IEEE Internet of Things Journal},
title={Joint Position Estimation for Hand Motion Using MIMO FMCW mmWave Radar},
year={2025},
volume={12},
number={3},
pages={2838-2853},
doi={10.1109/JIOT.2024.3478234}}
@ARTICLE{10288185,
author={Chen, Qin and Cui, Zongyong and Zhou, Zheng and Tian, Yu and Cao, Zongjie},
journal={IEEE Internet of Things Journal},
title={MMHTSR: In-Air Handwriting Trajectory Sensing and Reconstruction Based on mmWave Radar},
year={2024},
volume={11},
number={6},
pages={10069-10083},
doi={10.1109/JIOT.2023.3325258}}
We gratefully acknowledge OpenAI Codex, without whose assistance this project's extensive refactoring would have been difficult to complete.
This project references and builds upon:
- real-time-radar by AndyYu0010
- OpenRadar - specifically the DSP module
Future improvements planned for this project:
- Validate compatibility with more RF evaluation boards
- Migrate from PyQt5 to PySide6
- Make the native capture API more flexible





