OAI安装使用指南

一、安装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
smf.conf
/oai-cn5g-fed/docker-compose/docker-compose-basic-nrf
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信号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值