OAI 5G NR + USRP B210:从零搭建低成本开源5G实验平台
1. 为什么选择OAI和USRP B210搭建5G实验平台
第一次接触5G实验平台搭建时,我也被高昂的设备成本吓退过。直到发现OAI(OpenAirInterface)这个开源项目,配合USRP B210这套性价比极高的硬件,才算找到了可行的解决方案。这里先说说为什么这套组合特别适合预算有限的个人开发者和高校实验室。
OAI作为欧洲EURECOM组织维护的开源项目,完整实现了5G NR协议栈。虽然商用5G设备动辄几十万,但用OAI+USRP B210的组合,整套成本可以控制在2万元以内。USRP B210虽然带宽只有40MHz(3/4采样时),但对于学习5G协议和开发验证已经足够。我实测下来,这套配置能稳定完成RRC连接建立全过程,对于理解5G底层机制特别有帮助。
相比更强大的USRP B310,B210有三个明显优势:价格只有B310的1/3左右;USB 3.0接口即插即用,省去了额外的电源和PCIe连接;体积只有手掌大小,搭建移动测试环境更方便。不过要注意,5G信号处理对CPU要求较高,建议至少配备i7-8700K级别的处理器,否则物理层计算会成为瓶颈。
2. 硬件准备与系统配置
2.1 核心硬件选型指南
我的实验平台用了以下配置,运行20MHz带宽的5G NR信号非常稳定:
- 主机:Intel i9-9900K(8核16线程),32GB DDR4内存,1TB NVMe SSD
- USRP B210(带两根天线)
- Ubuntu 18.04 LTS系统
这里特别提醒几个容易踩坑的地方:
- CPU选择:5G LDPC编解码非常吃CPU资源,实测i5处理器跑20MHz带宽都会卡顿。建议至少8核处理器,有条件最好上至强金牌系列。
- 内存带宽:USRP B210通过USB 3.0传输I/Q数据,双通道内存能显著降低传输延迟。
- 系统版本:OAI对Ubuntu 18.04支持最好,20.04有时会出现驱动兼容性问题。
2.2 Ubuntu系统优化技巧
安装完Ubuntu后,建议立即做以下优化:
# 更换为国内源(以阿里云为例) sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list sudo apt update && sudo apt upgrade -y # 安装必备工具 sudo apt install -y git vim htop gcc g++ make cmake libboost-all-devUSRP B210驱动安装有个小技巧:先装UHD驱动再插设备。以下是完整步骤:
git clone https://github.com/EttusResearch/uhd.git cd uhd/host mkdir build && cd build cmake ../ make -j$(nproc) sudo make install sudo ldconfig插上USRP后,运行uhd_find_devices应该能看到设备信息。如果报USB权限错误,记得把用户加入plugdev组:
sudo usermod -aG plugdev $USER3. OAI源码编译实战
3.1 获取和准备源码
OAI源码更新很频繁,建议从GitLab拉取develop分支:
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git cd openairinterface5g git checkout develop source oaienv # 初始化环境变量国内用户可能会遇到git clone慢的问题。我的经验是:
- 先尝试用SSH协议clone(速度通常比HTTPS快)
- 如果卡在某个子模块,可以手动到GitHub下载对应仓库,放到指定目录
3.2 编译技巧与排错
首次编译建议使用以下命令:
cd cmake_targets ./build_oai -I --gNB -w USRP这个-I参数会自动安装所有依赖项。几个常见问题处理:
- protobuf编译失败:编辑
build_helper文件,注释掉所有wget和git操作,手动下载缺失的依赖 - 内存不足:添加swap空间(至少8GB),或者减少make的并行线程数
- USB传输错误:尝试更换USB3.0接口,或者降低采样率(后面会讲)
编译完成后,关键可执行文件会生成在cmake_targets/ran_build/build目录下,最重要的是nr-softmodem(gNodeB主程序)。
4. 配置与启动5G基站
4.1 配置文件详解
OAI的配置文件在targets/PROJECTS/GENERIC-NR-5GC/CONF/目录下。以band78为例,主要需要修改这些参数:
plmn_list = ({ mcc = 460; # 中国移动国家码 mnc = 03; # 运营商网络码 amf_ip_address = ( { ipv4 = "192.168.88.31"; # AMF服务器IP active = "yes"; } ); }); NETWORK_INTERFACES : { GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0"; GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.88.31/24"; };特别提醒:
- 如果只是单机测试,可以把AMF IP设为本机IP
- 频点配置要符合当地法规,band78(3.5GHz)在国内需要申请许可
- 小区ID(cell_id)不要与周边基站冲突
4.2 启动gNodeB的技巧
使用以下命令启动基站:
sudo ./nr-softmodem -O ../gnb.sa.band78.fr1.106PRB.usrpb210.conf --sa -E关键参数说明:
--sa:独立组网模式-E:启用3/4采样率(降低USB带宽压力)-d:启用调试日志(排查问题时很有用)
如果看到日志输出"NFAPI: gNB configuration successful",说明基站启动成功。这时用支持5G的测试手机应该能搜索到小区信号(需要手动设置PLMN)。
5. 常见问题解决方案
5.1 设备连接问题
症状:USRP经常断开连接
- 检查USB线材质量(建议用带屏蔽的短线)
- 降低采样率(添加
--samp-rate 11.52e6参数) - 在BIOS中关闭USB节能模式
5.2 高CPU占用处理
优化方案:
- 限制LDPC解码线程数:
export OAI_NR_LDPC_MAX_NUM_THREADS=4- 关闭不必要的日志:
sudo ./nr-softmodem ... --noS1 --nokrnmod 15.3 信号质量优化
通过uhd命令可以调整RF参数:
uhd_usrp_probe --args="type=b200" # 然后调整发射功率、增益等参数实测在办公室环境,设置tx_gain=60、rx_gain=40能获得较好的信噪比。如果出现信号失真,可以尝试降低带宽到10MHz测试。
6. 进阶实验方向
完成基础搭建后,可以尝试这些扩展实验:
- 多小区组网:用两台USRP B210模拟蜂窝网络
- 端到端测试:连接开源5GC(如free5GC)
- 协议分析:用Wireshark抓取NGAP接口报文
- 性能优化:修改OAI源码实现自定义调度算法
我在实验室里用这套平台成功完成了5G URLLC业务的端到端测试,时延可以稳定控制在10ms以内。虽然USRP B210的性能有限,但对于协议学习和科研验证已经完全够用。
