在Ubuntu 20.04上构建SDR LTE实验环境:从USRP B210驱动到srsLTE实战
当你第一次将USRP B210连接到电脑时,那个绿色指示灯亮起的瞬间,就像打开了无线电世界的大门。作为软件定义无线电(SDR)领域的瑞士军刀,USRP B210配合开源的srsLTE项目,能让你在桌面上搭建一个完整的LTE通信系统——这不仅是通信工程师的玩具,更是理解现代无线通信原理的活教材。
1. 实验环境准备
在开始之前,确保你拥有以下硬件:
- USRP B210设备(建议使用原厂配套天线)
- 安装Ubuntu 20.04的x86_64电脑(16GB RAM及以上为佳)
- USB 3.0 Type-A转Type-C数据线(必须支持5Gbps传输速率)
1.1 系统基础配置
首先更新软件源并安装基础开发工具:
sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential cmake git libfftw3-dev libmbedtls-dev \ libboost-program-options-dev libconfig++-dev libsctp-dev libzmq3-dev关键细节:Ubuntu 20.04默认的gcc版本(9.3.0)完全兼容srsLTE,但如果你使用更高版本系统,可能需要手动降级工具链。我曾在一个22.04系统上遇到因glibc版本导致的核心转储问题,最终通过docker容器才解决。
1.2 UHD驱动安装
USRP硬件抽象层(UHD)是控制设备的基石,推荐从源码构建最新版本(当前稳定版为4.4.0):
git clone https://github.com/EttusResearch/uhd.git cd uhd/host mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_USB=ON .. make -j$(nproc) sudo make install sudo ldconfig验证设备识别:
uhd_find_devices正常输出应类似:
[INFO] [UHD] linux; GNU C++ version 9.3.0; Boost_107100; UHD_4.4.0.0-0ubuntu1~focal -------------------------------------------------- -- UHD Device 0 -------------------------------------------------- Device Address: serial: 31FD9D5 name: B210 product: B210 type: b200注意:如果遇到USB传输不稳定,尝试在/etc/udev/rules.d/10-uhd.rules中添加SUBSYSTEM=="usb", ATTR{idVendor}=="2500", MODE="0666"
2. srsLTE编译与配置
2.1 源码获取与依赖解决
srsLTE对GNURadio有可选依赖,建议提前安装:
sudo apt install -y libuhd-dev libboost-all-dev libqwt-qt5-dev \ qtbase5-dev qt5-default libqt5svg5-dev libblas-dev liblapack-dev克隆项目并切换稳定分支:
git clone https://github.com/srsran/srsRAN.git cd srsRAN git checkout release_21_10 # 确认兼容Ubuntu 20.04的版本2.2 编译参数优化
针对USRP B210的特定配置:
mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DENABLE_GUI=ON \ -DENABLE_HARDWARE=ON \ -DUSE_B210=ON .. make -j$(nproc)编译完成后,建议运行单元测试:
make test3. 物理连接与射频校准
3.1 硬件连接规范
USRP B210的接口布局常被忽视:
- TX/RX1:主收发通道(建议用于eNodeB)
- TX/RX2:辅助通道(可用于UE模拟)
- REF IN:外部10MHz参考时钟输入(实验室环境建议连接)
实际经验:我曾因天线端口接反而导致信号衰减30dB,正确的天线连接顺序应该是:
- 将SMA接口旋转至对准缺口
- 听到"咔嗒"声后,再旋转约15度锁定
3.2 设备校准步骤
运行自动校准脚本:
sudo uhd_usrp_probe --args="type=b200"重点检查以下输出参数:
-------------------------------------------------- -- RX Frequency Range -------------------------------------------------- start: 70.000 MHz stop: 6000.000 MHz step: 0.001 MHz -------------------------------------------------- -- TX Frequency Range -------------------------------------------------- start: 70.000 MHz stop: 6000.000 MHz step: 0.001 MHz执行LO偏移校准(需连接TX1到RX1的射频线):
uhd_cal_tx_iq_balance --args="type=b200" --freq 1800e64. srsLTE网络部署实战
4.1 eNodeB基站配置
创建最小化配置文件enb.conf:
[enb] enb_id = 0x1A mcc = 901 mnc = 55 mme_addr = 127.0.1.100 gtp_bind_addr = 127.0.1.1 s1c_bind_addr = 127.0.1.1 n_prb = 25 tm = 1启动基站:
sudo srsenb enb.conf关键参数说明:n_prb=25对应5MHz带宽,实际部署需根据当地法规选择合法频段
4.2 UE模拟器连接测试
新建ue.conf配置文件:
[ue] ue_category = 4 dl_earfcn = 3400 nof_antennas = 1 mme_addr = 127.0.1.100在另一个终端启动用户设备模拟:
srsue ue.conf成功连接时,将在eNodeB终端看到类似输出:
[RRC] UE 0x46 connected [GTPU] DL tunnel established4.3 端到端通信验证
通过虚拟TUN接口测试网络连通性:
ping -I tun_srsue 8.8.8.8实现"Hello World"数据传输:
# eNodeB侧 echo "Hello UE" | nc -u 172.16.0.2 3000 # UE侧 nc -lu 30005. 高级调试与性能优化
5.1 常见故障排查指南
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| UHD_ERROR_CODE_TIMEOUT | USB控制器供电不足 | 使用带外接电源的USB Hub |
| 频繁的Underflow警告 | 系统实时性不足 | 设置CPU为性能模式:cpupower frequency-set -g performance |
| RSSI持续为-120dBm | 天线阻抗不匹配 | 使用VNA测量天线驻波比,应<2.0 |
5.2 射频参数调优
通过前端滤波提升信噪比:
uhd_fft --args="type=b200" --freq 1800e6 --rate 5e6 --gain 30在GUI中观察频谱时,可动态调整以下参数:
# 交互式调整示例 usrp.set_rx_gain(30, "RX1") usrp.set_tx_gain(15, "TX1") usrp.set_rx_bandwidth(5e6, "RX1")5.3 实时性增强配置
修改GRUB参数提升系统响应:
sudo nano /etc/default/grub # 修改GRUB_CMDLINE_LINUX="isolcpus=2,3 nohz_full=2,3 rcu_nocbs=2,3" sudo update-grub绑定进程到特定CPU核心:
taskset -c 2 srsenb enb.conf6. 扩展实验与应用场景
6.1 多UE压力测试
使用srsUE的批量启动模式:
for i in {1..5}; do srsue ue_${i}.conf > ue_${i}.log 2>&1 & done监控连接状态:
watch -n 1 'cat /proc/net/dev | grep tun'6.2 物理层信号分析
启用srsLTE的IQ记录功能:
[rf] enable_iq_file = true iq_filename_format = /tmp/ue_iq_%s.bin使用Python分析采集数据:
import numpy as np iq_samples = np.fromfile("/tmp/ue_iq_rx.bin", dtype=np.complex64) psd = np.abs(np.fft.fft(iq_samples))**26.3 与商用设备互操作测试
配置核心网参数实现与Android手机的连接:
[epc] hss_db_file = /tmp/hss_db.sqlite apn = srsapn apn_addr = 172.16.0.1在手机网络设置中添加APN:
- 名称:srsapn
- APN:srsapn
- 类型:default,supl