一、安装gNB
gNB安装有CPU的要求,不过NUC就可以,Ubuntu是18.04,不同的Ubuntu版本之间安装的过程都差不多
1.1 更换Ubuntu你的源(推荐更换,换了之后下载的速度会变快,当然也可以不换)
在终端中执行以下命令。第一步是将原来的源备份到一个文件,以后如果有必要需要换回原来的源的话,可以用。第二步是打开源的文件。
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo gedit /etc/apt/sources.list
打开源文件之后,将文件中的内容删掉,换成下面的(选一个即可):
(1)清华的源
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
(2)阿里的源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
当然还有其他的源,比如中科大之类的,找到合适的也可以用。
粘贴之后,关闭文件,在终端执行下面命令:
sudo apt-get update
sudo apt-get upgrade
等待更新结束即可。
1.2、安装gNB
1.2.1、正常安装流程
首先下载源码文件,找一个文件夹用来存放源码,建议直接放在主目录下,从终端 cd 到文件夹目录,或者在文件夹右击 在终端打开 ,执行命令
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git
如果没有安装git的话要先安装git,即
sudo apt-get install git
下载玩源码后,开始安装:
cd openairinterface5g
git checkout develop
source oaienv
cd cmake_targets
./build_oai -I -w USRP
./build_oai -w USRP --gNB --nrUE
插上你的usrp 在终端中运行分别uhd_find_devices和uhd_usrp_probe 如果出现设备信息和设备信息树,则表示 ./build_oai -I -w USRP 安装成功了。
如果在cmake_targets/ran_build/build/ 文件夹下出现nr-softmode 和 nr-uesoftmode 两个文件即表示 ./build_oai -w USRP --gNB --nrUE安装成功。
这里解释一下参数的意思:
-I 表示安装OAI需要的依赖包 就是USRP的UHD驱动,如果已经另外安装了UHD这一步就把这个参数去掉,不过还是建议通过OAI安装
-w USRP 表示安装相应的硬件依赖
--gNB 是安装5g的基站
--nrUE 是安装5g的用户设备
也可以用 -h参数查看其他的命令
或者看看官网的解释https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux
1.2.2、安装问题与解决
在执行 ./build_oai -I -w USRP 这条命令的时候可能会出现一点问题,主要是一些要克隆的库的问题,然后导致失败,可以多尝试几次,也可以采用下面的方法
(1)问题一 克隆https://gist.github.com/2190472.git /opt/ssh 失败
解决办法 : 打开openairinterface5g/cmake_targets/tools 文件夹下的build_helper文件,可以搜索 opt/ssh 关键字,大概在859行,注释掉 SUDO开头的两句命令(如下),即在前面添加#号
之后新开一个终端,在终端中输入上面的命令直到成功为止(这条好像要翻墙,但我在下载的时候,有小概率下成功,但是这个文件是否有貌似不影响后续的OAI运行)
sudo git clone https://gist.github.com/2190472.git /opt/ssh
(2)问题二 克隆 https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c失败,即安装anS1出错,这个系统会生成日志文件,在openairinterface5g/cmake_targets/log文件夹下
解决办法:
同样在build_helper文件中,大概在870行,注释掉箭头的两句命令。
之后同样在新终端中运行,直到成功为止
git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c
(3) 问题三 克隆protobuf-c文件出错,这个同样有日志文件,同样在log文件夹中
解决办法: 在build_helper文件中的299行,同样注释这两句命令
之后在新终端中,运行一下命令 ,直到成功
cd /tmp
git clone https://github.com/protobuf-c/protobuf-c.git
(4)问题四 下载UHD images出错,这个问题当时忘记截图了,我描述一下吧,就是下载images时,出现了链接不存在的错误,当你点开那个不存在的链接时,浏览器会打开一个人机验证的页面。
解决办法 这个问题是网络的问题,可能实验室的网络被禁了,没什么办法,换个网络即可,例如换成手机热点。之后不报错的话,应该会在/usr/share/uhd/文件夹中看你见下载的images文件夹。
至此如果出现过以上的问题,并相应的成功的下载好了文件,则可以切换到openAirinterface5g/cmake_targers/文件夹下,重新运行一下命令即可:
./build_oai -I -w USRP
如果还遇到其他问题可能是一些UHD依赖包的问题,可以安装的时候缺什么补什么,
或者到USRP的官网把依赖包都下载了,不同的系统有不同的依赖包,注意对应。
https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux
1.3、运行gNB
1.3.1、运行结果和截图
由于目前还没有安装OAI的核心网,所以只能先测试gNB是否能运行起来,即noS1模式
当然,如果你是用的两个USRP,一个当UE一个当gNB的话应该不需要用核心网,一直在noS1模式下运行即可,但是如果是使用只能手机来当UE的话,即COTSUE。则一定需要安装核心网。
首先切换到openairinterface5g/cmake_targets/ran_build/build/ 文件夹下,然后运行
sudo -E ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --noS1 --nokrnmod 1
这里解释一下参数:
-O 是给gNB传入配置文件 这里运行的是noS1模式所以配置文件中没有修改
--noS1 让gNB运行在noS1模式,即没有核心网的情况下
--nokrnmod 1 同上,当没有核心网的时候设置这个标志位 这个命令也可以不要
过程或在那个如果没有报错,并出现以下画面,等待接收UE接入,即表示gNB成功运行了,按下Ctrl+c 可以停止运行。
1.3.2、运行问题处理和解决
问题一 lib/x86_64-linux-gnu/libc.so.6 出错
这个问题时之前你的电脑安装UHD的驱动之后,出现的版本不匹配的问题,需要先卸载UHD,然后回到 第二步安装OAI的步骤中,重新运行 ./build_oai -I -w USRP 这里贴一下官方的原话
之前被这个问题困扰了很久,因为一开始看了USRP官网的一篇教程,里面讲述了用USRP安装OAI的教程,里面首先需要安装UHD,之后才要安装OAI,导致后面检查问题的时候完全没往这方面想,直到看到官网的那句话才明白。
问题二 [HW] unknown sample rate 61440000
这个问题的原因还没找到,但是通过在运行gNB的命令中的配置文件后面添加 -E参数 即可解决,命令如下
sudo -E ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf -E --noS1 --nokrnmod 1
问题三 未能找到images文件,请设置UHD_IMAGES_DIR环境变量,或者运行/usr/local/lib/uhd/tests/uhd_images_downloader.py
解决方法 这个问题首先检查下你的/usr/share/uhd/images/文件夹下有没有文件,或者说有没有images文件夹。没有的话在终端运行
sudo uhd_images_downloader
如果运行的出现问题,可以试试换一个网络环境,比如手机热点
如果有images文件的话,只要设置环境变量即可,运行
export $UHD_IMAGES_DIR=/usr/share/uhd/images
之后打开主文件夹下的 .bashrc 文件,并把上面的命令添加到文件最后,保存后,重启电脑。(.bsahrc是个隐藏文件)
二、安装核心网
建议核心网和gNB安装在同一台主机上,可以省去很多的麻烦
2.1、安装docker和docker compose
2.1.1、安装docker
官方给的教程是通过docker和docker compose这两个软件来安装的,所以要先安装这两个软件,这里给出docker的官网,以供参考https://www.docker.com/
可以通过docker官方的自动安装脚本来安装,打开终端运行如下命令
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
可能会比较慢,这个地方也可以使用国内的一些其他的源,安装起来会比较快,可以自行搜索。
安装完之后可以通过
sudo docker --version
查看是否安装成功,之后将可以将用户名加入到docker组中,这样以后在运行docker命令的时候就不用加sudo了。
sudo usermod -a -G docker oai-5gc
其中oai-5gc要换成你自己的用户名,可以通过自己运行一下尝试时候添加成功。
接下来需要在dockerhub上注册一个账号,https://hub.docker.com/
2.1.2、安装docker compose
这部分的安装同样可以参考上一步中的docker官网的教程。
通过脚本安装docker compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
其中1.27.4是版本号,这个版本是OAI官网给的版本,如果后期有变化可以自行更改
官方地址如下
https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed/-/blob/master/docs/DEPLOY_SA5G_BASIC_DEPLOYMENT.md
安装完之后将docker compose的二进制文件应用可执行权限,并且创建软连接
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
最后也可以通过 docker compose - -version命令查看是否安装成功。
3、python
还需要一个至少3.6版本以上的python,这个一般在Ubuntu里好像会自带,通过以下命令查看版本。
python3 --version
2.2、下载镜像
首先通过命令行登录刚注册的dockerHub账号。
之后一个一个的下载相应的镜像文件,如果有中断,可以尝试重复运行,核心网的网元容器可能会有变化,可以根据官网来下载相应的镜像文件
https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed/-/blob/master/docs/RETRIEVE_OFFICIAL_IMAGES.md
$docker login
$docker pull ubuntu:bionic
$docker pull mysql:5.7
$docker pull rdefosseoai/oai-amf:latest
$docker pull rdefosseoai/oai-nrf:latest
$ docker pull rdefosseoai/oai-spgwu-tiny:latest
$ docker pull rdefosseoai/oai-smf:latest
$ docker pull rdefosseoai/oai-udr:latest
$ docker pull rdefosseoai/oai-udm:latest
$ docker pull rdefosseoai/oai-ausf:latest
$ docker pull rdefosseoai/oai-upf-vpp:latest
docker pull rdefosseoai/oai-nssf:latest
之后对下载的镜像重命名,方便操作
$ docker image tag rdefosseoai/oai-amf:latest oai-amf:latest
$ docker image tag rdefosseoai/oai-nrf:latest oai-nrf:latest
$ docker image tag rdefosseoai/oai-smf:latest oai-smf:latest
$ docker image tag rdefosseoai/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
$ docker image tag rdefosseoai/oai-udr:latest oai-udr:latest
$ docker image tag rdefosseoai/oai-udm:latest oai-udm:latest
$ docker image tag rdefosseoai/oai-ausf:latest oai-ausf:latest
$ docker image tag rdefosseoai/oai-upf-vpp:latest oai-upf-vpp:latest
docker image tag rdefosseoai/oai-nssf:latest oai-nssf:latest
OAI后续应该还会新增一些其他的镜像,建议还是到官网上看看具体有哪些。
之后记得退出登录
docker logout
2.3、下载5G核心网源码
这里的版本号v1.3.0会迭代更新,可以参考官网的版本号
https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed/-/blob/master/docs/RETRIEVE_OFFICIAL_IMAGES.md
这里可以将核心网的源码和之前下载的gNB的代码同时都放在Home下,方便操作
git clone --branch v1.3.0 https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed.git
cd oai-cn5g-fed
git checkout -f v1.3.0
./scripts/syncComponents.sh
最后一歩的执行时间比较长,耐心等待,最后结果如下
2.4、运行核心网
首先切换到 oai-cn5g-fed/docker-compose 下,之后可以先运行以下命令查看帮助。
python3 core-network.py --help
如下图所示
之后可以根据自己的需要运行相应的命令,我以简单的为例,命令和结果如下,之后可以通过docker ps命令来查看正在运行的容器。或者ifconfig命令查看docker运行起来的各个容器的网络接口
python3 ./core-network.py --type start-mini --fqdn no --scenario 1
当需要停下核心网时,在之前可以保存各个容器的日志,命令如下:
docker logs oai-amf > amf.log
docker logs oai-smf > smf.log
docker logs oai-nrf > nrf.log
docker logs oai-spgwu > spgwu.log
python3 ./core-network.py --type stop-mini
日志文件还是保存在当前的文件夹下,即oai-cn5g-fed/docker-compose 文件夹下。
2.5、链接gNB
如果核心网和gNB安装在了同一台主机上,直接从step5开始
setp1
首先需要保证核心网主机和gNB主机在同一个局域网下,比如连在同一个路由器或者交换机下,即两台主机之间可以互相ping通,建议使用网线链接主机和路由器。
如果ping不通的话可能有如下几个原因:
1、没有处在同一个局域网下
2、两台主机的防火墙没关
3、可能路由器设置了IP隔离,禁止终端之间互相ping,我用的小米路由器就是这个问题。
step2
如果能够ping通之后,就要在gNB的主机上添加路由转发,命令如下:
sudo ip route add 192.168.70.128/26 via 192.168.28.153 dev eno1;
其中192.168.70.128/26是核心网通过docker 创建的网桥的地址,一般如果不修改docker file的参数,这个不用改,
192.168.28.153是核心网主机的地址
eno1是有线网卡的名字
另外注意一下添加路由的命令是一次性,即在关机重启之后就失效了,需要重新添加。
step3
在核心网主机上设置网络参数,命令如下:
sudo sysctl net.ipv4.conf.all.forwarding=1
sudo iptables -P FORWARD ACCEPT
同样要注意以上的命令也是一次性的,重启之后就需要重新添加。
step4
分别设置完两台主机的参数后就可以测试一下,先把核心网主机的核心网启动起来,之后通过gNB主机来ping核心网中的各个容器。各个容器的地址如下,以及结果如下:
step5
查看核心网和基站的参数保证其中的 MNC,MCC,TAC这些参数是相同的
核心网的配置文件在oai-cn5g-fed/docker-compose文件夹下,具体使用的是哪一个可以根据运行核心网的命令参考help文档来确定,yaml文件最好使用vim来编辑,否则修改完之后可能会运行错误。
基站的配置文件就是gnb.sa.band78.fr1.106PRB.usrpb210.conf
其中的MNC和MCC两个参数在核心网和基站中命名都是相同的,TAC是核心网的命名对应于基站中为track_area_code
上面的步骤都没问题后就可以尝试运行gNB了,
首先把重新运行核心网运,之后在gNB主机上运行一下命令:
cd cmake_targets/ran_build/build
sudo ./nr-softmodem -E --sa -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
运行结果如下:
【notice】 这一步如果遇到未发现设备的问题可以尝试在运行的命令中加 -E,即运行下面的命令:
sudo -E ./nr-softmodem -E --sa -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
最后在贴一下核心网主机和gNB主机之间的链接框架图
三、手机连接
3.1、烧写SIM卡
为了接入手机,首先就是烧写SIM白卡,需要买一个SIM白卡和烧写的读卡器以及软件,这些东西都可以在淘宝上买到,一般买到的都是基站卡,买读卡器的时候会给一个软件,界面大致如下所示,主要需要填写的几个参数有IMSI,opc,还有key(ki)
1、opc,ki(key)
opc和key需要与核心网中的yaml文件一样,如果没有自己修改过的话(建议不要自己改),应该烧写如下的值(建议还是到yaml文件中确认一下)
opc:63bfa50ee6523365ff14c1f45f88737d
key(ki) :0C0A34601D4F07677303652C0462535B
这两个不区分大小写
2、IMSI-PLMN
IMSI可以理解为手机的代号,IMSI = PLMN + MSIN = MCC + MNC + MSIN
其中的PLMN也是需要和核心网以及基站配置文件中保持一致,如果核心网和基站中默认是MCC=208,MNC=95,这两个值需要填写在手机的APN 中,但是我用的mate30支持的PLMN只能是00101所以这边我只能采用这个值,注意需要和基站和核心网保持一致,基站通过配置文件修改即可,核心网是修改yaml文件。
3、IMSI-MSIN
剩下的MSIN可以随便填写一个值,MSIN是10位加上5位的PLMN一共15位组成IMSI烧写到SIM白卡中。
【Tips】 当然也可以不做自定义的修改,核心网中默认带有的IMSI 是208950000000031,这样在第三步的时候就不需要将自己写的UE信息添加到核心网的数据库中了。
3.2、手机新建APN
将烧写好的SIM 插入手机中,在手机中新建APN,这一步各个手机的步骤可能都不一样,mate30是设置->移动网络->移动数据->接入点名称->新建APN, 其中的页面如下
主要就填写4个参数 名称、APN、MCC、MNC
1、MCC、MNC
MCC和MNC是上一步中烧写到SIM 中的值,我这里是001和01
2、APN
这个值需要注意一下,这个值需要是核心网的中的SMF组件中的DNN 列表中的一个,可以通过以下的两个文件来查看。
/oai-cn5g-fed/component/oai-smf/etc/smf.conf
/oai-cn5g-fed/docker-compose/docker-compose-basic-nrf
SMF中提供有4个接口,通过的docker的运行的yaml文件,可以看到这些参数的具体的值,虽然有4个接口,但是只提供了一个默认的接口值,名称是oai,所以在手机上的APN 处填写oai。
另外,如果想要修改APN 的或者想要多个APN(不超过4个)的可以就在docker的yaml文件中修改就行,至于怎么修改可以自行参考其他的资料。
3、名称
这个参数理论上是可以随便填,但是建议和上面的APN写成一样,比较方便。
3.3、配置核心网的相关信息
如果在第一步中就行了自定义的UE的IMSI 修改,则需要将UE 的信息添加到核心网的数据库中。这里有两种方法:
3.3.1、方法一 通过mysql来修改
首先把核心网的容器启动起来,然后进入容器,再进入mysql,之后往列表中插入相关的UE信息,具体可以参考官网的方法
3.3.2、方法二 通过sql文件修改(推荐)
如果安装核心网采用的是前言中提到的参考教程,可以直接打开其中oai_db.sql,在如下所示的地方添加相应的信息即可。这样就可以把UE 的信息添加好了。
各个版本的数据库源文件可能会有其他的名字,不过应该是sql后缀的文件,打开后找一找其中的类似的OAI示例,之后按照相应的示例填写自己烧写的参数,之后可以用方法一启动核心网到MySQL的容器中看一看,验证一下。
3.4、启动调试
1、启动核心网
python3 core-network.py --type start-basic --fqdn yes --scenario 1
2、启动gNB(新建终端)
sudo -E ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf -E --sa
3、打开关闭手机的飞行模式
在基站的终端中可以看到如下所示的UE 连接的信息,从msg1到msg4的基站与UE之间的交互msg。
4、在核心网的终端查看AMF的日志
docker logs oai-amf > amf.log
在日志中可以看到gNB 和UE在核心网中的注册信息,通过imsi可以看出是自己烧写的SIM卡的信息。
【tips】 建议USRP 的天线使用增益比较高的,之前我用的天线增益太低就连不上。
演示录屏https://www.bilibili.com/video/BV1Vd4y1Q7Rq?vd_source=e9b217dd648d3e9a219e29ceb3ba23b2
四、信号采集
有关随机接入的一些参数可以参考https://www.sharetechnote.com/html/5G/5G_RACH.html
4.1、计算PRACH频率
从gNB的配置文件(gnb.sa.band78.fr1.106PRB.usrpb210.conf)中读取相应的参数来计算相应的频率,具体看下图
1、PointA通过参数dl_absoluteFrequencyPointA来求,这是通过NR-ARFCN给出,640008转换成频率即为3600.12MHz
2、OffsetToCarrier是dl_offstToCarrier,单位是RB,0就是0RB
3、locationAndBandwidth对应于initialULBWPlocationAndBandwidth,其代表两个值,分别是BW0与OffsetToCarrier的距离以及BWP0的长度,28875求出来是BW0与OffsetToCarrier的距离为0,自己长度为106,这两个单位都是RB
4、msg1_FDM 和msg1_FrequencyStart分别对应于prach_msg1_FDM和 prach_msg1_FrequencyStart,prach_msg1_FDM为0表示只有一个PRACH,prach_msg1_FrequencyStart为0表示PRACH与BWP0开始的位置距离为0,单位同样是RB
综上所述,通过gnb.sa.band78.fr1.106PRB.usrpb210.conf中的参数计算出的PRACH的开始频率与PointA是重合的,即为3600.12MHz
至于PRACH的长度通过协议TS38.211 6.3.3.2-1来得到,gNB配置文件中所有的子载波间隔都是30kHz,同时prach_RootSequenceIndex_PR参数指出为短序列,所以根据表格得出PRACH的长度是12RB,一个RB中12个子载波,所以PRACH的带宽是12*12*30kHz=4.32MHz
所以可以设置USRP采集PRACH的中心频率为3600.12+(4.32/2)=3602.28MHz
4.2、信号采集程序
上图的信号采集程序中,先运行background.sh,之后再另外一个终端中运行loop.sh,信号开始采集之后运行get_rach.py或者get_rach1.py前一个是手动筛选出采集的信号中的PRACH,后一个是自动筛选信号中的PRACH
roi_param是参数文件,CARRIER_FREQ即为计算的PRACH的中心频率
READPATH和SAVEPATH分别表示信号采集的保存的地址和筛选出的PRACH的保存地址,可以理解为background.sh和loop.sh将采集到的信号保存在READPATH地址中,get_rach.py或者get_rach1.py从READPATH中读取出信号并进行筛选,将筛选出的PRACH信号保存在SAVEPATH地址中
PERCENT用于get_rach.py和get_rach1.py中用于筛选PRACH信号,是一个经验值
PRACH的信号的频域特点如下图所示
将信号经过FFT,并计算abs可以看出其能量全集中在中间,在get_rach.py和get_rach1.py中以1024个点为一段寻找PRACH信号,PRACH时域长度(20MHz采样率下)占用4个1024,但是要通过5个1024来筛选,这是为了去掉采集的信号中存在的其他情况
上图中即为get_rach.py和get_rach1.py中的筛选程序,其中每次都算出一段信号(1024个点)中间的400到630之间的能量占整段信号的占比,当大于PRECENT这个经验值的时候就是有PRACH信号,通过比较前后一个5段信号的占比来去掉其他的不要的信号来得到需要的PRACH信号