我是靠谱客的博主 害怕星月,这篇文章主要介绍LTE协议栈---物理层PBCH信道前言一、PBCH信道简介二、PBCH代码实现总结参考,现在分享给大家,希望可以做个参考。

文章目录

  • 前言
  • 一、PBCH信道简介
  • 二、PBCH代码实现
    • 1.物理层模块
    • 2.代码
  • 总结
  • 参考


前言

本文介绍了PBCH信道的理论知识,并对PBCH信道的实现进行探讨!

一、PBCH信道简介

功能:PBCH信道承载了小区的系统信息,用于小区的搜索过程。

用户想要接入到基站,需要获取小区的系统信息,才能知道小区是如何配置的。小区通过BCCH逻辑信道向小区内的UE广播发送系统参数信息,系统信息分别为MIB(MasterInformationBlock) 和 SIB(SystemInformationBlock)。对应到物理层实际传输的信道,MIB信息由PBCH信道传输,SIB信息由PDSCH信道传输。LTE信道分类之前进行了描述。

系统信息

MIB信息中承载着最基本的信息,这些信息包含PDSCH的信道解码,UE只有解出MIB中的信息,才能利用MIB中的参数继续解码PDSCH中的数据,包括解码SIB包含的信息。

MIB信息包括:下行带宽参数,PHICH配置参数,系统帧号(SystemFrameNum)、协议中考虑预留和字节对齐等因素,MIB消息占用24bit。

资源分配
PBCH信道在时域上位于每个系统子帧0的第二个slot上的前4个ofdm符号,在频域上占据72个中心子载波。
在这里插入图片描述

时域上MIB消息占用了4个ofdm符号长度,每个ofdm符号在频域上分配了6个RB,每个RB12个子载波,频域上一共占用72个子载波。

之所以把BCH传输限制在72个中心子载波,是因为UE在第一次接收BCH的MIB信息之前,并不知道系统的带宽,因此,在第一次接收BCH的时候,假定小区的系统带宽等于最小的系统带宽,即6个RB,对应72个子载波。当解码完MIB信息,就能获得系统的下行带宽了。而且 ,无论LTE的带宽为多少,规定MIB消息总是占用带宽的中心频率的72个子载波。

在这里插入图片描述

二、PBCH代码实现

1.物理层模块

PBCH物理层模块

2.代码

PBCH结构体所声明的参数如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/* PBCH object */ typedef struct SRSLTE_API { srslte_cell_t cell; uint32_t nof_symbols; /* buffers */ cf_t* ce[SRSLTE_MAX_PORTS]; cf_t* symbols[SRSLTE_MAX_PORTS];//调制的符号buffer cf_t* x[SRSLTE_MAX_PORTS]; cf_t* d; float* llr; //解调的软信息buffer float* temp; float rm_f[SRSLTE_BCH_ENCODED_LEN];//编码之后buffer uint8_t* rm_b;//速率匹配之后的buffer uint8_t data[SRSLTE_BCH_PAYLOADCRC_LEN]; //CRC之后bit缓存buffer uint8_t data_enc[SRSLTE_BCH_ENCODED_LEN];//编码之后的缓存buffer uint32_t frame_idx; /* tx & rx objects */ srslte_modem_table_t mod;//调制对象 srslte_sequence_t seq;//scramble初始序列 srslte_viterbi_t decoder;//解码对象 srslte_crc_t crc;//crc校验对象 srslte_convcoder_t encoder;//编码对象 bool search_all_ports; } srslte_pbch_t;

CRC校验:对不同的发射端口对应不同的CRC校验掩码。24bit的MIB信息,加上16bit的校验码。
在这里插入图片描述

复制代码
1
2
3
srslte_crc_attach(&q->crc, q->data, SRSLTE_BCH_PAYLOAD_LEN); srslte_crc_set_mask(q->data, q->cell.nof_ports);

卷积码编码:编码速率为1/3。输入为40bit,输出为120bit。
在这里插入图片描述

复制代码
1
2
srslte_convcoder_encode(&q->encoder, q->data, q->data_enc, SRSLTE_BCH_PAYLOADCRC_LEN);

速率匹配:内交织模块,按照交织矩阵进行交织,然后进行bit收集和打孔。
在这里插入图片描述
一般来说,速率匹配之后得到的bit信息应该小于输入的信息。但是在PBCH信道,在速率匹配的实现过程中,反而进行了信息复制,速率匹配之后的数据为1920bit。实际上,在内交织模块,按照交织矩阵的列数为32来算,由于编码之后的每一路信号为40bit,需要对dk进行补24个0,来满足交织矩阵的列数。故速率匹配输入的dk三路信息比特收集后得到192bit信息,然后将其复制10份,输出1920bit信息。(至于为什么要复制到1920bit的信息,目前我也不能确定,是否是协议中就规定了normal循环前缀的模式下,PBCH信道所使占用的资源粒子RE固定为240个呢?但是为何要占用这么多个RE呢?)

复制代码
1
2
srslte_rm_conv_tx(q->data_enc, SRSLTE_BCH_ENCODED_LEN, q->rm_b, 4 * nof_bits);

加扰:扰码在normal循环前缀的模式下,扰码初始生成序列为1920bit,对应编码生成的1920bit的信息。实际上,1920bit的扰码序列是对应的40ms内的4帧的MIB消息。
在这里插入图片描述

复制代码
1
2
srslte_scrambling_b_offset(&q->seq, &q->rm_b[frame_idx * nof_bits], frame_idx * nof_bits, nof_bits);

调制:MIB消息信息使用QPSK调制方式,1920bit调制成960个符号,一个符号承载2bit的信息。
在这里插入图片描述

复制代码
1
2
srslte_mod_modulate(&q->mod, &q->rm_b[frame_idx * nof_bits], q->d, nof_bits);

层映射:和映射到的天线口相关,暂时考虑只有一个天线空口的情况。

资源映射:产生的960个符号为4帧的符号数,对应40ms,每一帧240个符号,映射到240个预留的RE上。
在这里插入图片描述

复制代码
1
2
srslte_pbch_put(q->symbols[i], &sf_symbols[i][SRSLTE_SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp)], q->cell);

下面来看代码具体怎么实现资源映射的:
在这里插入图片描述
首先需要了解RB的资源占用,一个RB在频域上占据12个子载波,时域上占据一个slot.长度。normal循环前缀的情况下, 一个slot为7个ofdm符号长度。

在这里插入图片描述
MIB消息时域上占用了4个ofdm符号的长度,频域上占据6个RB,每个RB在频域上12个子载波,所以从图中可以看到MIB消息所用的RE的个数为:6*(4*12-8)=240。代码实现如下:

在这里插入图片描述
从时域上来进行映射,时域上一共占据4个ofdm符号长度,对于第一个和第二个ofdm时隙长度,每一个ofdm符号时间内有6*4=24个RE要映射参考信号。

复制代码
1
2
prb_cp_ref(&input, &output, cell.id % 3, 4, 4 * 6, put);//带参考信号资源映射。
复制代码
1
2
prb_cp(&input, &output, 6);//第三、第四个ofdm符号的资源映射。

总结

本文对PBCH信道所涉及的LTE知识进行了简介,并对PBCH信道的代码实现进行了介绍。对于为何MIB消息要分配占用240个RE,存有疑问。另外,为了更方便的调试PBCH信道物理层的代码,从LTE开源协议栈中将代码进行了PBCH信道的物理层函数测试代码进行了提取,能够更加直观的查看每个物理层模块的输入输出。

参考

[1] https://www.sharetechnote.com/html/Handbook_LTE_PBCH.html
[2] 3GPP演进系统技术原理与设计。

最后

以上就是害怕星月最近收集整理的关于LTE协议栈---物理层PBCH信道前言一、PBCH信道简介二、PBCH代码实现总结参考的全部内容,更多相关LTE协议栈---物理层PBCH信道前言一、PBCH信道简介二、PBCH代码实现总结参考内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(115)

评论列表共有 0 条评论

立即
投稿
返回
顶部