接下来我会讲一个大型应用,实现LTE基站和LTE终端。其实这个应用之前国内就有很多人做,但是一般都是使用OAI实现的,这个软件包虽然很全,但是安装很麻烦,而且很不稳定。我使用的是srsLTE实现的,它包含了EPC、eNodeB和UE三大部分。srsepc是一个简易核心网,srsenb是基站,srsue是终端。srsepc和srsenb可以运行在一台电脑上,srsue必须运行在另一台电脑上。然后它们之间就可以建立一个高速连接,实现以太网通信,就好像互相之间连了一根网线一样。

演示视频:https://www.bilibili.com/video/av78917560

演示视频2:https://www.bilibili.com/video/av79578637

除了可以为2台电脑提供连接外,还可以用普通手机或者LTE模块接入srsepc和srsenb的网络,但是要自己写卡并配置user_db.csv,另外srsue也支持连接运营商的基站,但是需要另外购买一个sim读卡器。

为了本教程的完整性,我会从头开始安装,你只需要安装一个干净的ubuntu即可,我现在用的是16.04。

先安装Lime的驱动。如果你apt装过了就不要重新装,否则会有问题。soapy我建议你自己编译安装,如果apt安装会自动安装limesuite,这样limesuite就不是最新版本的了。不过soapy不能用太新的版本,否则srslte可能不兼容它,可能要从release里下载一个老一点的版本。

#packages for soapysdr available at myriadrf PPA
sudo add-apt-repository -y ppa:myriadrf/drivers
sudo apt-get update#install core library and build dependencies
sudo apt-get install git g++ cmake libsqlite3-dev#install hardware support dependencies
sudo apt-get install libsoapysdr-dev libi2c-dev libusb-1.0-0-dev#install graphics dependencies
sudo apt-get install libwxgtk3.0-dev freeglut3-devgit clone https://github.com/pothosware/SoapySDR.git
cd SoapySDR
mkdir build
cd build
cmake ..
make -j4
sudo make installgit clone https://github.com/myriadrf/LimeSuite.git
cd LimeSuite
git checkout stable
mkdir builddir && cd builddir
cmake ../
make -j4
sudo make install
sudo ldconfigcd LimeSuite/udev-rules
sudo ./install.sh

装完以后安装srsLTE。

sudo apt-get install cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-devgit clone https://github.com/srsLTE/srsLTE.git
cd srsLTE
mkdir build
cd build
cmake -DUSE_LTE_RATES=True ..
make
make testsudo make install
sudo ldconfig
srslte_install_configs.sh user

如果你需要图形界面,就再安装srsGUI。

sudo apt-get install libboost-system-dev libboost-test-dev libboost-thread-dev libqwt-dev libqt4-dev
git clone https://github.com/srsLTE/srsGUI.git
cd srsGUI
mkdir build
cd build
cmake ../
make
sudo make install
sudo ldconfig

这样就基本装完了。

你可以到~/.config/srslte/下找到enb.conf和ue.conf来编辑你所想要的工作频段(arfcn)和带宽(prb),另外收发增益也很重要。

现在这套软件同时支持LimeSDR-USB和LimeSDR Mini。

运行:

在电脑1上开2个终端窗口,分别运行下面两个命令。

sudo srsepc
sudo srsenb

在电脑2上开1个终端窗口,运行下面命令。

sudo srsue

要选择天线可以在enb.conf和ue.conf里加入下面的语句

device_name = soapy
device_args = rxant=LNAL,txant=BAND1

现在可以在两台电脑上运行ifconfig看看多出来一个虚拟网卡,两个电脑可以互相ping对方的ip地址172.16.0.X,并且可以ssh登录。

前几天我做实验,发现了奇怪的现象,我用两个mini一个做基站一个做终端不行,必须用mini做基站,usb做终端,如果反一反usb做基站,mini做终端就不行,而且即使mini做基站,usb做终端也不是很稳,甚至不能保证每次都能接上。所以昨天我又试了试基站和终端都用LimeSDR-USB,信号质量提高了不少,见演示视频2。

我现在是3MHz的小区,prb 15,这个带宽对电脑配置要求也比较低,可以用被动散热的M3芯片跑(我用的是8代m3,终端或者基站都可以做),传输文件大概400kbps~700kbps,cpu占用率在30%以下。我后来在M3上单开基站,发现prb 100的20MHz小区也可以跑,cpu占用比i5 5200u还低。

还测试了其他频段arfcn 5200和5800,它们属于LTE FDD Band 13和17,频率都是700MHz的,都是北美运营商用的频段,用国外手机和模组就能支持。后来还试了arfcn 9870,这个是460MHz的,工业用频段,网上可以找到配套cpe。另外我还手动设置过dl_freq和ul_freq,只要enb和ue都设置为同样的频率值,可以脱离3gpp的规定,任意使用任何频段并互相通信。

我现在已经可以用enb作为路由器接入互联网了。

参考这个文章:https://blog.csdn.net/qq_30943197/article/details/83863819

首先在enb上运行下面的命令,eth0表示你连上公网的网卡,如果是别的可以用ifconfig里查到的名字替换掉。

sudo srsLTE/srsepc/srsepc_if_mask.sh eth0

然后ue上运行下面命令。ifconfig里tun_srsue后面会有小序号,不用填。

sudo route add default gw 172.16.0.1 tun_srsue

今天我试过商用终端(华为p20)接入enb了,要写sim卡,必须要用mil的方式,不能用xor(xor是srsue用的),然后把user_db.csv里的IMSI,Key(KI),OPC填入写卡软件就行。

#
# .csv to store UE's information in HSS
# Kept in the following format: "Name,Auth,IMSI,Key,OP_Type,OP,AMF,SQN,QCI,IP_alloc"
#
# Name:     Human readable name to help distinguish UE's. Ignored by the HSS
# IMSI:     UE's IMSI value
# Auth:     Authentication algorithm used by the UE. Valid algorithms are XOR
#           (xor) and MILENAGE (mil)
# Key:      UE's key, where other keys are derived from. Stored in hexadecimal
# OP_Type:  Operator's code type, either OP or OPc
# OP/OPc:   Operator Code/Cyphered Operator Code, stored in hexadecimal
# AMF:      Authentication management field, stored in hexadecimal
# SQN:      UE's Sequence number for freshness of the authentication
# QCI:      QoS Class Identifier for the UE's default bearer.
# IP_alloc: IP allocation stratagy for the SPGW.
#           With 'dynamic' the SPGW will automatically allocate IPs
#           With a valid IPv4 (e.g. '172.16.0.2') the UE will have a statically assigned IP.
#
# Note: Lines starting by '#' are ignored and will be overwritten
ue2,mil,001010123456780,00112233445566778899aabbccddeeff,opc,63bfa50ee6523365ff14c1f45f88737d,8000,00000000510f,7,dynamic
ue1,xor,001010123456789,00112233445566778899aabbccddeeff,opc,63bfa50ee6523365ff14c1f45f88737d,9001,000000001234,7,dynamic

上面是user_db.csv,我们只能用ue2的参数,ue1的不能用,把对应信息填入写卡软件即可。

我开了enb,然后手机连上去,另一个电脑开ue,可以同时接入同一个enb,sdr我都用limesdr mini也可以。不过似乎手机会被srsue干扰掉。

另外我还测试了一下最大带宽,我一个enb+limesdr mini开了75prb也就是15MHz小区,手机也可以接上,测速确实比10MHz快,不过速度不太稳定。试下来还是10MHz最好。我用了双工器后只能开5MHz小区手机才能连上,星座图完美,但是limesdr mini的ue这时会有dc offset。所以我还是想开10MHz小区,后来我用频谱仪看了一下,发现我这运营商信号太强,开10MHz的时候,下行信号左侧会被干扰,5MHz时不会,所以我把arfcn改为2560,这时手机和srsue都能接入了,尤其是手机星座图很好,srsue也有好的时候但是不稳定,看来双工器是有用的,问题是ue的反向双工器不太好找。

接下来我要测试使用另一种方案的epc对接srsenb了,这样有望实现基站切换功能,我参考了下文,但是我是apt安装的。

https://blog.csdn.net/qq_32037393/article/details/96269517

我现在本机同时安装nextepc和srsenb可以正常运行,挺稳定。

今天我还测试成功了nextepc和srsenb分别安装在局域网内的两台不同电脑上,mme连接成功了,并且手机能接入,能ping通epc也能上外网。

我之前参考的那篇文章有不少问题,今天又参考了一篇oai epc + srsenb的文章,才搞定了。

http://www.pianshen.com/article/809368876/

我的nextepc是在ubuntu 18.04上apt安装的。

步骤如下:

sudo apt-get update
sudo apt-get -y install software-properties-common
sudo add-apt-repository ppa:nextepc/nextepc
sudo apt-get update
sudo apt-get -y install nextepcsudo apt-get -y install curl
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
curl -sL https://nextepc.org/static/webui/install | sudo -E bash -

装完要验证一下:

sudo systemctl status nextepc-mmed
● nextepc-mmed.service - NextEPC MME DaemonLoaded: loaded (/lib/systemd/system/nextepc-mmed.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2019-02-21 19:29:43 MST; 27s ago...
sudo systemctl status nextepc-sgwd...
sudo systemctl status nextepc-pgwd...
sudo systemctl status nextepc-hssd...
sudo systemctl status nextepc-pcrfd...ifconfig pgwtun
pgwtun    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  inet addr:45.45.0.1  P-t-P:45.45.0.1  Mask:255.255.0.0inet6 addr: fe80::50f6:182c:5aa3:16bb/64 Scope:Linkinet6 addr: cafe::1/64 Scope:Global...

nextepc配置我没做,都是默认值。

装完后还要增加ue,在epc电脑的http://locahost:3000,网页里配置就行,用户名admin,密码1423,参考那篇博客截图填写imsi等信息就行。

装完了nextepc要配置srsenb,下面是我的例子:

epc的ip是192.168.1.15,enb的ip是192.168.1.11。

我摘录了enb.conf的关键部分。

[enb]
enb_id = 0x19B
cell_id = 0x01
phy_cell_id = 1
tac = 0x3039 #0x0007
mcc = 001
mnc = 01
mme_addr = 192.168.1.15 #127.0.1.100
gtp_bind_addr = 192.168.1.11 #127.0.1.1
s1c_bind_addr = 192.168.1.11 #127.0.1.1
n_prb = 25
#tm = 4
#nof_ports = 2

可以看到要改tac, mme_addr, gtp_bind_addr, s1c_bind_addr。

mme_addr是局域网中epc电脑的网卡地址。gtp_bind_addr和s1c_bind_addr填写的是enb电脑的网卡ip。

如果ue要访问公网,在epc电脑上还要做一件事,要在命令行里运行如下3行。

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo iptables -t nat -A POSTROUTING -o wlp7s0 -j MASQUERADE
sudo iptables -I INPUT -i pgwtun -j ACCEPT

其中wlp7s0替换为你的连接公网的网卡名字,可以在ifconfig里查到,这一步与srsepc的srsepc_if_mask.sh差不多的,只不过nextepc没做成一个单独的脚本。

接下来我就可以试试两台enb连接局域网内的epc了。到时再看看能不能做基站切换。

这里还要插一段,作为记录。

srsepc和srsenb也可以分开在两台电脑上运行,只需要更改epc.conf和enb.conf即可。

现在192.168.1.11作为epc,192.168.1.15作为enb。

epc.conf摘录

[mme]
mme_code = 0x1a
mme_group = 0x0001
tac = 0x0007
mcc = 001
mnc = 01
mme_bind_addr = 192.168.1.11 #127.0.1.100
apn = srsapn
dns_addr = 8.8.8.8
encryption_algo = EEA0
integrity_algo = EIA1
paging_timer = 2[spgw]
gtpu_bind_addr   = 192.168.1.11 #127.0.1.100
sgi_if_addr      = 172.16.0.1
sgi_if_name      = srs_spgw_sgi
max_paging_queue = 100

enb.conf摘录

[enb]
enb_id = 0x19B
cell_id = 0x01
phy_cell_id = 1
tac = 0x0007
mcc = 001
mnc = 01
mme_addr = 192.168.1.11 #127.0.1.100
gtp_bind_addr = 192.168.1.15 #127.0.1.1
s1c_bind_addr = 192.168.1.15 #127.0.1.1
n_prb = 50
#tm = 4
#nof_ports = 2

注意,srsepc和nextepc的mcc mnc分别是001和01,这两个项目是一样的,tac在nextepc里是0x3039,srsepc是0x0007。因此,如果srsenb要连它们,他的tac也要对应填写,否则连不上去的。

现在我用两台电脑+sdr实现了两个基站并同时接入局域网内的epc,可以实现基站切换了。

两个基站下的手机都可以访问同一台服务器。

实验视频:https://www.bilibili.com/video/av86505146/

不过目前的切换必须要重新切一下飞行模式,也就是说在一个基站覆盖范围外才有可能切到另一个基站上,这样两个基站之间的重叠区域还不知道如何处理,貌似还不是无缝切换。

LimeSDR实验教程(13) LTE基站、终端、核心网 (srsLTE nextepc)相关推荐

  1. LimeSDR实验教程(15) Lattepanda + LimeSDR Mini转接板

    最近做portapack教程,感觉反响不错,Portapack的优点是可以脱离电脑使用,具有很高的便携性.同样的功能在portapack上运行比在电脑上运行感觉实用了不少,我早期也是被portapac ...

  2. 【OAI】【debug】分立机器基站接入核心网并调试可用解决之路

    这里写目录标题 问题描述 解决思路1--机器网卡设置到192.168.70.0网段 测试过程 结论 解决思路2 docker-swarm 测试过程 结论 讨论: 原始方案路由关系详解 0422调试问题 ...

  3. LimeSDR实验教程(10) DVB-S发射和接收

    我在windows下实现了dvb-s的发射和接收. 发射使用的是limesdr-mini,接收使用的是hackrf/limesdr-usb. 这次和以前的dvb-t发射不同,这次的发射和接收都是用软件 ...

  4. LimeSDR实验教程(11) GFSK音频发射和接收

    gnuradio 3.7.13 下面的流图可以实现本地回环,可以听一下声音是不是录音文件里的,其中采样率必须等于wav文件实际采样率,要不然声音会有问题,可以查看wav的详细信息,观察采样率和通道数, ...

  5. NB-IoT 接入 5G 核心网丨边缘计算阅读周

    #边缘计算阅读周#  读书的人,有梦可做. 边缘计算社区联合6大出版社邀您一起阅读,一起做追梦人. 在近日结束的ITU-R WP5D#35会议上,3GPP技术正式被接受为ITU IMT-2020 5G ...

  6. amf组网_【5G核心网】5G核心网SA组网方案及4G/5G互操作探讨

    摘  要: SA(Standalone 独立组网)架构是5G核心网的目标架构.在SA架构下,4G/5G互操作是在核心网实现.本文针对4G/5G核心网互操作,分析了控制面网元整体部署架构.接入层网元组网 ...

  7. 【5G架构】5G 核心网——基于服务的网络架构

    博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G ...

  8. 2021-2027全球与中国核心网电信设备市场现状及未来发展趋势

    报告摘要 本文研究全球及中国市场核心网电信设备现状及未来发展趋势,侧重分析全球及中国市场的主要企业,同时对比北美.欧洲.日本.中国.东南亚.印度等地区的现状及未来发展趋势. 2019年全球核心网电信设 ...

  9. zigbee CC2530 系列教程 13 烟雾传感器实验

    所有课程见此链接: zigbee CC2530 系列教程 0 课程介绍 4.13烟雾传感器实验 4.13.1 实验目的 学习使用烟雾传感器. 4.13.2 实验讲解 首先根据开发板硬件原理图确定烟雾传 ...

最新文章

  1. t-SNE algorithm(t-分布邻域嵌入算法)
  2. 数组之间的计算matlab,MATLAB软件数组的运算
  3. LightOJ 1088 - Points in Segments 二分
  4. ps -aux|grep 详细信息
  5. android auto answer,Incoming call auto answer in android 4.0.3
  6. Spring集合类型依赖查找
  7. IEC61850报告服务(报文解析)
  8. oracle instr函数 判断字段中是否有换行符
  9. 16 个优秀的 Vue 开源项目
  10. 沉舟侧畔千帆过,病树前头万木春
  11. Unity Scroll View在Clamped模式下无法移动
  12. mysql有mdf文件和ldf文件吗_如何得到.MDF和.LDF文件
  13. python实现淘宝客服自动回复语_Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例...
  14. OvR逻辑回归多分类算法
  15. python解决微分方程(数值解法)
  16. idea2019版本有效激活码error问题
  17. aspx网页背景图片设置代码_Vue+CSS3制作双螺旋DNA动画:代码详解和基础知识复习
  18. 在胸口凝成一颗鲜红的朱砂印
  19. RecyclerView 梳理:点击长按事件、分割线、拖曳排序、滑动删除
  20. windows pyinstaller打包pytorch程序到exe文件

热门文章

  1. python读取一张图片未响应_opencv python 图片读取与显示图片窗口未响应问题的解决...
  2. Network | 高颜值动态网络可视化工具(二)
  3. 前端使用 heyui 配置
  4. Linux系统C编程资料
  5. 【翻译】如何选择一个开源软件许可证 Choosing an OSS license doesn’t need to be scary...
  6. 用J-Flash合并两个HEX烧录文件
  7. 软件在win10上安装,请问如何解决被Windows Defender SmartScreen阻止
  8. Trustlines Network:以太坊上实现 Ripple 瑞波协议
  9. 命令行静默安装msu格式的Windows更新离线安装包
  10. 尝试cartographer中使用scan和odom来建图,失败(可能实验室的中继机器人odom有问题)总结