之前一直在用srsLTE软件实现LTE基站,srsLTE不但文档而且代码结构清晰,不过我看的代码主要还是与sdr交互的部分,真正的信号处理和解码部分过于复杂,所以还没深入去看。我发现srsLTE除了可以实现基站外,里面有一些小例子,比如cell_search。可以搜索运营商的商用基站,也就是说我们手头的LimeSDR可以像一个普通手机一样去解调实际的基站信号,而不只是用来听FM广播了,这听起来超酷。问题是cell_search程序还是调用过了srslte内部的很多函数,看起来太复杂杂乱,不好上手。
后来我又找到了另一个叫作了LTE-Cell-Scanner的程序。
https://github.com/Evrytania/LTE-Cell-Scanner
这个程序的功能很简单,就只是搜索基站获得一些广播信息,(它也有LTE-Tracker程序,可以跟踪基站获得更多信息,但是我不打算去看了)。这个LTE-Cell-Scanner本来是一个老外写的,用的硬件是rtlsdr,可以搜索指定频率范围内的LTE基站,把判断出来确定是基站的频点标记出来,每个基站还能进一步获取信息,可以获取cellid,基站功率,CP类型,天线数量,小区带宽,还有PHICH的一些信息,甚至还可以用来校准rtlsdr的频率。
这是这个原作者做的介绍网页
http://www.evrytania.com/lte-tools/78-default-category/77-lte-cell-scanner
我使用的时候看到介绍说如果用低ppm的硬件或者使用上一次的校准值来校准硬件可以提高搜索速度,我本来认为如果硬件不行要不就是解不出,不应该对搜索时间造成影响,但是仔细看了代码之后才理解为什么会这样。
除了这个项目外,还有个中国人对这个程序做了修改,主要有3个修改:1.使它支持hackrf(这样频率范围更大,我们国家有些基站频率2.6GHz远超rtlsdr的支持范围了,但是hackrf就可以支持)2.支持tdd基站(老外原作只支持fdd基站,而且还能判断这个基站是fdd还是tdd)3.支持opencl(可以用显卡加速运算)
我暂时还只看了老外原版的程序,基本流程搞懂了。
基站检测是通过找下行信号的pss和sss来判断的。步骤是它先获取rtlsdr得到的iq数据,然后直接对原始数据用互相关算法检测pss,接下来最大似然算法检测sss,这样就判断出了基站。还得到了很多重要信息:cellid、功率、中心频率,原理上还可以判断出是tdd还是fdd基站,后面还做了频率偏差估计。
这些做完后要做MIB解调,MIB里也有很多重要信息比如基站带宽等。MIB解调前先获取了视频网格(time frequency grid, tfg),然后才是去解调并解码获取进一步的信息。
这个程序调用了一些外部的包,比如itpp,itpp里有很多模仿matlab的函数,还有通信信号处理的算法,LTE的解调和解码其实都是调用itpp里的函数做的。
主要的程序有3个,CellSearch.cpp searcher.cpp lte_lib.cpp。CellSearch.cpp里面有主函数,主函数先获取数据,然后调用信号处理算法一步步做检测。检测到一个基站就print一个出来,直到整个目标频率范围搜索完毕,再输出总结的信息。searcher.cpp也很重要,主函数里调用的几个算法函数就在这里面实现的。最后还有个lte_lib.cpp,它是对itpp的lte解调解码函数的封装,主程序调用它来做mib解码,它会再去调用itpp里的具体函数。
先看看CellSearch里的main函数,调用parse_commandline获取启动时输入的参数,config_usb初始化rtlsdr硬件。然后初始化了一些变量,变量里包括fc_search_set,这是用户输入的要搜索的频率范围。f_search_set,这是在搜索其中一个频点是不是基站的时候,要对频率做的偏移。detected_cells检测出的基站信

本文探讨了使用srsLTE和LTE-Cell-Scanner软件进行LTE基站搜索的技术细节,包括信号处理、解调和解码过程,以及如何利用硬件如LimeSDR和hackrf进行基站信号的检测和分析。
最低0.47元/天 解锁文章
1237

被折叠的 条评论
为什么被折叠?



