Openbts for opra 底层驱动移植

本文记录了将开源GSM基站OpenBTS的底层驱动移植到opra硬件的过程,主要面临链路增益、信号带宽、频偏、I/Q数据顺序等挑战。通过详细调试,解决了这些问题,最终实现了手机能搜索到网络但无法接入的状况,后续将继续解决接入问题。
摘要由CSDN通过智能技术生成

最近接触了一个软件无线电的项目,在新的硬件平台上调试openbts,就是那个开源的GSM基站。

openbts的架构很清晰,transceiver层负责提供radio部分的接口,实现数据的实时收发,然后通过socket与高层协议栈通信,所以我的大部分工作都是在transceiver层完成的。

openbts一直都是以USRP/USRP2作为底层硬件单元,这次我要用opra的板子做底层单元,原想只要继承radiodevice这个类写一个opradevice的class,把设置频率、增益和读写函数改成opra的指令就ok了,谁知道还是碰到了好多困难,第一次尝试,付出的汗水还是值得的。

熟悉设备,编写底层的device各个函数接口代码只用了几天,结果一跑出来,手机连网络都找不到,更别说接入了,郁闷ing

 

第一阶段 目标:BCCH广播信息调试,让手机搜索到网络

问题一 链路增益与定时校准

基站在发送小区广播信息和频率校准信息时,天线接收到的数据中每隔一定时间会有0作为填充保护,大概156或者157个sample,利用一块板子发一块板子收,验证发送信号的时域特征符合标准,定时是准确的,但是无意中发现波形出现“封顶”现象,原来是发送和接收增益设的太大(衰减器衰减倍数不够),导致链路信号饱和,部分信息丢失。。。

 

问题二 信号带宽与插值滤波

openbts作为一个完整的协议栈+底层驱动,整体调试非常困难。因为手机接入的第一步是搜索网络,这个阶段不需要手机反馈信息,即全靠基站发送下行数据,手机接收完成。因此可以关闭基站接收功能,skipRx=1,仅仅测试发送广播信息这一模块。为了验证上层协议栈的一致性,首先用USRP测试,手机可以搜索到网络,将USRP从启动到手机搜索到网络这段时间的发送数据写入文件,作为一个标准的“广播信息数据”,即测试输入。为USRP和opra分别编写两个纯发送数据的小程序。

1、USRPTXDATA程序从文件循环读入数据,发送,手机可以检测到网络;opra读入数据,发送,手机无法检测到网络。

怀疑是opra输出信号有问题,因为opra的模拟滤波器带宽是20M,采样率270.833kHz,输出时仅仅做了复制采样点数据的插值(即把1个采样点复制N次),故输出信号没有经过滤波,带外谐波很大,是不是这些没抑制掉的带外谐波造成手机接收机的干扰,解调错误?

2、将测试标准输入中的数据插值并重新写入到文件2中,opra从文件2中读数据,发送,手机依旧无法检测。

这期间遇到两个问题,首先opra在DA时做了64倍的采样点重复(如上文),那么我将这个插值提前到输入数据中,并用三次插值做滤波,抑制谐波,但是64倍。。。。忘记了这么大的采

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值