在Ubuntu 20.04上跑通你的第一个SDR LTE项目:基于srsLTE与USRP B210的完整搭建教程
2026/6/5 6:07:47 网站建设 项目流程

在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 test

3. 物理连接与射频校准

3.1 硬件连接规范

USRP B210的接口布局常被忽视:

  • TX/RX1:主收发通道(建议用于eNodeB)
  • TX/RX2:辅助通道(可用于UE模拟)
  • REF IN:外部10MHz参考时钟输入(实验室环境建议连接)

实际经验:我曾因天线端口接反而导致信号衰减30dB,正确的天线连接顺序应该是:

  1. 将SMA接口旋转至对准缺口
  2. 听到"咔嗒"声后,再旋转约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 1800e6

4. 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 established

4.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 3000

5. 高级调试与性能优化

5.1 常见故障排查指南

故障现象可能原因解决方案
UHD_ERROR_CODE_TIMEOUTUSB控制器供电不足使用带外接电源的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.conf

6. 扩展实验与应用场景

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))**2

6.3 与商用设备互操作测试

配置核心网参数实现与Android手机的连接:

[epc] hss_db_file = /tmp/hss_db.sqlite apn = srsapn apn_addr = 172.16.0.1

在手机网络设置中添加APN:

  • 名称:srsapn
  • APN:srsapn
  • 类型:default,supl

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询