OpenAirInterface OAI入门教程 2
最近有不少同学发邮件问我关于OAI的问题,为了方便大家交流,我建立了一个OAI的学生讨论QQ群,群号 512786903。有兴趣的同学欢迎加入交流。
同时,我和同学建立了一个问题交流论坛,http://www.opencenter.cn,欢迎同学们在论坛上面交流问题。
前不久写了一个关于OAI 仿真平台的入门教程,关注的人不少(说实话,其实少得可怜~-~)。现在继续深入,写一些关于OAI SDR实现相关的教程。
SDR系统对数据处理的实时性要求非常好,特别是对于LTE这种要求时隙对齐的系统。由于Ubuntu系统不是一个实时操作系统,为了尽量满足OAI的实时性要求,OAI软件必然要采用多线程处理的方式来提高计算机的数据处理能力。
OAI的eNB主要包含3个线程,eNB_thread,eNB_thread_tx 和 eNB_thread_rx。其中eNB_thread 主要负责与射频外设(如USRP)进行数据交互,即把要发送的数据写入USRP,把射频外设接收的数据传输给电脑。eNB_thread_tx,顾名思义,就是处理eNB侧发送数据的线程,其中包含从RRC到PHY层,从PBCH,PSS等到PDSCH各个信道的数据发送处理。对应的,eNB_thread_rx主要负责eNB侧接收信号的线程。
OAI UE主要有4个线程,相比OAI eNB多了1个线程。4个线程分别是UE_thread,UE_thread_rx, UE_thread_tx 和UE_thread_sync。类似的,UE_thread负责与射频外设交互数据,UE_thread_tx负责处理UE要发送的基带数据,UE_thread_rx负责处理UE接收到的数据。最后一个线程UE_thread_sync负责与eNB保持同步。有人可能会疑惑,为什么eNB没有同步线程呢?因为在LTE系统里面,eNB只需要一直不停的收发即可,如果UE想要收发数据,就必须乖乖与eNB保持同步。
OAI的SDR平台主要可以分为三种模式来运行:
这种模式下,OAI eNB与OAI UE都只起了物理层,即MAC、RLC、PDCP和以上的层都没有。这很适合用来验证和实现物理层的算法。而且,根据笔者的测试,这种模式也是三种模式里面最为稳定的。毕竟,如果物理层都不稳,上层就无从谈起了。
这种模式下,OAI eNB和OAI UE主要起了PHY,MAC,RLC和PDCP层等功能,RRC和NAS层的功能较少或者没有。这种模式下OAI会在eNB侧和UE侧各启动一个虚拟网卡oai0,可以直接进行业务传输。这种模式非常适合用来做全协议栈的数据传输测试,算法验证等。因为没有EPC的影响,开发起来比较灵活。但是从实测来看,这种模式目前稳定性一般。
这种模式下,OAI把LTE的整个协议栈都运行起来了,包括EPC,eNB和UE。当然,我们也可以直接用商用终端接入我们的基站,即我们的手机或者LTE数据卡可以直接接入SDR基站,甚至可以通过EPC的SPGW连接互联网。说白了,这就是一个完整的伪基站。但是从实测结果来看,这套系统不是很稳定,尤其是OAI UE。
此外,上述三个运行模式都可以与其他的SDR平台互相连接。比如我们可以用OAI的UE换成srsUE,或者把OAI的EPC换成Amarisoft MME。