NB-IoT下行链路简单实现

用c简单实现了对NB-IoT下行链路的处理过程,没有性能验证和实现最优化(减少资源消耗,如MIPS及memory)等等。简单总结学习下实现的整体流程,对于细节的频偏估计,AGC等等相关部分还没仔细推敲。
实现功能
利用抓取仪器IQ数据进行小区搜索,公共信道的解码处理(NPBCH、SIB1、SI等)。由于没有整体协议功能,无法进入连接态获取相应的数据,所以无法进行NPDCCH/NPDSCH等信道的处理。同时只是对抓取的数据进行验证,所以省略了扫频寻找最佳频点的过程。具体实现功能如下:

小区搜索
实现方案,主要参考R1-161936 NB-PSS and NB-SSS Design.pdf。需要经过频点扫描,NPSS、NSSS解析等过程,才能得到小区的CellID,完成小区搜索过程。细节的实现公式及方式都是根据文档实现,描述下简单的过程。首先通过NPSS(11*11的序列)粗同步找到粗略的峰值点,具体实现过程中将采样数据滤波降采到240kHz进行处理,在采样率为1.92MHz的情形下,每个RE(不含冗余前缀CP)时域长度为128个点,而在204k情形下每个RE包含CP近似长度为17个点(137(138)/8),利用17个点长度的相关峰值得到相应的peak点(利用NPSS只是在时域code cover不同的特性,在接收到数据的不同RE symbol间进行相关),同时可以粗略的估计频偏等信息。在粗同步得到相应粗略峰值的基础上,可以进行NPSS的精同步,NPSS精通需要采用原始采样频率,并且和NPSS理论ZC序列进行相关。由于NPSS固定位于每帧的subframe5,精通同步后可以得到小区的帧边界。NSSS位于偶数帧的subframe9,在得到帧边界后,对NSSS和不同的cellID 序列进行相关、排序、判决,最后得到小区cellID(0-503 共504个cellID),同时NSSS设计时的循环以为因子(cyclic shift)可以得到相应SFN%8的周期序列。
信道解码流程
在得到相应小区CellID,小区SFN%8周期之后,可以依次进行NPBCH、SIB1和SI的解码。信道解码的大致流程如下:

各个流程的功能说明,由于采用OFDM方式,FFT是离散数据的傅里叶变换将接收的数据进行时频转换,在实现FFT的时候可以使用基二或基四等蝶形算法(利用其对称、周期等特性)已达到优化运算开销的目的,另外FFT和IFFT可以采用同一段代码实现,简单描述一段数据的IFFT为其共轭数据FFT结果的共轭;信道估计是通过理想的NRS序列和接收到的数据中的NRS位置的符号来估计信道响应H;解资源映射是获取接收数据中有效的信道符号的过程,亦即将相应的有效数据提取出来;信道均衡是根据信道响应将接收数据进行滤波处理过程;解扰与数据合并,需要产型相应的伪随机Gold序列,将数据进行解扰,扰码的初始状态和CellID及SFN slot等信息相关,由于处理周期为每个RU,而一段数据发送时可占用多个RU,需要在解码前进行合并;速率匹配是将编码数据适配到信道承载比特数目的过程,解速率匹配恢复编码结果的过程,此过程会将重复数据合并,删除掉的数据使用0数据补入;由于下行采用TBCC(tail biting convolutional coding),所以viterbi编码需要进行相应的wrap around处理(找到的文献中还有一种方式采用的是同时向两个方向译码),viterbi同样可以采用蝶形方式来减少运算开销;目前NB-IoT中使用的CRC有CRC16、CRC24A两类,在CRC上有些需要使用RNTI进行掩码处理,CRC当然除了蛮力运算外,可以采用查表法减少运算工作量。
NPBCH MIB的解码
NPBCH固定发送在subframe0,其原始数据为34比特,CRC使用的长度为16,码率为1/3,所以编码后比特数为150,速率匹配后输出比特数为1600,RNTI固定为0xFFFF(两个antenna port)或是0x0000(一个antenna port),NPBCH的加扰是根据SFN mod 64的周期进行,而在每个80ms内NPBCH RU上发送的是同样200比特的重复,亦将1600比特分成8个200比特,每个80ms为其中一个200比特的不断重复(QPSK,每个RE两个比特)。NPBCH采用盲解方式,同时能得到64内SFN号(SSS只能得到SFN mod 8的周期)以及Antenna port个数,解码得到相应数据如下:

其中SFN为10比特中的高四位;hyperSFN为HFN低两比特;operationMode为部署模式可以是In-Band(亦可分为同PCI和不同的PCI - physical cell identity),Guard-Band,standalone等模式的一种;ab-Enabled为access barring的标志,指示是否允许接入网络;systemInfoValueTage用于指示系统消息是否发生变化,用于系统消息更新功能;schedulingInfoSIB1提供SIB1的接收信息,用于指示SIB1 transport block size、重复次数等信息。在36.213的table 16.4.1.3-3中可以查表得到SIB1-NB解码需要重复次数的信息,而在table 16.4.1.5.2上指示TBS情形。
SIB1的解码信息
在得到NPBCH信息,可以解析得到SIB1的解码所需信息,SIB1固定在subframe 4发送,其发送以SFN 256为周期,重复次数及传输块大小可以根据NPBCH MIB中的SchedulingInfoSIB1得到,同时根据重复次数和小区ID PCI得到起始发送帧号信息,SIB1信息映射在连续16个帧中的间隔8个帧上。得到相应数据如下:

在SIB1中包含了相应的PLMN网络信息、TAC及用于小区重选的Rxlev、Qual等信息,同时可以得到SI的信息,在图示信元中可以看到SI的周期为64,重复周期为8,传输块大小为552,窗口长度为160ms,SI最多可以配置8个信息,目前的SIB1消息中只配置了一个。
SI的解码信息
根据SIB1消息中的信息,SI周期为64frame,frame offset为0,重复模式为8frame,SI-window-length为160ms,SI从subframe1映射到可用的所有可用的(downlinkbitmap没有配置)subframe上,目前的配置除了NPBCH、SIB1、NPSS、NSSS等subfarme,其他都可以用来发送SI信息;SI可以根据传输块大小不同,映射到8个sub-frame或2个sub-frame上,在协议36.331上说明了当比特数为56、120时使用2个sub-frame,其他情况使用8个sub-frame,目前的大小为552使用8个sub-frame。最终解码得到的SI信息如下:


此SI中包含了SIB2的信息,含有公共信道,dl-gap配置等信息。

猜你喜欢

转载自blog.csdn.net/dreambitbybit/article/details/79858401