使用硬件及软件
硬件
5g基站搭建主要运用到的硬件有USRP B210开发版,以及一台搭载Ubuntu 22.04系统的电脑。
USRP B210是一款软件定义无线电平台,其灵活性体现在用户可以通过编程和配置软件来处理射频信号。此开发板不仅与GNU Radio和MATLAB等开源软件平台兼容,也支持其他编程语言和开发环境。通过提供外部时钟输入功能,多个USRP设备能实现同步操作,这对于构建分布式无线网络或MIMO系统尤其重要。此外,借助USB 3.0高速接口,USRP B210能够与主机计算机快速传输数据并进行控制,使其成为高带宽应用和实时信号处理的理想选择,从而满足本项目的开发需求。
另一方面,Ubuntu 22.04是一个基于Linux内核的操作系统,坚持开源原则,并默认使用GNOME桌面环境作为用户界面。它集成了最新版本的软件和工具,例如GNOME 3.38、Linux内核5.11、LibreOffice 7.1等。作为一个多架构支持的平台,Ubuntu 22.04适用于64位x86架构(常用于桌面和服务器)、ARM架构(适用于嵌入式系统和物联网设备),以及Power架构(面向高性能计算)。该操作系统还特别适合作为srsRAN LTE项目的运行平台。
具体使用硬件如下:
搭载Ubuntu 22.04系统的电脑
图 搭载Ubuntu 22.04系统的电脑
USRP B210
图 USRP B210
SMART CARD READER
图 SMART CARD READER
SIM卡
图 SIM卡
无线门铃及信号发生器
图 无线门铃及信号发生器
软件
XLBSIMWrite
AUDACITY
GNU radio
MATLAB
搭建过程
安装UHD
在Ubuntu22.04系统上安装UHD。
在终端依次输入指令:
$ sudo apt install uhd-host # 安装UHD
$ sudo uhd_images_downloader # download the UHD FPGA Images
测试:
$ sudo uhd_find_devices
输入指令后可以发现电脑识别到了USRP B210设备,安装成功。
安装srsRAN项目
### install the required build tools and dependencies
$ sudo apt-get install cmake make gcc g++ pkg-config libfftw3-dev libmbedtls-dev libsctp-dev libyaml-cpp-dev libgtest-dev
### clone the srsRAN Project repository
$ git clone https://github.com/srsRAN/srsRAN_Project.git
### build the code-base
$ cd srsRAN_Project
$ mkdir build
$ cd build
$ cmake ../
$ make -j $(nproc)
$ make test -j $(nproc)
安装Open5GS作为核心网
Install Open5GS with a Package Manager
### Getting MongoDB
$ curl -fsSL https://pgp.mongodb.com/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor
$ echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
### Install the MongoDB packages
$ sudo apt install -y mongodb-org
$ sudo systemctl start mongod (if '/usr/bin/mongod' is not running)
$ sudo systemctl enable mongod (ensure to automatically start it on system boot)
### install Open5GS
$ sudo add-apt-repository ppa:open5gs/latest
$ sudo apt update
$ sudo apt install open5gs
之后安装Nightly Builds与WebUI。
Nightly Builds:
很多大型软件需要做一些每日构建的过程,用来分析是否能正常工作以便及时反馈。由于其耗费时间较长,如果在白天进行构建占大量的计算资源很不值,所以放在晚上。于是就有了daily builds变为nightly builds
WebUI:
WebUI是网络产品界面设计(Website User Interface)的意思,设计范围包括常见的网站设计(如电商网站、社交网站)、网络软件设计(如邮箱、Saas产品)等。WUI设计与常见网站建设的区别是,WUI注重人与网站的互动和体验,以人为中心进行设计,而传统的网站建设是以功能为中心进行设计,随着用户对网站体验的日渐挑剔,网站建设的思想逐渐被淘汰。
修改sim卡配置
使用读卡器将SIM卡插入,打卡XLBSIMWrite软件,读取并修改SIM卡信息,修改后sim卡信息如下
图 修改后sim卡信息
记录Inc KI和OPC(核心网配置需要与其一致)。
修改Open5GS配置
GitHub中open5gs配置文件:open5gs/configs/open5gs/amf.yaml.in at main · open5gs/open5gs · GitHub
进入 /etc/open5gs 目录
使用vim修改amf.yaml、nrf.yaml、upf.yaml配置文件(修改后的配置文件见附录)
修改amf.yaml中的ngap地址为127.0.1.100、plmn_id为mcc: 001 mnc:01 即 PLMN:00101。
修改nrf.yaml中的PLMN为mcc: 001 mnc:01 。
修改upf.yaml的gtpu地址为 127.0.1.100。
Connect to http://localhost:9999 and login with admin account:Username : admin、Password : 1423。Add a new subscriber:
图 login with admin account and add a new subscriber
Subscriber details:
图 subscriber details
修改gNB配置
创建文件5g.yml,放在 srsRAN_Project/build/apps/gnb文件夹下(具体文件见附录):
amf:
addr: 127.0.1.100 # The address or hostname of the AMF.
bind_addr: 127.0.0.1 # A local IP that the gNB binds to for traffic from the AMF.
ru_sdr:
device_driver: uhd # The RF driver name.
device_args: type=b200,num_recv_frames=64,num_send_frames=64 # Optionally pass arguments to the selected RF driver.
clock: internal # Specify the clock source used by the RF.
sync: # Specify the sync source used by the RF.
srate: 23.04 # RF sample rate might need to be adjusted according to selected bandwidth.
otw_format: sc12
tx_gain: 80 # Transmit gain of the RF might need to adjusted to the given situation.
rx_gain: 40 # Receive gain of the RF might need to adjusted to the given situation.
cell_cfg:
dl_arfcn: 627340 # ARFCN of the downlink carrier (center frequency).
band: 78 # The NR band.
channel_bandwidth_MHz: 20 # Bandwith in MHz. Number of PRBs will be automatically derived.
common_scs: 30 # Subcarrier spacing in kHz used for data.
plmn: "00101" # PLMN broadcasted by the gNB.
tac: 7 # Tracking area code (needs to match the core configuration).
pci: 1 # Physical cell ID.
pcap:
mac_enable: false # Set to true to enable MAC-layer PCAPs.
mac_filename: /tmp/gnb_mac.pcap # Path where the MAC PCAP is stored.
ngap_enable: false # Set to true to enable NGAP PCAPs.
ngap_filename: /tmp/gnb_ngap.pcap # Path where the NGAP PCAP is stored.
配置UE
这里使用的是OPPO手机,将SIM卡插入,修改APN和核心网保持一致,配置VPN如图:
图 VPN配置信息
启动核心网服务
$ sudo systemctl restart open5gs-mmed
$ sudo systemctl restart open5gs-sgwcd
$ sudo systemctl restart open5gs-smfd
$ sudo systemctl restart open5gs-amfd
$ sudo systemctl restart open5gs-sgwud
$ sudo systemctl restart open5gs-upfd
$ sudo systemctl restart open5gs-hssd
$ sudo systemctl restart open5gs-pcrfd
$ sudo systemctl restart open5gs-nrfd
$ sudo systemctl restart open5gs-scpd
$ sudo systemctl restart open5gs-ausfd
$ sudo systemctl restart open5gs-udmd
$ sudo systemctl restart open5gs-pcfd
$ sudo systemctl restart open5gs-nssfd
$ sudo systemctl restart open5gs-bsfd
$ sudo systemctl restart open5gs-udrd
$ sudo systemctl restart open5gs-webui
检查是否正常运行:
$ ps aux | grep open5gs
图 输入指令后结果
内核运行正常。
添加路由策略
为了让UPF能够连接到互联网:
### Enable IPv4/IPv6 Forwarding
$ sudo sysctl -w net.ipv4.ip_forward=1
$ sudo sysctl -w net.ipv6.conf.all.forwarding=1
### Add NAT Rule
$ sudo iptables -t nat -A POSTROUTING -s 10.45.0.0/16 ! -o ogstun -j MASQUERADE
$ sudo ip6tables -t nat -A POSTROUTING -s 2001:db8:cafe::/48 ! -o ogstun -j MASQUERADE
关闭防火墙
默认情况下,某些操作系统 (Ubuntu) 启用防火墙规则来阻止流量,需要关闭防火墙:
$ sudo ufw status
Status: active
$ sudo ufw disable
Firewall stopped and disabled on system startup
$ sudo ufw status
Status: inactive
基站运行
手机连接基站
运行基站
$ sudo ./gnb -c 5g.yml
图 基站运行
将SIM卡插入OPPO手机中,配置VPN,搜索运营商,结果如图,搜索到基站,名为Open5GS:
图 搜索到基站
点击Open5GS,连接成功,结果如图:
图 连接基站成功
用命令 tail -f /var/log/open5gs/amf.log
查看amf的log日志
图 查看amf的log日志
可以看到记录了连接基站的信息,成功连接基站。
无线门铃
录制和回放的遥控门铃的控制信号,当门铃按下的时候录制下来对应的无线信号,之后通过回放这段录制好的无线信号实现按下门铃遥控器的效果。
确定遥控器频率
首先我们要确定遥控器发送的频率。我们知道这个频段一般就是315M或者433M频段,我们可以用频谱仪来确定确定频率。这里我们使用UHD组件中的UHD_FFT查看频谱315M和 433M附近的频谱:
B210接入USB执行如下指令:
$ sudo uhd_fft -f 433M -s 4M
一直按下遥控器(需连续快速按下按钮否则波峰不明显),使之不断发送无线信号,通过点AUTOSCALE自适应显示,可以看到如下频谱图:
图 频谱图
可以粗略得出射频频率大概为==434.085MHz
录制载波波形保存
通过以上步骤我们得到了射频的频率,之后我们通过gnuradio来记录载波。通过输入以下指令进入gnuraido的界面:
$ sudo gnuradio-companion
打开wave_recoder.grc文件,使用B21O接受信号,并保存在一个文件里面。我们添加一个USRP source 和一个FILE sink,另外为了方便我们看频谱和波形,我们加上一个示波器和频谱仪,GRC连接图如下:
图 GRC连接图
点击运行按钮,同时按下遥控器发送信号,门铃响起,可以看到时域和频域的图如下:
图 时域和频域图
回放载波波形
现在有了射频采样频率和基带采样率这两个参数以及基带波形记录文件,按照这两个参数将这个文件发送出去。
打开wave_player.grc文件:
图 gnuraido打开wave_player.grc文件
运行,发送载波波形,门铃随之响起:
图 发送载波波形
调频广播FM发射
需要注意发射的频率应该小于一般的电台频率,这样才不会与普通基站发射的频率相串。
使用gnuraido打开fmwave_simple.grc文件,收音机调至86.6M,usrp b210在TX/RX A口接一根天线,运行时usrp b210充当了电台发射基站,发射test.wav中存储的音乐。
图 gnuraido打开fmwave_simple.grc文件
点击运行,收音机成功收听到音乐,结果见附录视频文件:fmwave_simple调频广播FM发射.mp4。