使用USRP与srsLTE搭建软件LTE基站
软件无线电SDR实现了射频收发所需的通用硬件平台,并将传统的模拟基带通过软件实现。本文基于USRP B210
SDR平台与开源的基站、核心网srsRAN 4G
,自行搭建LTE网络用于测试与学习。
后文均在Ubuntu 22.04 LTS
操作系统下完成,PC的CPU型号为Intel i7-8550U
。
安装UHD
UHD
是USRP的开源驱动。根据官方的建议,此处选择编译安装,具体的安装步骤可以参考Ettus官方文档。此处给出简要安装过程。
首先,安装编译所需的依赖:
sudo apt-get install autoconf automake build-essential ccache cmake cpufrequtils doxygen ethtool \
g++ git inetutils-tools libboost-all-dev libncurses5 libncurses5-dev libusb-1.0-0 libusb-1.0-0-dev \
libusb-dev python3-dev python3-mako python3-numpy python3-requests python3-scipy python3-setuptools \
python3-ruamel.yaml
然后,获取UHD的源码。根据srsRAN的推荐,选择最新的LTS版本,即UHD-3.15.LTS
分支。
cd ~/code
git clone https://github.com/EttusResearch/uhd.git
cd uhd
git checkout UHD-3.15.LTS
git submodule update --init --recursive
编译并安装UHD。如果在cmake配置过程中,出现Dependencies for required component LibUHD not met.
的错误,重新运行一次cmake ../
即可。
cd ~/code/uhd/host
mkdir build
cd build
cmake ../
make -j8 && sudo make install
刷新动态链接库。
sudo ldconfig
完成上述操作后,UHD的安装步骤就完成了。此时,可以烧录FPGA镜像到USRP,并测试与USRP的连接。
sudo uhd_images_downloader #此命令必须有良好的网络环境才能成功下载
sudo uhd_usrp_probe
若出现类似如下的日志,且USRP上的橙色电源指示灯点亮,则说明UHD已经安装成功并成功烧录USRP的固件。
[INFO] [UHD] linux; GNU C++ version 11.4.0; Boost_107400; UHD_3.15.0.0-74-ge35f66e8
[INFO] [B200] Loading firmware image: /usr/local/share/uhd/images/usrp_b200_fw.hex...
[INFO] [B200] Detected Device: B210
[INFO] [B200] Loading FPGA image: /usr/local/share/uhd/images/usrp_b210_fpga.bin...
[INFO] [B200] Operating over USB 3.
[INFO] [B200] Detecting internal GPSDO....
[INFO] [GPS] Found an internal GPSDO: GPSTCXO, Firmware Rev 0.929b
[INFO] [B200] Initialize CODEC control...
[INFO] [B200] Initialize Radio control...
[INFO] [B200] Performing register loopback test...
[INFO] [B200] Register loopback test passed
[INFO] [B200] Performing register loopback test...
[INFO] [B200] Register loopback test passed
[INFO] [B200] Setting master clock rate selection to 'automatic'.
[INFO] [B200] Asking for clock rate 16.000000 MHz...
[INFO] [B200] Actually got clock rate 16.000000 MHz.
_____________________________________________________
/
| Device: B-Series Device
| _____________________________________________________
| /
| | Mboard: B210
| | serial: XXXXXXX
| | name: MyB210
| | product: 2
| | revision: 4
| | FW Version: 8.0
| | FPGA Version: 16.0
| |
| | Time sources: none, internal, external, gpsdo
| | Clock sources: internal, external, gpsdo
| | Sensors: gps_gpgga, gps_gprmc, gps_time, gps_locked, gps_servo, ref_locked
| | _____________________________________________________
| | /
| | | RX DSP: 0
| | |
| | | Freq range: -8.000 to 8.000 MHz
| | _____________________________________________________
| | /
| | | RX DSP: 1
| | |
| | | Freq range: -8.000 to 8.000 MHz
| | _____________________________________________________
| | /
| | | RX Dboard: A
| | | _____________________________________________________
| | | /
| | | | RX Frontend: A
| | | | Name: FE-RX2
| | | | Antennas: TX/RX, RX2
| | | | Sensors: temp, rssi, lo_locked
| | | | Freq range: 50.000 to 6000.000 MHz
| | | | Gain range PGA: 0.0 to 76.0 step 1.0 dB
| | | | Bandwidth range: 200000.0 to 56000000.0 step 0.0 Hz
| | | | Connection Type: IQ
| | | | Uses LO offset: No
| | | _____________________________________________________
| | | /
| | | | RX Frontend: B
| | | | Name: FE-RX1
| | | | Antennas: TX/RX, RX2
| | | | Sensors: temp, rssi, lo_locked
| | | | Freq range: 50.000 to 6000.000 MHz
| | | | Gain range PGA: 0.0 to 76.0 step 1.0 dB
| | | | Bandwidth range: 200000.0 to 56000000.0 step 0.0 Hz
| | | | Connection Type: IQ
| | | | Uses LO offset: No
| | | _____________________________________________________
| | | /
| | | | RX Codec: A
| | | | Name: B210 RX dual ADC
| | | | Gain Elements: None
| | _____________________________________________________
| | /
| | | TX DSP: 0
| | |
| | | Freq range: -8.000 to 8.000 MHz
| | _____________________________________________________
| | /
| | | TX DSP: 1
| | |
| | | Freq range: -8.000 to 8.000 MHz
| | _____________________________________________________
| | /
| | | TX Dboard: A
| | | _____________________________________________________
| | | /
| | | | TX Frontend: A
| | | | Name: FE-TX2
| | | | Antennas: TX/RX
| | | | Sensors: temp, lo_locked
| | | | Freq range: 50.000 to 6000.000 MHz
| | | | Gain range PGA: 0.0 to 89.8 step 0.2 dB
| | | | Bandwidth range: 200000.0 to 56000000.0 step 0.0 Hz
| | | | Connection Type: IQ
| | | | Uses LO offset: No
| | | _____________________________________________________
| | | /
| | | | TX Frontend: B
| | | | Name: FE-TX1
| | | | Antennas: TX/RX
| | | | Sensors: temp, lo_locked
| | | | Freq range: 50.000 to 6000.000 MHz
| | | | Gain range PGA: 0.0 to 89.8 step 0.2 dB
| | | | Bandwidth range: 200000.0 to 56000000.0 step 0.0 Hz
| | | | Connection Type: IQ
| | | | Uses LO offset: No
| | | _____________________________________________________
| | | /
| | | | TX Codec: A
| | | | Name: B210 TX dual DAC
| | | | Gain Elements: None
安装srsRAN 4G
编译安装srsRAN的步骤同样参考srsRAN 4G官方文档,在此做简要介绍。
安装srsGUI
为了显示星座图等图形化数据,需要在安装srsRAN之前安装srsGUI。首先安装所需的依赖:
sudo apt-get install cmake build-essential libboost-system-dev libboost-test-dev libboost-thread-dev libqwt-qt5-dev qtbase5-dev
然后,获取srsGUI的源码:
cd ~/code
git clone https://github.com/srsLTE/srsGUI.git
最后,编译并安装srsGUI:
cd srsgui
mkdir build
cd build
cmake ../
make -j8 && sudo make install
安装srsRAN 4G
同样,首先安装srsRAN所需的依赖:
sudo apt-get install libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev
接下来,获取srsRAN的源码:
cd ~/code
git clone https://github.com/srsRAN/srsRAN_4G.git
最后,编译并安装srsRAN 4G:
cd srsRAN_4G
mkdir build
cd build
cmake ../
make -j8 && sudo make install
二进制安装完毕后,还需要将默认配置文件拷贝至/root/.config/srsran
,并更新动态链接库:
sudo srsran_install_configs.sh user
sudo ldconfig
尝试运行srsRAN 4G
安装实时内核
Ubuntu的实时内核现在已经是Ubuntu Pro的一部分。为Ubuntu安装实时内核的教程可以参考Ubuntu官方页面。此处做简要的介绍。
针对个人用户,Ubuntu Pro提供5台免费的计算机激活配额。为此,请首先注册Ubuntu帐号并订阅Ubuntu Pro,在获取token后,按如下操作将token应用于Ubuntu操作系统并启用实时内核:
sudo pro attach <token>
sudo pro enable realtime-kernel
实时内核将在重启计算机后生效。
调整CPU工作模式
为了获得最好的性能,建议将切换CPU到高性能模式:
echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
允许核心网访问互联网
为了让设备能够访问网络,需要配置Linux内核将核心网产生的虚拟网卡srs_spgw_sgi
的流量进行伪装,将其流量通过NAT连接到具有互联网的网卡上,从而让用户设备可以访问互联网。为此,srsEPC提供了一键脚本sudo srsepc_if_masq <out_interface>
,其中<out_interface>
为连接到互联网的物理网卡的接口名。常见的有线网卡的接口名一般为eth0
,可以通过ifconfig
命令进行确认。
sudo srsepc_if_masq.sh eth0
尝试运行srsRAN 4G
srsRAN包括简易软件核心网srsEPC
与软件基站srsENB
两部分。分别启动两个终端,然后在第一个终端中启动核心网:
sudo srsepc
然后在第二个终端中启动基站:
sudo srsenb
若一切正常,在运行核心网的终端中可以看到基站连接的日志:
Received S1 Setup Request.
S1 Setup Request - eNB Name: srsenb01, eNB id: 0x19b
S1 Setup Request - MCC:001, MNC:01
S1 Setup Request - TAC 7, B-PLMN 0xf110
S1 Setup Request - Paging DRX v128
Sending S1 Setup Response
在运行基站的终端中可以看到驱动USRP成功的日志:
Opening 1 channels in RF device=default with args=default
Supported RF device list: UHD file
Trying to open RF device 'UHD'
[INFO] [UHD] linux; GNU C++ version 11.4.0; Boost_107400; UHD_3.15.0.0-74-ge35f66e8
[INFO] [LOGGING] Fastpath logging disabled at runtime.
Opening USRP channels=1, args: type=b200,master_clock_rate=23.04e6
[INFO] [UHD RF] RF UHD Generic instance constructed
[INFO] [B200] Detected Device: B210
[INFO] [B200] Operating over USB 3.
[INFO] [B200] Detecting internal GPSDO....
[INFO] [GPS] Found an internal GPSDO: GPSTCXO, Firmware Rev 0.929b
[INFO] [B200] Initialize CODEC control...
[INFO] [B200] Initialize Radio control...
[INFO] [B200] Performing register loopback test...
[INFO] [B200] Register loopback test passed
[INFO] [B200] Performing register loopback test...
[INFO] [B200] Register loopback test passed
[INFO] [B200] Asking for clock rate 23.040000 MHz...
[INFO] [B200] Actually got clock rate 23.040000 MHz.
RF device 'UHD' successfully opened
==== eNodeB started ===
Type <t> to view trace
Setting frequency: DL=2680.0 Mhz, UL=2560.0 MHz for cc_idx=0 nof_prb=50
此时可以看到USRP亮起了一个发射指示灯(红色)与一个接收指示灯(绿色)。srsENB的默认配置文件中,配置基站工作在B7
频段,该频段大部分国产手机均不支持,因此截至此步骤时,手机搜不到运营商是正常现象。
B7
频段范围与B41
几乎完全重合。B7
为FDD频段,而B41
为TDD频段,srsLTE仅支持FDD-LTE。在国内,B41
属于中国移动,被用于5G与4G主力覆盖。配置srsRAN 4G
配置虚拟核心网srsEPC
对于某些高通平台的国产手机而言(下文中以小米13 Pro手机举例),为了提高搜网速度,其在系统层面会通过运营商配置文件限制手机在使用某运营商SIM卡时可使用的频段,具体表现为当手机插入某运营商的SIM卡,如中国移动后,手机会限制基带只能连接中国移动拥有的频段(B3
B8
B34
B38
B39
B40
B41
),而其他频段例如B1
则无法连接。对于未知的运营商而言,手机则会默认应用中国移动的运营商描述文件。由于srsLTE仅支持FDD-LTE,而中国移动的4G大多为TDD-LTE,因此有必要配置核心网的PLMN,从而应用以FDD-LTE为主的运营商(中国联通、中国电信)的配置文件。
确定运营商的的主要是配置移动设备网络代码(Mobile Network Code,MNC)与移动设备国家代码(Mobile Country Code,MCC),二者合称为PLMN,由核心网确定。为此,打开srsENB的配置文件/root/.config/srsran/epc.conf
,将其中的mcc
与mnc
改为合适的值即可。推荐将mcc
与mnc
分别改为460
与06
,其中mcc
为中国大陆的移动设备国家代码,06
为中国联通的卫星电话网络代码,在与现网中国联通网络的01
区分的同时,可以让手机将SIM卡识别为中国联通从而启用更多FDD-LTE频段。
root
用户,使用普通用户打开该文件是会提示Permission denied
,此时使用sudo -i
切换到root用户即可。后文中的配置文件均是同理。下图中展示了小米13 Pro手机在root后使用Cellular-Pro读取的不同PLMN激活的不同运营商配置文件的差异。
除此之外,srsENB的配置文件中还有一些可选的修改项,例如full_net_name
确定网络的全名,short_net_name
确定网络名的缩写,apn
确定访问互联网所使用的APN等,此处不再赘述。
选择频段并配置RRU
首先对虚拟RRU进行配置。RRU在物理基站中的主要作用为将基带单元BBU所产生的数字基带信号通过射频发射或接收,需要重点关注的参数主要为虚拟RRU驱动SDR所工作的频段。目前的srsRAN 4G仅支持FDD频段,即只支持频分双工模式的LTE。在我国,运营商常用的FDD频段包括B1
(中国电信、中国联通)、B3
(中国移动、中国电信、中国联通)、B5
(中国电信)与B8
(中国联通)。具体频段的频率范围与各个运营商所拥有的频段范围可以从下图中查询。
其中,Band1的下行频率范围为1920-1980MHz
,其中1920-1940MHz
归中国电信所有,1940-1965MHz
归中国联通所有。1920-1940MHz
、1940-1960MHz
两个20M带宽的信道用于部署LTE或NR,1960-1965MHz
部署WCDMA。在城区中,现网宏站常部署0-2个20MHz带宽的LTE网络,室分则常见20MHz带宽的LTE与20MHz带宽的NR,即Band1所部署的5G网络在城区仅用于室内覆盖(山东青岛城区实测)。在确认自己所在室内没有室分(一般小区都没有)之后,需要进一步确定下行ARFCN=100(1920-1940MHz)与ARFCN=300(1940-1960MHz)两个频点是否有部署LTE。通常来说,南方常使用100频点部署宏站B1(电信承建区),北方则使用300频点(联通承建区)。
我所在的地区的室内未部署室分基站,且中心频点100
的Band1目前处于空闲状态,因此我将设置SDR的工作频点为100。打开RRU的默认配置文件/root/.config/srsran/rr.conf
,在其中找到cell_list
列表,并找到其中唯一的基站信息,其中的dl_earfcn
即为RRU所使用的下行频点,将其修改为100
即可。除此之外,本实验由于只部署单个基站,因此后面有关载波聚合与邻区的scell_list
meas_cell_list
与meas_report_desc
均可删除或注释掉。
对RRU配置文件/root/.config/srsran/rr.conf
的主要修改如下所示。此处主要修改的为cell_list
节中的下行频点dl_earfcn
,其他内容如无特殊需求保持默认即可。
// 前略...
cell_list =
(
{
// 此处略...
dl_earfcn = 100; // 修改这里
// 此处略...
scell_list = ( //记录用于载波聚合的小区信息 只有一个基站所以不需要
// 此处可删除...
)
meas_cell_list = //记录用于漫游的邻区信息 只有一个基站所以不需要
(
// 此处可删除...
);
meas_report_desc = //同上
(
// 此处可删除...
);
// 此处略...
}
);
另一个选择是使用B8前端的5MHz带宽频谱,此频谱分配给GSM-R系统使用,如果所在区域附近没有铁路,并确定该频段在附近没有部署时,可以在室内小功率短时间发射。下图为使用RTL-SDR检查B8占用情况时的截图,可以看出中国移动占用的B8在934MHz之后的部分,934MHz前的频谱没有无线电信号。
配置eNB
eNB在srsLTE中主要承担的是虚拟基带的作用。我们需要关注的配置项主要为射频的MIMO天线数与方式以及带宽等配置。USRP B210最高支持56M
全双工带宽(由Tx与Rx共享)、2x2
MIMO的射频信号发射,频率范围为70MHz
-6GHz
(参见官方文档)。因此,使用USRP B210最高可以支持2x2 20MHz带宽的全双工LTE通信。
在eNB的配置文件/root/.config/srsran/enb.conf
中,首先要修改其中的mcc
与mnc
为与核心网相同的数值,然后是下列与射频参数有关的设置项。
tm = 3 //MIMO等级
nof_ports = 2 //MIMO天线数
n_prb = 50
其中,nof_ports
是使用的MIMO天线数量,选择更多的MIMO空间流数量可以成倍增加吞吐量,若电脑配置较高,强烈建议设置为2。当nof_ports
超过2时,还需要设置tm
。tm
是MIMO系统中的空间复用方式,有关其具体的描述可以参考此文章。对于室内系统而言,tm
取值3或4,即空间复用是否闭环对测试结果影响不大,而启用闭环空间复用会对PC的性能提出更高的要求,因此将tm
设置为3即可。n_prb
是所使用的射频资源块PRB数量,我的电脑配置只能支持50PRB的软件基带调制解调。PRB数量更为我们熟知的是概念是信道带宽,PRB数量与信道带宽的关系如下表所示。PRB数量越大,速度越快,根据自己电脑配置使用合适的参数即可。
带宽 | 资源块数量 | 下行子载波数量 | 上行子载波数量 |
---|---|---|---|
1.4 MHz | 6 | 73 | 72 |
3 MHz | 15 | 181 | 180 |
5 MHz | 25 | 301 | 300 |
10 MHz | 50 | 601 | 600 |
15 MHz | 75 | 901 | 900 |
20 MHz | 100 | 1201 | 1200 |
使用手机连接软件LTE基站
制作测试SIM卡
3G网络后,核心网与UE实行了双向鉴权,即在核心网需要确认用户为合法用户的同时,用户也需要确认核心网的合法性,因此软件LTE基站无法与软件GSM基站一样随意插入一张SIM卡就可以强制附着网络。为此,就需要制作能配合软件LTE系统使用的合法SIM卡。
我是用的测试LTE SIM白卡是从淘宝购得的,一同购买的还有其配套的读卡器,读卡器使用的主控芯片型号是AU9540
。
插入白卡,打开软件,可以看到如下的界面。我们使用的卡片是LTE卡,因此操作均在右侧的5G/LTE
选项卡中进行。
其中,用于LTE鉴权的三元组包括IMSI
、Ki
和OP/OPC
。其中,IMSI是国际移动用户识别码International Mobile Subscriber Identity的缩写,用于唯一地标识一个用户;Ki是鉴权密钥Key identifier的缩写,它是特定于用户的128位密钥;OP是运营商代码Operator Code的缩写,是由运营商颁发的用于验证接入设备是否属于运营商的用户的密钥,特定移动网络中每个用户的OP都是相同的,OPC则是派生运营商代码Derived Operator Code的缩写,它由OP与Ki的值经加密算法得到,对每一张SIM卡都是独一无二的,用于确保某张SIM卡的OPC泄露时不会危害整个移动通信网络的安全。在实际网络中,IMSI是公开的,而Ki与OP/OPC则是严格保密的。上位机软件中,对正常用户加密的信息都用绿色底色表示,但由于我们拥有测试卡的管理员密码ADM,因此读卡器可以读取并写入这些数据。
srsLTE中提供了可用的三元组。为了简单起见,这里选择将srsLTE提供的三元组写入白卡内。srsLTE提供的三元组存放在/root/.config/srsran/user_db.csv
文件内,每一行为一个用户信息。srsLTE提供的默认user_db.csv
文件内容如下:
#
# .csv to store UE's information in HSS
# Kept in the following format: "Name,Auth,IMSI,Key,OP_Type,OP/OPc,AMF,SQN,QCI,IP_alloc"
#
# Name: Human readable name to help distinguish UE's. Ignored by the HSS
# Auth: Authentication algorithm used by the UE. Valid algorithms are XOR
# (xor) and MILENAGE (mil)
# IMSI: UE's IMSI value
# 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
ue1,xor,001010123456789,00112233445566778899aabbccddeeff,opc,63bfa50ee6523365ff14c1f45f88737d,9001,000000001234,7,dynamic
ue2,mil,001010123456780,00112233445566778899aabbccddeeff,opc,63bfa50ee6523365ff14c1f45f88737d,8000,000000001234,7,dynamic
可以看到srsLTE提供了两个默认认证三元组,我们选择ue2
写入SIM白卡中。由于srsLTE提供的三元组中IMSI是15位的,提供的运营商密钥是OPC,因此需要在上位机软件中选择对应的类型后再填入。对于Ki和OPC,直接将配置文件中ue2
的Ki和OPC填入上位机软件中即可。值得注意的是,OPC与Ki具有对应关系,因此不建议对其做出修改。对于IMSI,需要将配置文件与写入卡片的IMSI的前5位都改为46006
,即前面设置的MCC与MNC的值,否则手机将加载错误的运营商配置文件。IMSI的数值只要满足位数正确且前5位中的MCC/MNC值正确,其他位数可以自行设置。
对应最终写入SIM白卡的user_db.csv
文件内容如下:
ue2,mil,460060000000001,00112233445566778899aabbccddeeff,opc,63bfa50ee6523365ff14c1f45f88737d,8000,000000001234,7,dynamic
除了鉴权三元组之外,还有一些需要配置的项目。首先是卡片的ICCID,一定要以代表中国大陆地区的89860
开头,否则手机会将SIM卡识别为国外运营商发行的SIM卡,从而触发漫游或加载错误的运营商配置文件。除了开头5位之外,后面的可以自行设置,只需要满足总长度为20位即可。然后是AD,即SIM卡操作模式的选项。下表是AD的取值与对应的描述。
AD | 描述 |
---|---|
00 | 正常模式(用户登录3GPP网络) |
01 | 正常模式+特定设施 |
02 | 离线维护模式 |
04 | 基站小区测试模式(在某个小区在商用之前,进行测试) |
80 | 型号批准(在型号批准过程中,允许ME的特定的使用) |
81 | 型号批准+特定设施(允许ME制造商执行专有的自动测试,例如维护阶段) |
点击AD右侧的按钮,会弹出如下的界面,将AD保持默认的00,即正常模式。
接下来还需要设置HPLMN。HPLMN是Home PLMN的缩写,即SIM卡所属的运营商的PLMN,填写与核心网设置中MCC和MNC对应的46006
即可,PLMN ATI代表为Access Technologies Identifier的缩写,即接入技术识别码。ATI共有两个字节,其第一个字节用于选择E-UTRAN模式,即LTE模式:
B7 | B6 | B5 | 模式 |
---|---|---|---|
0 | x | x | E-UTRAN未选择 |
1 | 0 | 0 | E-UTRAN在WB-S1模式和NB-S1模式 |
1 | 0 | 1 | E-UTRAN只在NB-S1模式 |
1 | 1 | 0 | E-UTRAN只在WB-S1模式 |
1 | 1 | 1 | E-UTRAN在WB-S1模式和NB-S1模式 |
我们使用LTE,因此将ATI的第一个字节为80H
。第二个字节用于选择GSM模式,我们不使用GSM模式,因此直接将第二个字节设置为00H
即可。因此,ATI的取值为8000H
。下图展示了设置HPLMN的界面。
除此之外,设置界面中还包含了其他的PLMN设置,感兴趣的可以自行上网搜索。最后,请注意设置智能卡的加密算法Algorithm,一定要使用与srsLTE配置文件中相同的加密算法,否则无法成功鉴权。这里选择默认配置文件内ue2
使用的的Milenage
算法。
一切设置完成后,点击Write Card将数据写入SIM卡后,便可以把SIM卡插入手机了。
使用手机连接网络
接下来,再次使用分别运行srsepc
与srsenb
,并切换手机的飞行模式,此时应该可以看到手机正常搜索到我们发射出的LTE信号了。
进入手机的设置,关闭手机的自动运营商选择,稍等片刻应该可以搜索到发射出PLMN为46006
的LTE网络。
iPhone的设置里还可以识别出SIM卡的ICCID与运营商名称。
我的射频设置为2x2 MIMO,10MHz带宽,测速结果如下。
使用Cellular-Pro查询的详细LTE网络信息如下。
可以看到网络目前是运行到了256QAM的下行调制状态,跑满了带宽。
下面是用户成功接入时srsENB的日志。
Active RF plugins: libsrsran_rf_uhd.so
Inactive RF plugins:
--- Software Radio Systems LTE eNodeB ---
Couldn't open , trying /root/.config/srsran/enb.conf
Reading configuration file /root/.config/srsran/enb.conf...
Couldn't open sib.conf, trying /root/.config/srsran/sib.conf
Couldn't open rr.conf, trying /root/.config/srsran/rr.conf
Couldn't open rb.conf, trying /root/.config/srsran/rb.conf
Built in Release mode using commit fa56836b1 on branch master.
Opening 2 channels in RF device=default with args=default
Supported RF device list: UHD file
Trying to open RF device 'UHD'
[INFO] [UHD] linux; GNU C++ version 11.4.0; Boost_107400; UHD_3.15.0.0-74-ge35f66e8
[INFO] [LOGGING] Fastpath logging disabled at runtime.
Opening USRP channels=2, args: type=b200,master_clock_rate=23.04e6
[INFO] [UHD RF] RF UHD Generic instance constructed
[INFO] [B200] Detected Device: B210
[INFO] [B200] Operating over USB 3.
[INFO] [B200] Detecting internal GPSDO....
[INFO] [GPS] Found an internal GPSDO: GPSTCXO, Firmware Rev 0.929b
[INFO] [B200] Initialize CODEC control...
[INFO] [B200] Initialize Radio control...
[INFO] [B200] Performing register loopback test...
[INFO] [B200] Register loopback test passed
[INFO] [B200] Performing register loopback test...
[INFO] [B200] Register loopback test passed
[INFO] [B200] Asking for clock rate 23.040000 MHz...
[INFO] [B200] Actually got clock rate 23.040000 MHz.
[INFO] [MULTI_USRP] 1) catch time transition at pps edge
[INFO] [MULTI_USRP] 2) set times next pps (synchronously)
RF device 'UHD' successfully opened
==== eNodeB started ===
Type <t> to view trace
Starting plot for worker_id=0
Creating plot window 'srsENB PCI 1'...
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
Setting frequency: DL=1835.0 Mhz, UL=1740.0 MHz for cc_idx=0 nof_prb=50
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
RACH: tti=7931, cc=0, pci=1, preamble=10, offset=0, temp_crnti=0x46
User 0x46 connected
常见问题
-
当搜不到信号时,首先请检查手机是否支持发射的频段,然后请参考配置虚拟核心网srsEPC检查使用的PLMN是否能触发手机加载正确的运营商配置文件,并检测srsENB与RRU配置中的射频参数是否正确。
-
当PC性能不足时,会出现如下所示的
Could not transmit RAR within the window
警告信息,且SDR上的Tx/Rx指示灯会闪烁,此时可以尝试调低射频参数,或更换配置更高的PC。
ser 0x48 connected
RACH: tti=4091, cc=0, pci=1, preamble=55, offset=18, temp_crnti=0x49
RACH: tti=4111, cc=0, pci=1, preamble=43, offset=18, temp_crnti=0x4a
RACH: tti=4131, cc=0, pci=1, preamble=42, offset=18, temp_crnti=0x4b
RACH: tti=4151, cc=0, pci=1, preamble=60, offset=18, temp_crnti=0x4c
Disconnecting rnti=0x49.
RACH: tti=4171, cc=0, pci=1, preamble=10, offset=32, temp_crnti=0x4d
RACH: tti=4191, cc=0, pci=1, preamble=12, offset=32, temp_crnti=0x4e
SCHED: Could not transmit RAR within the window (RA=4191, Window=[4194, 4204), RAR=4720
RACH: tti=4211, cc=0, pci=1, preamble=16, offset=32, temp_crnti=0x4f
RACH: tti=4231, cc=0, pci=1, preamble=49, offset=18, temp_crnti=0x50
RACH: tti=4251, cc=0, pci=1, preamble=43, offset=18, temp_crnti=0x51
SCHED: Could not transmit RAR within the window (RA=4211, Window=[4214, 4224), RAR=4721
SCHED: Could not transmit RAR within the window (RA=4231, Window=[4234, 4244), RAR=4721
SCHED: Could not transmit RAR within the window (RA=4251, Window=[4254, 4264), RAR=4721
RACH: tti=4271, cc=0, pci=1, preamble=56, offset=18, temp_crnti=0x52
RACH: tti=4441, cc=0, pci=1, preamble=28, offset=1, temp_crnti=0x53
SCHED: Could not transmit RAR within the window (RA=4271, Window=[4274, 4284), RAR=4762
SCHED: Could not transmit RAR within the window (RA=4441, Window=[4444, 4454), RAR=4762
RACH: tti=4461, cc=0, pci=1, preamble=2, offset=1, temp_crnti=0x54
RACH: tti=4481, cc=0, pci=1, preamble=30, offset=1, temp_crnti=0x55
Disconnecting rnti=0x4a.
SCHED: Could not transmit RAR within the window (RA=4461, Window=[4464, 4474), RAR=4763
SCHED: Could not transmit RAR within the window (RA=4481, Window=[4484, 4494), RAR=4763
RACH: tti=4891, cc=0, pci=1, preamble=22, offset=1, temp_crnti=0x56
SCHED: Could not transmit RAR within the window (RA=4891, Window=[4894, 4904), RAR=4939
RACH: tti=4911, cc=0, pci=1, preamble=51, offset=1, temp_crnti=0x57
RACH: tti=4931, cc=0, pci=1, preamble=8, offset=1, temp_crnti=0x58
Disconnecting rnti=0x4b.
- 当SIM卡内鉴权信息错误时,会出现如下所示的
Sending PDN Connectivity Reject
报错信息,此时请核对SIM卡中写入的鉴权信息与srsEPC中配置的是否一致。
wangyz@XPS13:~$ sudo srsepc
Built in Release mode using commit fa56836b1 on branch master.
--- Software Radio Systems EPC ---
Couldn't open , trying /root/.config/srsran/epc.conf
Reading configuration file /root/.config/srsran/epc.conf...
Couldn't open user_db.csv, trying /root/.config/srsran/user_db.csv
HSS Initialized.
MME S11 Initialized
MME GTP-C Initialized
MME Initialized. MCC: 0xf460, MNC: 0xff88
SPGW GTP-U Initialized.
SPGW S11 Initialized.
SP-GW Initialized.
Received S1 Setup Request.
S1 Setup Request - eNB Name: srsenb01, eNB id: 0x19b
S1 Setup Request - MCC:460, MNC:88
S1 Setup Request - TAC 7, B-PLMN 0x64f088
S1 Setup Request - Paging DRX v128
Sending S1 Setup Response
Initial UE message: LIBLTE_MME_MSG_TYPE_ATTACH_REQUEST
Received Initial UE message -- Attach Request
Attach request -- M-TMSI: 0xeca8d327
Attach request -- eNB-UE S1AP Id: 1
Attach request -- Attach type: 2
Attach Request -- UE Network Capabilities EEA: 11110000
Attach Request -- UE Network Capabilities EIA: 01110000
Attach Request -- MS Network Capabilities Present: true
PDN Connectivity Request -- EPS Bearer Identity requested: 0
PDN Connectivity Request -- Procedure Transaction Id: 6
PDN Connectivity Request -- ESM Information Transfer requested: true
UL NAS: Received Identity Response
ID Response -- IMSI: 460060000000001
Downlink NAS: Sent Authentication Request
UL NAS: Received Authentication Response
Authentication Response -- IMSI 460060000000001
UE Authentication Accepted.
Generating KeNB with UL NAS COUNT: 0
Downlink NAS: Sending NAS Security Mode Command.
UL NAS: Received Security Mode Complete
Security Mode Command Complete -- IMSI: 460060000000001
Sending ESM information request
UL NAS: Received ESM Information Response
ESM Info: APN ppnet
Getting subscription information -- QCI 7
Sending Create Session Request.
Creating Session Response -- IMSI: 460060000000001
Creating Session Response -- MME control TEID: 1
Received GTP-C PDU. Message type: GTPC_MSG_TYPE_CREATE_SESSION_REQUEST
SPGW: Allocated Ctrl TEID 1
SPGW: Allocated User TEID 1
SPGW: Allocate UE IP 172.16.0.2
Received Create Session Response
Create Session Response -- SPGW control TEID 1
Create Session Response -- SPGW S1-U Address: 127.0.1.100
SPGW Allocated IP 172.16.0.2 to IMSI 460060000000001
Adding attach accept to Initial Context Setup Request
Sent Initial Context Setup Request. E-RAB id 5
Received Initial Context Setup Response
E-RAB Context Setup. E-RAB id 5
E-RAB Context -- eNB TEID 0x1; eNB GTP-U Address 127.0.1.1
UL NAS: Received Attach Complete
Unpacked Attached Complete Message. IMSI 460060000000001
Unpacked Activate Default EPS Bearer message. EPS Bearer id 5
Received GTP-C PDU. Message type: GTPC_MSG_TYPE_MODIFY_BEARER_REQUEST
Sending EMM Information
UL NAS: PDN Connectivity Request
DL NAS: Sending PDN Connectivity Reject
UL NAS: PDN Connectivity Request
DL NAS: Sending PDN Connectivity Reject
UL NAS: PDN Connectivity Request
DL NAS: Sending PDN Connectivity Reject
UL NAS: PDN Connectivity Request
DL NAS: Sending PDN Connectivity Reject