OpenISAC

一个用于通信感知一体化(ISAC)研究的开源通用高性能实时实验平台

开始使用

关于 OpenISAC

通信感知一体化 (ISAC) 被认为是 6G 的关键技术之一。OpenISAC 是一个通用且高性能的开源平台,旨在弥合理论与实践之间的差距。

它完全基于开源软件 (UHD、C++、Python) 构建,支持基于 OFDM 的实时通信和感知。其核心特性是新颖的空口 (Over-the-Air) 感知同步机制,无需有线连接即可实现稳定的双站感知。

如果您觉得这个仓库有用,请引用我们的论文:

Z. Zhou, C. Zhang, X. Xu, and Y. Zeng, "OpenISAC: An Open-Source Real-Time Experimentation Platform for OFDM-ISAC with Over-the-Air Synchronization," submitted to IEEE Trans. Wireless Commun., Jan. 2026.

[arXiv]

所属机构

SEU Logo PML Logo

东南大学移动通信国家重点实验室 & 紫金山实验室 曾勇课题组

社区

微信公众号:

WeChat QR Code

它是什么,又不是什么?

OpenISAC 是什么?

OpenISAC 是一个基于 OFDM 的通信与感知一体化(ISAC)系统,专为学术实验和快速算法验证而设计。

其目标是提供一个简洁且易于修改的 OFDM 平台,使研究人员能够快速迭代通信与感知算法,而无需处理复杂的标准协议栈(如 WIFI、LTE、NR 等)。

由于专注于简洁性,OpenISAC 通常需要更少的计算资源,因此相较于更复杂、功能更全面的系统,能够实现更高的采样率。

OpenISAC 不是什么?

OpenISAC 不旨在成为兼容标准的实现(它不符合 Wi-Fi 或 5G NR 等标准)。

它也不旨在替代或竞争全栈开源标准实现,如 openwifi 或 OpenAirInterface。如果您的目标是互操作性、标准合规性或生产级协议栈,那么上述项目是正确的方向。

何时使用它

何时不使用它

感知演示

时延-多普勒感知

运动无人机的实时时延-多普勒图。

杂波抑制

MTI 杂波抑制滤波器开启与关闭对比。

微多普勒感知

无人机上升和下降的微多普勒特征。

通信演示

视频流传输

通过 ISAC 链路进行基于 ffmpeg 的实时视频流传输。

硬件要求

后端 (C++)

要设置完整的系统,您需要以下硬件:

连接设置

该系统由两个主要节点组成:

基站 (BS) 节点: 1x 计算机, 1x USRP (连接 2 根天线: 1 发送, 1 接收), OCXO 连接到 REFIN。

用户 (UE) 节点: 1x 计算机, 1x USRP (连接 1 根天线: RX), OCXO 连接到 REFIN (可选高精度 DAC)。

接口要求

为了支持高带宽和采样率,请确保计算机和 USRP 之间的连接使用:

前端 (Python)

软件要求

后端 (C++)

操作系统

Ubuntu 24.04 LTS

依赖项和安装

1. UHD (USRP 硬件驱动程序)

按照 Ettus 官方指南 安装 (UHD v4.9.0.1)。

2. 安装 Aff3ct
sudo apt-get install nlohmann-json3-dev
git clone https://github.com/aff3ct/aff3ct.git
cd aff3ct
git submodule update --init --recursive
mkdir build
cd build
cmake .. -G"Unix Makefiles" -DCMAKE_CXX_COMPILER="g++" -DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_CXX_FLAGS="-funroll-loops -march=native" -DAFF3CT_COMPILE_EXE="OFF" \
-DAFF3CT_COMPILE_SHARED_LIB="ON" -DSPU_STACKTRACE="OFF" -DSPU_STACKTRACE_SEGFAULT="OFF" \
-DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -faligned-new"
make -j$(nproc)
sudo make install
3. 克隆并构建 OpenISAC
cd ~
git clone https://github.com/zhouzhiwen2000/OpenISAC.git
cd OpenISAC
mkdir build
cd build
cmake ..
make -j$(nproc)
4. 系统性能调优
cd ~/OpenISAC
chmod +x set_performance.bash
./set_performance.bash

注意: 如果您需要启用 RT_RUNTIME_SHARE 功能,则需要在 BIOS 设置中关闭 secure_boot

UHD 线程优先级配置

如果看到 [WARNING] [UHD] Failed to set desired affinity for thread,需要启用实时优先级:

sudo groupadd usrp
sudo usermod -aG usrp $USER

然后将以下行添加到 /etc/security/limits.conf 的末尾:

@usrp - rtprio  99

注销并重新登录以使更改生效。

5. CPU 隔离和执行

为了确保稳定的实时性能,建议为信号处理任务隔离 CPU 核心。

步骤 1: 隔离CPU核心

cd ~/OpenISAC
chmod +x isolate_cpus.bash
sudo ./isolate_cpus.bash

步骤 2: 在隔离核心上运行应用程序

使用脚本在隔离核心上启动应用程序:

cd build
sudo ../isolate_cpus.bash run ./OFDMModulator

注意: 启用 CPU 隔离时请务必使用脚本启动。

重置配置 (可选)

sudo ./isolate_cpus.bash reset

前端 (Python)

建议使用 Python 3.13condavenv 环境。

安装依赖项

pip install -r requirements.txt

注意: 视频流演示需要 ffmpeg

启用 GPU 加速 (可选)

如果有 Nvidia GPU,请安装 cupy-cuda12x

pip install cupy-cuda12x

典型使用示例

1. 启动 BS

sudo -s
cd build
# 对于 X310:
sudo ../isolate_cpus.bash run ./OFDMModulator --args "addr=192.168.40.2, master_clock_rate=200e6, num_recv_frames=512, num_send_frames=512"

# 对于 B210:
sudo ../isolate_cpus.bash run ./OFDMModulator --args "num_recv_frames=512, num_send_frames=512, send_frame_size=11520, recv_frame_size=11520" --wire-format-tx sc8

如果您使用单独的计算机作为前端,请添加 --default-ip=<your front end IP>

2. 启动 UE

sudo -s
cd build
# 对于 X310:
sudo ../isolate_cpus.bash run ./OFDMDemodulator --args "addr=192.168.40.2, master_clock_rate=200e6, num_recv_frames=512, num_send_frames=512"

# 对于 B210:
sudo ../isolate_cpus.bash run ./OFDMDemodulator --args "num_recv_frames=512, num_send_frames=512, send_frame_size=11520, recv_frame_size=11520"

如果您使用单独的计算机作为前端,请添加 --default-ip=<your front end IP>

3. 将视频流传输到 BS

ffmpeg -re -stream_loop -1 -fflags +genpts -i video.mp4 -an -c:v libx264 -x264-params keyint=5:min-keyint=1 -b:v 3000k -minrate 3000k -maxrate 3000k -bufsize 1M -f rtp -sdp_file video.sdp "rtp://<your IP of the BS>:50000"

如果您在BS本地传输视频流,BS 的 IP 可以设置为 127.0.0.1。

4. 从 UE 播放视频

video.sdp 复制到视频接收端,将 m=video 50000 RTP/AVP 96 修改为 m=video 50001 RTP/AVP 96

ffplay -protocol_whitelist file,rtp,udp -i video1.sdp

注意:此命令应在前端运行。

5. 运行单站感知前端

python3 ./plot_sensing_microDoppler_CPP_MTI.py

6. 运行双站感知前端

python3 ./plot_bi_sensing_microDoppler_CPP_MTI.py

OFDM 调制器 (OFDMModulator)

OFDMModulator (BS 节点) 可以使用以下命令行参数配置:

参数 默认值 描述
--args addr=192.168.40.2, ... USRP 设备参数
--fft-size 1024 FFT 大小
--cp-length 128 循环前缀 (CP) 长度
--sync-pos 1 同步符号位置索引
--sample-rate 50e6 采样率 (Hz)
--bandwidth 50e6 模拟带宽 (Hz)
--center-freq 2.4e9 中心频率 (Hz)
--tx-gain 20 发送增益 (dB)
--rx-gain 30 接收增益 (dB)
--rx-channel 1 USRP 上的 RX 通道索引
--zc-root 29 Zadoff-Chu 序列根
--num-symbols 100 每帧 OFDM 符号数
--clock-source external 时钟源 (internalexternal)
--system-delay 63 用于对齐的系统延迟样本数
--wire-format-tx sc16 USRP TX 传输格式 (sc8sc16)
--wire-format-rx sc16 USRP RX 传输格式 (sc8sc16)
--mod-udp-ip 0.0.0.0 接收 UDP 数据负载的绑定 IP
--mod-udp-port 50000 接收 UDP 数据负载的绑定端口
--sensing-ip 127.0.0.1 感知数据的目标 IP
--sensing-port 8888 感知数据的目标端口
--default-ip 127.0.0.1 所有服务的默认 IP (Python前端的IP)
--cpu-cores 0,1,2,3,4,5 要使用的 CPU 核心列表

OFDM 解调器 (OFDMDemodulator)

OFDMDemodulator (UE 节点) 支持以下参数:

参数 默认值 描述
--device-args num_recv_frames=512... USRP 设备参数
--fft-size 1024 FFT 大小
--cp-length 128 循环前缀 (CP) 长度
--center-freq 2.4e9 中心频率 (Hz)
--sample-rate 50e6 采样率 (Hz)
--bandwidth 50e6 模拟带宽 (Hz)
--rx-gain 60 接收增益 (dB)
--rx-channel 0 RX 通道索引
--sync-pos 1 同步符号位置索引
--sensing-ip 127.0.0.1 发送感知数据的 IP
--sensing-port 8889 发送感知数据的端口
--control-port 9999 接收控制命令的端口
--channel-ip 127.0.0.1 信道估计输出的 IP
--channel-port 12348 信道估计输出的端口
--pdf-ip 127.0.0.1 原始功率延迟分布 (PDF) 数据输出的 IP
--pdf-port 12349 原始功率延迟分布 (PDF) 数据输出的端口
--constellation-ip 127.0.0.1 星座图数据的 IP
--constellation-port 12346 星座图数据的端口
--freq-offset-ip 127.0.0.1 频率偏移数据的 IP
--freq-offset-port 12347 频率偏移数据的端口
--udp-output-ip 127.0.0.1 解码用户数据的目标 IP
--udp-output-port 50001 解码用户数据的目标端口
--zc-root 29 Zadoff-Chu 序列根
--num-symbols 100 每帧符号数
--sensing-symbol-num 100 用于感知处理的符号数
--clock-source external 时钟源 (internalexternal)
--software-sync true 启用软件同步/跟踪
--hardware-sync false 启用硬件同步
--hardware-sync-tty /dev/ttyUSB0 用于硬件同步的 TTY 设备
--wire-format-rx sc16 USRP RX 传输格式
--default-ip 127.0.0.1 所有服务的默认 IP
--cpu-cores 0,1,2,3,4,5 要使用的 CPU 核心列表