LTE的处理流程和机制

发布时间 2023-12-15 16:31:58作者: lsgxeva

LTE的处理流程和机制

来源 https://zhuanlan.zhihu.com/p/645672554

参考目录 https://zhuanlan.zhihu.com/p/658378789

 

一.UE工作状态

在通信过程中,我们的手机也就是UE(User Equipment)的处理可以分为以下三种情况,开机过程、待机状态和联机状态,每种状态下完成的任务如下所示:

UE工作状态

(1) 开机过程

当手机刚开机的时候,会自动对周围的移动网络搜索,找到一个信号最强的小区接入,然后我们就可以通过手机中的APP进行上网

(2) 待机状态

待机状态是指手机未进行任何操作的状态,也称为休眠状态。在该状态下,大部分时间手机都在睡眠,可以延长手机的续航时间。但是也需要在固定时刻醒来,接收基站发送的数据,感知周围的环境。就像我们在睡觉的时候也要感知外界的声音和光线,不然如果你拨打对方的手机号码,半天没有响铃,你的体验肯定会很差。

(3) 联机状态

联机是手机的一种工作模式,类似与人的清醒状态,表示要开始工作了,在该状态下才能与网络建立连接,通过APP上网或者打电话。

接下来对上述三个状态涉及的内容进行简要介绍,后续也会针对每个过程中的处理进行详细的整理

二.开机过程

手机开机的时候,会自动进行PLMN搜索,然后进行注册,通过附着驻留到一个合适的小区上,主要包括以下两个部分:

(1) 初始小区选择

初始小区选择

初始的时候,会对UE能力支持的频段范围内存在的所有小区进行搜索,通过相关检测PSS和SSS,检测到PSS和SSS,可以获得如下的信息:

主同步信号(PSS)辅同步信号(SSS)
1.频率同步(中心频率) 1.无线帧同步(10ms)
2.半帧同步(5ms) 2.区分FDD和TDD
3.OFDM符号同步(0-13) 3.子帧编号(0-9)
4.获得NID2 4.获得NID1

根据获得的上述信息,进一步搜索PBCH,可以得到小区的带宽,无线帧号,发送的天线个数等信息,进一步解析DCI和SIB信息,得到PLMN的列表,然后进行常规小区选择。

(2) 常规小区选择

常规小区选择

在初始小区选择时得到的PLMN列表中,通过排序,选择最优的进行接入选择,过程同初始小区搜索,区别在于,只对一个固定的频点进行搜索,当满足驻留条件时,终端发起随机接入,通过信息交互,完成基站和小区的同步,驻留到该小区。

三.待机状态

完成小区驻留之后,终端处于待机状态,如果没有业务请求,则UE会一直处于该状态。在该状态下UE主要有二个任务需要处理,分别是小区重选、位置更新。

(1) 小区重选

小区重选示意图

假设有三个小区,如上图所示,当我们从A->B的时候,手机接收周围基站发送的信号,进行测量,选择最好一个小区进行驻留,最终会从cell1->cell2,小区重选的过程如下所示:

小区重选过程

当我们远离小区移动时,UE测量服务小区的信号质量,发现越来越弱,当弱到一定程度,开始测量邻区的信号。当邻区信号强度大于一定的值(邻区可能不止一个),对邻区进行排序之后,选择一个信号最强的驻留,小区重选能够保证我们在移动过程中,始终处于最强的信号覆盖范围内。

(2) 位置更新

位置更新,就是UE需要向核心网汇报自己所在的一个位置,从而实现被叫的过程。大概意思就是,当UE处于IDLE的时候,别人给你打电话,或者有信息来的,通信核心网需要知道该UE处于哪个小区下,不然无法通知到你,也就无法收到相应的信息。

位置更新示意图

上图描述了3个位置区的情况,当我们在位置1里移动的时候,不需要上报自己的位置,有消息的时候,核心网会通过位置1里的4个小区对我们进行呼叫,当从位置1到位置2的时候,需要上报自己的位置信息,告诉核心网,我们的位置发生了变化,下次呼叫的时候,通过位置2的5个基站对我们进行寻呼。

通过位置区进行上报,可以减少与网络的交互,降低网络和终端的负担。

四.联机状态

联机状态下的任务只有一个,就是进行业务的传输,发送和接收数据。在联机状态下也会进行测量,小区切换,位置更新等,但是业务传输是最主要的任务,主要的处理过程如下所示:

联机处理过程

一共分为三个阶段,在时间上是递进的,UE完成一个阶段的任务才会进入到下一阶段。当我们通过APP上网的时候,数据的交互过程如下所示:

业务数据交互过程

APP位于终端与用户进行交互,PGW通过Internet连接到服务器,PGW可以看成是终端的代理,与Web建立TCP连接。为了完成代理的这样一个任务,PGW需要将终端的IP和TCP端口号映射为本地的IP地址和TCP端口号(私有IP)。

在上述交互中涉及的各模块如下所示:

网络交互过程

终端与基站的交互,称为无线网,数据通过LTE核心网,传输到因特网,完成数据的交互。上述的网络接口可以类比为一个大型的商场,

终端(UE):可以比作店铺里的店员。

基站(eNB):可以比作商场里的店铺,每个店铺里有多个员工,对应一个基站上连接多个终端。

服务网关(SGW):可以比作商场里的每一层楼,一层楼中有很多个店铺,对应于一个SGW与多个基站连接,多个基站的数据汇聚到一个SGW中。

分组数据网络网关(PGW):可以比作商场的入口或出口,每层楼的人流和货物都会汇聚到商场的出入口,即LTE网络中的数据,最终通过PGW和IP网进行交互。商场中的出入口不止一个,对应着PGW也有多个。

 

PSS&SSS检测

来源 https://zhuanlan.zhihu.com/p/648242844

搜索PSS和SSS是UE与基站做下行同步的第一步,在这之前需要先了解LTE的频段范围和时频资源分布。

(1) 频段

在协议TS36.101的第五章节,列出了LTE所支持的各频段,如下所示:

LTE的部分频段

上述只列举了部分,可以看到不同的频段之间是有重叠的,协议中对各频段有详细的描述,包括不同频段支持的带宽,载波聚合的组合和不同频段支持的场景等。

LTE里的频段编号高达100多个,但不是所有的频段UE都要支持,在频段问题上,运营商有较大的发言权,需要满足运营商的要求。我国的LTE可用频段位于2GHz附近,具体分布和三大运营商的分配如下所示:

运营商频段分布

其中,三角形表示FDD的上下行,菱形表示TDD,其中不连续的地方分配给了其他的无线通信,例如空间探测,或者是非授权的频段,用于WIFI,蓝牙等。

(2)带宽

带宽表示允许通过该信道的上下限频率,LTE系统支持的带宽灵活可变,有6种配置,如下所示:

信道带宽

RB表示频域的资源块,一个RB中有12个RE,RE是频率的最小资源单位,每个RE表示一个子载波,两个子载波之间的间隔为15KHz,如下所示:

频率资源块

通过matlab产生一个RB中的数据,一共12个RE,表示12个子载波,每两个频点之间的间隔为15KHz,然后进行累加,每个频率信号的波形幅度为1,采样频率为1024Hz,与FFT的点数相同。

%% 产生1个RB的时域数据==================================================
clc;clear all;
carrier_num = 12;
carrier_freq= 15:15:15*carrier_num;
carrier_amp = ones(1,carrier_num);
carrier_phi = zeros(1,carrier_num);
fs          = 1024;
NFFT        = 1024;
delta_t     = 1/fs;
t           = 0:delta_t:(NFFT-1)*delta_t;
%12个子载波的复数信号
carrier_dat = carrier_amp'.*exp(1i*2*pi*carrier_freq'*t+carrier_phi');
%信号相加,得到一个RB所对应的时域信号
one_RB_sig  = sum(carrier_dat);
%做傅里叶变换
Y           = fft(one_RB_sig,NFFT);
amp_y       = abs(Y);
norm_amp_y  = amp_y/NFFT;
%% 绘图========================================================================
subplot(121)
plot(t,real(one_RB_sig))
xlabel('time(s)');ylabel('amp')
title('时域波形');
subplot(122)
%换算成正负频率
freq_line   = [-NFFT/2:NFFT/2-1]*fs/NFFT;
plot(freq_line,[norm_amp_y(513:1024),norm_amp_y(1:512)])
xlim([-500 500]); ylim([-0.5 2]);
xlabel('freq(Hz)');ylabel('amp')
title('频域结果');

运行上述的matlab程序,可以得到时域和频域信号,可以看到经过FFT变换之后,有12个频率的信号,幅度分别为1。

RB的时频数据

通信中一般通过OFDM产生时域信号,即现有频域上每个RE的数据,然后做IFFT变换得到时域信号,时域信号在空间中传输,接收端通过FFT转换得到频域的RE数据,也就是每个频点上的幅度。上述从时域到频域的变换可以看作是接收的过程。

(3)载波频率

有了信道带宽,加上载波频率,就可以唯一标识某个LTE系统所在的频率范围,以频段

n1为例,下行频段范围为:2110MHz - 2170MHz,为60MHz的带宽,但是LTE系统最大支持的带宽是20MHz,因此就存在下述的情况:

频段和信道带宽

一个频段内存在多个信道,且信道之间的带宽可能是不同的,从上图可以看到,通过频段,带宽和载波频率三个值,可以确定一个无线频率的信号。载波频点号(EARFCN ),全称是(E-UTRA Absolute Radio Frequency Channel Number),对应绝对的无线频率信道号,在协议TS36.104中对应描述,最新协议取值范围为0~262143。二者对应的关系如下所示:

对应上下行的中心频率计算,0.1表示100KHz,即所有频带的信道栅格为100KHz,对应的参数在协议中可以查表得到,下图列举了部分DL和UL对应的参数取值:

载波频点号取值

按照频带1为例,当N_DL取值为100时,把参数带入进行计算,结果为:

若此时的带宽为5MHz,可以确定当前无线信号的频率范围如下所示:

无线信号频率

过上述的介绍,可以知道在同一个频段下LTE的无线频率信号(即频段+载波频率+带宽组成的无线信号)有多种。但是我们的手机(UE)并不知道基站是以哪种特定的频率进行发射的无线信号,因此UE需要对所有支持的频段进行扫描,搜索各个频点下的同步信号(PSS&SSS) 。

(4)时频结构

顾名思义,时频结构是时间和频率上的结构,而时间和频率就是无线资源,等同于一个二维的网格,横坐标是时间,纵坐标是频率。同一时间,不同频率称为FDD,同一频率,不同时间称为TDD,如下图所示:

时频结构

在FDD下,上下行分别使用不同的频段,如频段编号1,上行在2G以下,下行在2G以上,用户可以在同一个时刻点听和说。虽然在TDD下,上行和下行不是在同时发生的,但是二者时间上相差比较短,在毫秒级别,用户也可以同时听和说,二者都是通信中的全双工。

LTE在频率上的结构,可以参考带宽中对RB的描述。为了方便理解LTE系统在时间上的层次结构,可以用时钟来类比:

就像我们需要采用北京时间作为标准,在不同的时间做不同的事情,例如工作、吃饭、睡觉等。UE也需要有这样一个时间指示自己需要在什么样的时间做什么任务,这个时间就是基站在时间上的4个层次结构,如下所示:

LTE时间层次

1个无线帧的时间是10ms,也就是我们的秒表跳动一下,已经过了100个无线帧,14000个symbol符号,这些符号中承载着UE发送和接收的数据。

 

PSS&SSS的产生

(1) PSS&SSS概述

PSS全称(Primary Synchronization Signal),即主同步信号,用来传输N_ID(2),SSS全称(Secondary Synchronization Signal),即辅同步信号,用来传输N_ID(1),通过二者可以计算物理小区ID(Physical Cell Identities,PCI),计算公式如下所示:

物理小区ID,是UE用来区分周围小区的标识。如果一个UE在某个位置能搜到3个小区的信号,就必须能通过某种方式来区分这些小区,区分的方法就是,不同的小区发送不同的同步信号,不同的同步信号有编号,这个编号就是PCI,如下所示:

物理小区ID示意

同步信号不仅可以获得物理小区的ID,还可以通过对PSS&SSS的检测,初步获得时间上的同步。

(2) PSS&SSS位置

LTE中PSS和SSS的位置,在FDD模式和TDD模式下,位置是不同的,因此通过初始的PSS和SSS检测,可以知道当前是以那种模式发送的信号。

PSS和SSS都是以5ms为周期,在一个无线帧(10ms)内出现两次,两次PSS是完全相同,但是SSS是不同。

FDD下,PSS和SSS在子帧0和5中发送,SSS在PSS的前一个symbol,但是两个子帧中的SSS是不同的。

TDD下,PSS在1和6子帧,SSS在0和5子帧,SSS在PSS的前三个symbol上,同样两个子帧中的SSS是不同的。

因此通过检测PSS和SSS可以获得子帧号,时隙号和ofdm号,区分是FDD还是TDD,但是无法获得无线帧号,无线帧号是继PSS&SSS之后的PBCH中获得。

(3) PSS内容

主同步信号(PSS)中的主要内容是ZC(Zadoff-chu)序列,长度为62个码片。PSS的ZC序列产生和资源映射在协议36.211的第6章中有具体的描述,产生过程如下所示:

从公式中可以看到d(n)的取值只与u有关系,u的取值如下所示:

根据上述公式,我们就可以产生PSS中传输的内容,一共62个数据,产生PSS的代码如下所示:

function [d_u_NID] = pss_seq_gen(NID)
%跟序列选择
u_shift = [25 29 34];
d_u = [];
%根据公式产生d(n)
for n = 0:61
    u = u_shift(NID+1);
    if n <= 30
        d = exp(-j*pi*u*n*(n+1)/63);
    else
        d = exp(-j*pi*u*(n+1)*(n+2)/63);
    end;
        d_u = [d_u d];
end;
%输出NID对应的d(n)
d_u_NID = d_u';
end 

通过选择不同的跟序列,产生不同的结果,运行上述代码,结果如下所示:

不同NID的结果

产生了PSS之后,需要把对应的数据映射到频率资源上,主同步信号只占用中心频点的6个RB带宽的子载波,6个RB对应72个子载波,两边各5个用于频率保护,一共占用62个子载波,映射的过程如下所示:

k取值范围为{5,-4,……,-1,0,1,2,……,66},如下的方式把数据填入对应的RE中:

其中,中间绿色表示的是62个PSS数据,依次映射。

(4) SSS内容

辅同步信号(SSS)的主要内容是m序列的组合,长度为62个码片,主要原因是ZC序列的数量还不够多。62个码片是由2个长度为31的伪随机序列组合而成,这两个伪随机序列来源于同一个m序列,通过m0和m1不同循环移位长度得到。TS36.211中一共定义了168种m0和m1的组合,与NID(1)一一对应,如下所示:

NID(1)与m0和m1的关系

SSS的产生过程如下所示:

SSS计算过程

从公式中可以看到,一共包括三个m序列,奇偶交替在频域上映射,d(n)的取值是由m0和m1决定的,m0和m1的计算如下所示:

m0和m1计算过程

SSS产生是根据NID(1)计算得到m0和m1,二者一一对应。SSS解析的时候,是根据m序列的移位得到m0和m1,然后根据表格查表,可以得出NID(1),另外三个序列c(n),s(n),z(n)的计算如下所示:

序列产生过程

根据上述公式,我们就可以产生SSS中传输的内容,一共62个数据,映射方式同PSS一样,映射到62个RE资源上,产生SSS的代码如下所示:

function [sss_dn] = sss_seq_gen(NID_1,NID_2,subframe)
%% 计算m0和m1
q_prime = floor(NID_1/30);
q = floor(((NID_1+q_prime*(q_prime+1)/2))/30);
m_prime = NID_1 + q *(q+1)/2;
m0 = mod(m_prime, 31);
m1 = mod(m0 + floor(m_prime/31)+1,31);
%% 计算c(n),s(n),z(n)序列
sss_dn = zeros(1,62);
d_2n   = zeros(1,62);
d_2n_1 = zeros(1,62);
%0表示产生c(n)
%1表示产生s(n)
%2表示产生z(n)
cn_seq = m_seq_gen(0);
sn_seq = m_seq_gen(1);
zn_seq = m_seq_gen(2);
%0子帧上的数据
n=0:30;
if(subframe == 0)
    %偶数RE上的数据
    s_m0   = sn_seq(mod((n+m0),31)+1);
    c0     = cn_seq(mod(n+NID_2,31)+1);
    d_2n   = s_m0.*c0;
    %奇数RE上的数据
    s_m1   = sn_seq(mod((n+m1),31)+1);
    c1     = cn_seq(mod(n+NID_2+3,31)+1);
    z1_m0  = zn_seq(mod(n+mod(m0,8),31)+1);
    d_2n_1 = s_m1.*c1.*z1_m0; 
else if(subframe == 5)
    %偶数RE上的数据  
    s_m1   = sn_seq(mod((n+m1),31)+1);
    c0     = cn_seq(mod(n+NID_2,31)+1);
    d_2n   = s_m1.*c0;
    %奇数RE上的数据
    s_m0   = sn_seq(mod((n+m0),31)+1);
    c1     = cn_seq(mod(n+NID_2+3,31)+1);
    z1_m1  = zn_seq(mod(n+mod(m1,8),31)+1);
    d_2n_1 = s_m0.*c1.*z1_m1;       
    end 
end 
sss_dn(1:2:end-1) = d_2n;
sss_dn(2:2:end)   = d_2n_1;
end
%%=========================================
%%function m_seq_gen
%%=========================================
function [m_seq] = m_seq_gen(mod_sel)
%定义参数
x_seq = zeros(1,31);
m_seq = zeros(1,31);
x_seq(1:5)=[0 0 0 0 1]; %赋初值
%0:表示产生c(n)对应的m序列
if mod_sel == 0
   for i = 0:25
       x_seq((i+5)+1) = mod(x_seq(i+3+1)+x_seq(i+1),2);
    end  
end 
%1:表示产生s(n)对应的m序列
if mod_sel == 1
    for i = 0:25
        x_seq((i+5)+1) = mod(x_seq(i+2+1)+x_seq(i+1),2);
    end
end 
%2:表示产生z(n)对应的m序列
if mod_sel == 2
    for i = 0:25
        x_seq((i+5)+1) = mod(x_seq(i+4+1) + x_seq(i+2+1) + x_seq(i+1+1)+ x_seq(i+1),2);
    end;
end 
m_seq = 1-2*x_seq;
end

运行上述代码,产生的SSS序列如下所示:

SSS内容

二. PSS&SSS的检测

(1) PSS检测

进行主同步信号(PSS)检测,可以找到帧的开始,并建立频率同步。它是通过将接收到的信号与本地生成的PSS序列相关来完成的。可以使用两种主要的方法:时域相关和频域相关,两种方法的处理流程如下所示:

PSS检测流程

从流程上看,两者方法基本一致,区别在于相关的处理是在时域处理还是在频域处理。假设接收到的PSS是以NID(2)=0产生的,分别与三个序列做相关,如下所示:

序列相关

可以看到NID=0的两个序列做相关,会有一个很高的峰值,两个不同的NID做相关处理,幅度比较低。

序列相关可以调用matlab的函数,如下所示:

%调用matlab中的相关函数
Hxcorr = dsp.Crosscorrelator;
%NID0与NID0,NID1,NID2三个序列做相关
XCorr_0_0 = step(Hxcorr,d_u_NID0,d_u_NID0);
XCorr_0_1 = step(Hxcorr,d_u_NID0,d_u_NID1);
XCorr_0_2 = step(Hxcorr,d_u_NID0,d_u_NID2);

(2) 频偏估计和补偿

另外通过PSS的检测还可以完成对频率偏移的估计,这种偏移是由于发射机-接收机振荡器频率失配或多普勒效应引入的载波频率偏移。通过比较接收到的序列和3GPP算法生成的PSS序列,可以完成频率偏移的估计,对应的代码和步骤如下所示:

def frequency_offset_estimation(received_pss, expected_pss, sample_rate = 30.72e6):
    #计算接收到的PSS序列和通过3GPP算法产生的PSS序列之间的相位差
    phase_difference = np.angle(np.dot(received_pss, np.conj(expected_pss)))
    #62个PSS序列的总时间
    time_duration_pss = 62 / sample_rate
    #将总的相位差转换为频率偏移
    frequency_offset = (phase_difference / (2 * np.pi)) / time_duration_pss
    return frequency_offset

将计算出的相位差转换到频域中,以估计频率偏移。因子2π将相位从弧度转换为周期,62是LTE中用于PSS的子载波数量,sample_rate是对PSS信号进行采样的速率。

相位和频率直接相关:相位随时间的变化就是频率。在频率偏移估计函数中,相位差除以符号的持续时间(即子载波的数量除以采样率),得出相位变化率或频率偏移。

换句话说,该方程计算每个采样块的平均相位变化,然后将其转换为Hz以表示频率偏移。该频率偏移表示接收到的PSS和期望的PSS之间的频率差。

有了频率偏移之后,可以对其他的数据进行补偿,补偿的过程如下所示:

def correct_frequency_offset(signal, frequency_offset, sample_rate):
    signal = np.array(signal, dtype=np.complex128)
    time = len(signal) / sample_rate
    #通过频率偏移,计算相位偏移
    correction = np.exp(-1j * 2 * np.pi * frequency_offset * time)
    #对其他的数据进行相位补偿
    corrected_signal = signal * correction
    return corrected_signal

这里面的校正使用的因子,是估计出来的频偏,与原始信号相乘,使用-j,用于把信号沿偏移的相反方向旋转,达到校正的目的。

(3) SSS检测

辅同步信号(SSS)检测,需要PSS检测和频率误差估计的准确结果,检测过程如下所示:

SSS序列检测过程

相关处理的算法与PSS的一致,区别在于SSS需要用到PSS的处理结果,PSS是需要处理的序列个数比较少,为3个,SSS需要处理的序列为168个,具体实现上也会有差别。

 

MIB内容

来源 https://zhuanlan.zhihu.com/p/649780760

一. MIB介绍

(1) MIB概述

为了正常接入小区,正确接收到基站发送的信号内容,UE需要通过如下参数,获得信号的时频特性

信号时频特性

一共7个参数,通过PSS和SSS已经获得了其中的5个,剩余2个参数带宽和无线帧号,通过解析MIB中的字段获得,就可以完成对基站下行信号的同步。

MIB全称是MasterInformationBlock,主信息块,在基站测是不断的重复发送,MIB消息在PBCH(Physical Broadcast Channel)信道中传输,不使用RNTI加扰。

在解析PSS和SSS的时候,只需要根据特定的序列去做同步,进行判断,不需要解析具体的内容,但是从PBCH开始,就需要解析基站发送的具体内容。UE只有先解析到MIB,利用MIB中的参数,才能进一步解析更多的内容。

(2) MIB内容

LTE系统的MIB一共有24比特,包含如下信息

MIB中包含的信息

其中带宽和SFN是LTE时频特性种的两个参数,PHICH是指物理HARQ 指示信道,用来反馈基站是否正确接收到了UE发送的上行数据,同时该参数也会影响PDCCH信道的解析,在控制信道中会具体介绍PHICH的内容。

(3) MIB的时频位置

在时域上PBCH位于每个系统帧的子帧0的第二个slot的前4个ofdm符号上,这里就用到了LTE的时间上的层次结构,如下所示:

MIB时域位置

在频域上占据72个中心子载波,也就是6个RB,跟PSS和SSS所占用的频域资源相同,PBCH的时频位置如下所示:

MIB频域位置

MIB信息在时间上是以40ms为周期重复发送,40ms内,会在4个子帧上发送四次,其中三次是重复发送,SFN的低2bit存在于MIB的加扰序列中,可以根据加扰方式确定SFN号,如下所示:

二. MIB的处理

PBCH信道中一共包含24bit的MIB信息,信息从产生到发送需要经过编码等一系列的流程,在协议TS36.212中都有描述,如下所示:

MIB处理过程

(1) CRC计算

LTE中定义了三种mask序列,分别对应基站发射天线为1,2,4的情况,如下所示:

天线mask序列

CRC的计算在TS36.212的5.1.1章节描述,对于L=16的CRC生成多项式如下所示:

有了生成多项式,可以计算16bit的CRC,然后根据天线个数,选择16bit的CRC mask,与CRC校验bit,做异或,组成新的40bit信息,如下所示:

CRC计算过程

(2) 信道编码

在协议TS36.212的5.1.3章节规定了PBCH的编码方案为咬尾卷积编码(Tail biting convolutional coding),码率为1/3,编码过程如下所示:

卷积编码

其中Ck为加入CRC之后的40bit MIB内容。编码器的初始值设置为,信息bit输入流的最后6位信息

40bit的信息通过上述的卷积编码,得到120bit的编码信息。

(3) 速率匹配

由于编码bit和资源bit的大小不同,需要把编码之后的数据映射到LTE的时频资源上,所以需要速率匹配,速率匹配在TS36.212的5.1.4.2章节描述,过程如下所示:

速率匹配过程

其中,dk是信道编码输出的结果,中间需要经过子块交织得到vk,交织的序列在协议中的描述如下所示:

上述的交织表格同时也适用于PDCCH的交织,交织之后的通过比特选择,最终得到速率匹配之后的ek,协议36.211中定义,在正常CP下E=1920,扩展CP下E=1728,通过E值,可以得到速率匹配的结果。具体流程如下所示:

从上图可以看出速率匹配一共分为四个步骤:

(1)根据交织序列产生交织矩阵;

(2)按照行进列出的原则,产生交织结果vk;

(3)根据三组编码结果产生三组vk并按顺序生成wk;

(4)根据E的大小进行速率匹配ek,完成速率匹配。

(4) 加扰

加扰即在速率匹配之后的数据上和一个固定序列做模2运算,运算过程如下所示:

其中b(n)是速率匹配之后的数据,c(n)是一个长度为31的gold序列,计算过程为:

在上述公式中只需要知道cell_id,Nc就可以计算加扰序列c(n)

cell_id:表示小区id,在PSS和SSS搜索中计算得到。

Nc:为固定参数1600。

(5) 调制和预编码

PBCH使用QPSK调制,QPSK的调制映射如下所示:

每2个信息bit组成一个QPSK的符号,调制时候的符号个数在正常CP下symbol_num = 960,扩展CP下symbol_num = 864。

PBCH使用{0,1,2,3}四端口发送数据,可支持三种发射方式,天线个数为1,2,4,不同天线个数的层映射如下所示:

层映射

根据发射天线个数,把数据映射为1层,2层和4层三种情况,然后对映射之后的数据做预编码,预编码的计算在协议TS36.211的6.3.4.3章节,过程如下所示:

预编码过程

上图分别对应2和4天线两种情况下,不同天线的发送数据,当天线数为1的时候,按顺序发送数据d就可以了。

(6) 资源映射

 

每个天线对应一组资源映射,映射的数据不同,但过程都是相同,资源映射的过程如下所示:

资源映射

在NCP下,一共960个QPSK符号的数据,分别映射到4个ofdm上,由于存在小区参考信号CRS,前两个symbol,每个symbol上48个数据,后两个symbol上,每个symbol上72个数据,一共是48*2+72*2,240个数据。

在ECP下,一共是864个QPSK数据,映射到4个ofdm上,由于前两个和最后一个符号上都存在小区参考信号,所以三个symbo上是48个数据,一个symbol上是72个数据,一共是48*3+72,216个数据。

RB上的资源位置

三. MIB的编码

根据上述的处理过程,使用matlab编码,如下

%% 产生MIB内容
bw              = [0 0 0] ;%带宽1.4M
phi             = [0 0 0] ;%normal,Ng=1/6
sfn             = num2bin(4);%sfn=4
null            = zeros(1,10); 
mib_code        = [bw,phi,sfn,null];
%% CRC计算
ant1            = zeros(1,16);%ant mask
ant2            = ones(1,16);%ant mask
ant4(1:2:15)    = 0;
ant4(2:2:16)    = 1;%ant mask
crc_gen         = [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1];%crc的生成多项式
crc_bits        = crc16(mib_code,crc_gen);
crc_res         = xor(crc_bits,ant1);
crc_attach_bits = [mib_code,crc_res];
%% 信道编码
G0              = [1,0,1,1,0,1,1];
G1              = [1,1,1,1,0,0,1];
G2              = [1,1,1,0,1,0,1]; %%生成多项式
m_add0          = [crc_attach_bits,0]; 
S_reg           = [m_add0(1),fliplr(crc_attach_bits(end-7+2:end))];%寄存器初值
len             = length(crc_attach_bits);
dk_0            = zeros(1,40);
dk_1            = zeros(1,40);
dk_2            = zeros(1,40);
for i=1:len
    %计算编码结果
    dk_0(i)     = mod(S_reg*G0',2);
    dk_1(i)     = mod(S_reg*G1',2);
    dk_2(i)     = mod(S_reg*G2',2);
    %更新寄存器值
    S_reg       = [m_add0(i+1) S_reg];
    S_reg(end)  = [];
end 
dk              = [dk_0 dk_1 dk_2];
%% 交织
interl_line     = [1, 17, 9, 25, 5, 21, 13, 29, 3, 19, 11, 27, 7, 23, 15, 31,...
                   0, 16, 8, 24, 4, 20, 12, 28, 2, 18, 10, 26, 6, 22, 14, 30]
interl_table    = [interl_line;interl_line+32]-23;%去除空白Null部分
interl_index    = interl_table(find(interl_table>0));
vk_0            = dk_0(interl_index);
vk_1            = dk_1(interl_index);
vk_2            = dk_2(interl_index);
vk              = [vk_0 vk_1 vk_2];
%% 速率匹配
%normal
for i = 1:16
    normal_derm_ek((i-1)*120+1:i*120) = vk;
end 
%extended
for i = 1:14
    extend_derm_ek((i-1)*120+1:i*120) = vk;
end 
extend_derm_ek(1681:1728)=vk(1:48);
%% 加扰
elem_E          = 1920;
cell_id         = 1;
cn_seq          = cn_seq_gen(cell_id,elem_E);
scram_dat       = mod(normal_derm_ek+cn_seq,2);
%% 调制和预编码,ant=1
qpsk_dat = reshape(scram_dat,2,[]);
for i = 1:length(qpsk_dat)
    if(qpsk_dat(1,i)==0 && qpsk_dat(2,i)==0)
        sym_dat(i) = complex(1/sqrt(2),1/sqrt(2));
    end 
    if(qpsk_dat(1,i)==0 && qpsk_dat(2,i)==1)
        sym_dat(i) = complex(1/sqrt(2),-1/sqrt(2));
    end 
    if(qpsk_dat(1,i)==1 && qpsk_dat(2,i)==0)
        sym_dat(i) = complex(-1/sqrt(2),1/sqrt(2));
    end 
    if(qpsk_dat(1,i)==1 && qpsk_dat(2,i)==1)
        sym_dat(i) = complex(-1/sqrt(2),-1/sqrt(2));
    end 
end 
%%====================================================
%function 
%%====================================================
function [crc_bits] = crc16(mib_code,crc_gen)
    data     = mib_code; %输入编码数据
    R        = length(crc_gen)-1; %冗余码长为生成多项式长度减1
    %为数据右边补K个0,然后用deconv计算数据多项式除以生成多项式
    %商是q(长度16),余数是r(长度16+R)
    [q,r]    = deconv([data zeros(1,R)],crc_gen);
    r        = mod(r(end-R+1:end),2); %取余数的最后R位mod2运算
    crc_bits = r; 
end 
function [bin_result] = num2bin(num)
    %把一个十进制数转化为二进制序列
    num_temp   = floor(num/4);
    bin_temp   = dec2bin(num_temp);
    bin_result = zeros(1,8);
    len        = length(bin_temp);
    for i = 1:len
        bin_result(8-i+1) =  str2num(bin_temp(len-i+1));
    end 
end 

另外附上matlab自带的LTE工具箱对MIB信息的产生过程,可以用来对比计算的结果

%%定义参数
enb.CyclicPrefix     = 'Normal';
enb.PHICHDuration    = 'Normal';
enb.Ng               = 'Sixth';
enb.NDLRB            = 6;
enb.CellRefP         = 1;
enb.DuplexMode       = 'FDD';
enb.NCellID          = 1;
enb.NSubframe        = 0;
enb.CFI              = 1;
enb.NFrame           = 4;
PHICH_Group_Index    = 0;
PHICH_Sequence_Index = 1;
HARQ_Indicator_Value = 0; % 0 = NACK, 1 = ACK
%产生MIB内容,并进行交织,编码等
mib_bits             = lteMIB(enb);
bch_cw               = lteBCH(enb,mib_bits);
mib_bits_crc         = lteCRCEncode(mib_bits,'16',0);
bch_Econde           = lteConvolutionalEncode(mib_bits_crc);
bch_Econde_RM        = lteRateMatchConvolutional(bch_Econde,length(bch_cw));
%映射到symbol上
pbch_sym             = ltePBCH(enb,bch_cw);

 

下行控制信道(一)

来源 https://zhuanlan.zhihu.com/p/651216320

下行控制信道包括以下三种:

下行控制信道

一. LTE的资源组

在介绍各下行控制信道之前,先看一下LTE的资源组。在频域上,一个子载波称为一个RE,4个RE组成一个REG,9个REG组成一个CCE,如下所示:

LTE资源组

其中,灰色部分是CRS,包含CRS的RB,有两个REG,不包含CRS的RB有3个REG,灰色的9个REG组成一个CCE,信道PCFICH和PHICH是以REG为单位进行资源映射的,PDCCH是以CCE为单位进行资源映射的,最多占用前4个symbol的数据。

二. PCFICH

(1) PCFICH介绍

PCFICH携带的信息CFI为2bit,取值范围为1~3,另外PHICH的duration配置也会限制CFI的取值范围,不同带场景下CFI的取值和表示的内容如下所示:

另外,CFI的具体取值和对应的场景在协议TS36.211的6.7章节有具体的描述,其中PHICH的duration在MIB中获得,为1bit表示normal和extended两种类型,对应占用的ofdm符号个数如下所示:

(2) PCFICH处理

PCFICH的处理在TS36.212的第5章节描述,分为五个部分,如下所示:

PCFICH处理过程

(1) CFI信道编码

CFI的信道编码十分简单,协议中定义了三种code word的取值,对应32bit,如下所示:

CFI信道编码

当CFI取不同的值,选择对应的码字就可以了。

(2) 加扰

CFI的加扰序列同PBCH的加扰序列相同,区别在于使用的初值,如下所示:

加扰过程

(3) 调制、映射

32bit的CFI信息,通过QPSK,得到16个符号,层映射和预编码同PBCH相同,另外PCFICH应在与PBCH相同的一组天线端口上传输,天线端口的个数,取值为{1,2,4}。一共16个符号,每个REG上映射4个符号,需要把CFI信息映射到4个REG上,PCFICH的资源映射只在symbol0上进行映射,4个REG的位置计算和映射如下所示:

PCFICH调制映射

其中k值计算得到的为每个reg里的第一个RE的位置,当k值超过带宽所包含的RE数,需要对RE取模。

(3) PCFICH编码

根据上述过程,对PCFICH处理过程进行编码,如下所示:

%% 产生32bit的CFI信息
CFI      = 2;
CFI_sig1 = [0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1];
CFI_sig2 = [1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0];
CFI_sig3 = [1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1];
CFI_sig  = [CFI_sig1;CFI_sig2;CFI_sig3];
CFI_bits = CFI_sig(CFI,:);
%% 对CFI进行加扰
elem_E    = 32;
ns        = 2;
cell_id   = 3;
c_init    = (floor(ns/2)+1)*(2*cell_id+1)*2^9+cell_id;
[cn_seq]  = cn_seq_gen(c_init,elem_E);
scram_dat = mod(CFI_bits+cn_seq,2);
qpsk_dat  = reshape(scram_dat,2,[]);
for i = 1:length(qpsk_dat)
    if(qpsk_dat(1,i)==0 && qpsk_dat(2,i)==0)
        sym_dat(i,:) = complex(1/sqrt(2),1/sqrt(2));
    end 
    if(qpsk_dat(1,i)==0 && qpsk_dat(2,i)==1)
        sym_dat(i,:) = complex(1/sqrt(2),-1/sqrt(2));
    end 
    if(qpsk_dat(1,i)==1 && qpsk_dat(2,i)==0)
        sym_dat(i,:) = complex(-1/sqrt(2),1/sqrt(2));
    end 
    if(qpsk_dat(1,i)==1 && qpsk_dat(2,i)==1)
        sym_dat(i,:) = complex(-1/sqrt(2),-1/sqrt(2));
    end 
end 
%% 资源映射位置
N_sc_rb  = 12;
N_dl_rb  = 6;
k_base   = N_sc_rb/2*mod(cell_id,2*N_dl_rb);
k0       = mod(k_base,N_sc_rb*N_dl_rb);
k1       = mod(k_base + floor(N_dl_rb/2)*N_sc_rb/2,N_sc_rb*N_dl_rb);
k2       = mod(k_base + floor(2*N_dl_rb/2)*N_sc_rb/2,N_sc_rb*N_dl_rb);
k3       = mod(k_base + floor(3*N_dl_rb/2)*N_sc_rb/2,N_sc_rb*N_dl_rb);
k=[k0,k1,k2,k3]+1
%% matlab EDA Tool
enb.CyclicPrefix = 'Normal';
enb.NDLRB        = N_dl_rb;
enb.CellRefP     = 1;
enb.DuplexMode   = 'FDD';
enb.NCellID      = cell_id;
enb.NSubframe    = floor(ns/2);
enb.CFI          = CFI;
cfi_cw           = lteCFI(enb);
pcfichPrbsSeq    = ltePCFICHPRBS(enb,length(cfi_cw));
pcfich_sym       = ltePCFICH(enb,cfi_cw);
pcfich_sym_ind   = ltePCFICHIndices(enb,{'1based','reg'})'

三. PHICH

(1) PHICH介绍

PHICH用于对应UE上行PUSCH传输数据的回应,分为ACK/NACK,表示基站是否正确接收到UE传输的上行数据,在每个TTI(Transmission Time Interval)中,每个上行TB对应一个PHICH。UE会在指定时刻的指定位置去解PHICH信息。

协议TS36.213中描述,在FDD下,上行HARQ反馈是在固定n+4关系,但是在TDD模式下,上下行子帧配置在SIB1中,用来告诉UE的上下行配比,一个子帧内的上下行配比一共存在7种情况,如下所示:

TDD上下行配比

其中下行子帧和特殊子帧上的数据表示当前子帧内有几个上行子帧的反馈信息,每一种配置下,二者数字之和为上行子帧的个数。

上行子帧中的数字表示当前子帧的数据,基站的HARQ反馈是在之后的第几个子帧上,以配置0为例,如下所示

小区HARQ反馈示意图

多个PHICH可以映射到相同的RE集合中发送,这些PHICH就组成了一个PHICH group,同一个PHICH group中的PHICH通过不同的正交序列来区分。一个小区内可用的PHICH group的个数计算如下所示:

PHICH_group的计算

其中Ng的值来自于MIB的解析,N_RB表示下行的系统带宽,mi表示下行子帧中承载PHICH的个数,TDD模式下可以在上述表格中可以查找,FDD的时候mi固定为1。通过公式,可以计算不同带宽下随着Ng的变化得到N_PHICH_group的值。

Ng越大,表示PHICH group数越多,可以复用的UE数也就越多,但是码间干扰也就会越大,解调性能也会越差,同时,控制区域内可用于PDCCH的资源数也越少。

在正常的循环前缀而言,一个PHICH group支持8个正交序列,即一个PHICH group中存在8个PHICH 复用,对扩展的循环前缀而言,一个PHICH group支持4个正交序列,4个PHICH复用,如下所示:

通过上述的分析,确定一个PHICH的位置,需要通过{n_PHI_group,n_PHI_seq}两个参数,这两个参数的计算也在TS36.213中描述,如下所示:

在跨载波调度的场景下,CC1的控制信息放在CC0上传输,同时CC1的PHICH也需要在CC1上解析,这时,上述参数可能都相同,导致PHICH的冲突。

为了降低冲突,基站可以把不同CC间的n_DMRS可以配置成不同,造成PHICH索引,也可以为不同CC配置不同起始PRB的PUSCH资源。

(2) PHICH处理

PHICH的处理在协议的TS36.211的第6章节描述,处理过程如下所示:

PHICH处理过程

(1)信道编码和调制

PHICH的编码如下所示:

只需要对1bit的PHI信息做三次重复,就完成了编码过程。信息的调制方式为BPSK,调制映射如下所示:

(2)正交序列相乘

有了信息bit之后,需要根据PHICH的正交序列和加扰对信息进行处理,处理过程如下所示:

PHICH的处理

其中,加扰序列和PCFICH的相同,通过序列相乘和加扰的处理之后,得到NCP下12bit长度和ECP下6bit信息长度

(3) 层映射和预编码

PHICH的层映射同PCFICH和PBCH的相同,在TS36.211的6.3.3.3章节描述,在{1,2}天线端口下预编码同PCFICH和PBCH相同,在4天线发送的时候不同,如下所示:

PHICH层映射和预编码

PHICH信息使用3个reg承载,在4天线发送的时候,reg0和reg2采用相同预编码方式,reg1采用另外的一种预编码方式,如上图所示。

(4) 层映射和预编码

PHICH的资源映射分为以下几个步骤:

1) 对频域的资源组进行编号

�� 为除了pcfich占用资源外的总资源数,对这些资源进行从0到 ��−1 进行编号。

2) 初始 �′=0 ,PHICH的映射单元编号

3) 计算时域symbol的位置,i=0,1,2表示phi的3组reg

phi占用的时域symbol的个数和位置,分为以下几种情况:

扩展PHI的特殊情况包括以下三种:

①扩展PHI duration下的MBSFN子帧

②扩展PHI duration下的子帧1和子帧6(TDD)

③扩展PHI duration下的特殊子帧的DwPTS持续时间相同的持续时间子帧

4) 计算频域reg的位置,i=0,1,2表示phi的3组reg

phi频域位置的计算分为两种情况:

①在正常PHI duration的情况

②在扩展PHI duration的一般情况

③在扩展PHI duration的特殊情况下

(3) PHICH编码

根据上述处理过程,对PHICH进行编码如下所示:

%% 产生phi相关参数
PHI              = 1;             %PHI信息
Ng_idx           = 3;             %Ng的选择
ECP_flag         = 0;             %是否为ECP 
N_rb_dl          = 6;             %下行带宽
Ng_table         = [1/6,1/2,1,2]; %Ng取值
N_SF_PHICH_cp    = [4 2];         %通过ECP选择
I_prb_ra         = 0;             %PUSCH所在最低PRB索引
n_DMRS           = 0;             %pdcch传输
I_phich          = 0;             %区别同一下行的两个PHI
%% 计算PHI相关的参数
N_phi_group_ncp  = ceil(Ng_table(Ng_idx)*N_rb_dl);
N_phi_group_ecp  = 2*ceil(Ng_table(Ng_idx)*N_rb_dl);
N_phi_group_cp   = [N_phi_group_ncp,N_phi_group_ecp];
N_SF_PHICH       = N_SF_PHICH_cp(ECP_flag+1);
N_phi_group      = N_phi_group_cp(ECP_flag+1);
seq_num          = mod((floor(I_prb_ra/N_phi_group)+n_DMRS),2*N_SF_PHICH);
n_phich_seq      = seq_table(ECP_flag,seq_num);
n_phich_group    = mod((I_prb_ra+n_DMRS),N_phi_group)+ I_phich*N_phi_group;
%% PHI信息处理过程
elem_E           = 12;
ns               = 0;
cell_id          = 0;
c_init           = (floor(ns/2)+1)*(2*cell_id+1)*2^9+cell_id;
PHI_bits         = PHI*ones(1,3);
w_i              = n_phich_seq;
c_i              = cn_seq_gen(c_init,elem_E);
z_i              = PHI_bits*complex(1/sqrt(2),1/sqrt(2));
for i=0:11
    phi_sym_dat(i+1,:)= w_i(mod(i,N_SF_PHICH)+1)*(1-2*c_i(i+1))*z_i(floor(i/N_SF_PHICH)+1);
end 
%% matlab EDA Tool
enb.CyclicPrefix     = 'Normal';
enb.PHICHDuration    = 'Normal';
enb.Ng               = 'One';
enb.NDLRB            = 6;
enb.CellRefP         = 1;
enb.DuplexMode       = 'FDD';
enb.NCellID          = 0;
enb.NSubframe        = 0;
enb.CFI              = 1;
PHICH_Group_Index    = 0;
PHICH_Sequence_Index = 0;
HARQ_Indicator_Value = 0; % 0 = NACK, 1 = ACK
phichPrbsSeq         = ltePHICHPRBS(enb,phichInfo.NRE);
phichSymbol          = ltePHICH(enb,[PHICH_Group_Index,PHICH_Sequence_Index,HARQ_Indicator_Value]);

 

下行控制信道(二)

来源 https://zhuanlan.zhihu.com/p/652644551

 

四. PDCCH

(1) PDCCH介绍

PDCCH(Physical Downlink Control CHannel)物理下行控制信道,携带的信息称为DCI (Downlink Control Information)下行控制信息。DCI是基站发送用来调度UE的各种信息,例如:频域占用的资源块,时域上监听的位置,调制方案的选择等。在协议36.212的5.3.3章节,对各种DCI format及其携带的信息进行了具体的描述,下面列举了部分的DCI信息和描述。

DCI类型

在PDCCH中最多可以配置8个DCI,这些DCI可以具有6种格式:

(1) 1种用于UL调度的格式

(2) 2种用于UL功率控制的格式

(3) 1种用于MIMO DL调度的格式

(4) 2种用于非MIMO DL调度的格式

下图展示了DCI的调度的一种情况:

一个PDCCH只能携带一个某种format的DCI,一个小区可以在上行和下行同时调度多个UE,每个调度信息在独立的PDCCH上传输

(2) PDCCH的搜索空间

一个PDCCH在n个连续的CCE上传输,每个CCE由9个REG组成,PDCCH有4种格式{0,1,2,3}分别表示聚合等级{1,2,4,8}表示一个PDCCH占用CCE的个数,在协议TS36.211的第6.8.1章节描述,如下所示:

PDCCH在CCE索引上是连续的,但是在物理传输的REG上是非连续的,如下所示:

基站会根据信道质量等因素来决定某个PDCCH使用的聚合等级。例如某个下行信道质量很好的UE,使用AL=1的PDCCH发送,位于小区边缘,信道质量很差的UE,则可能需要使用AL=8的PDCCH发送,达到足够的健壮性。

UE需要监听的PDCCH 侯选位置的集合称为搜索空间,搜索空间分为公共搜索空间和UE特定的搜索空间。

在搜索空间内,UE需要根据所要监听的DCI format来尝试解码该集合种的每一个PDCCH,搜索空间内PDCCH的候选位置个数在协议TS36.212的9.1.1章节给出,如下所示:

在搜索空间内,某个PDCCH candidate m所占用的CCE通过如下的公式计算:

从公式可以看出,搜索空间的位置只与RNTI和子帧号ns相关,下图展示了搜索空间的一个例子,UE搜索空间可以和公共搜索空间重叠。

(3) PDCCH盲检

DCI有多种格式,如上述中DCI format介绍,但UE事先并不知道接收到的PDCCH携带的是哪种DCI,也不知道在哪个PDCCH candidate中传输,所以UE必须进行PDCCH盲检,来接收对应的DCI。

PDCCH的盲检可以分为两个过程,如下所示:

过程一:确定PDCCH所占用的资源数

在解析PDCCH之前,需要先解析PSS/SSS,PBCH,PCFICH以及PHICH,具体内容可以参考前几篇的文章内容介绍,解析流程如下所示:

通过频域带宽和时域ofdm符号,可以确定控制信道的总的资源个数,然后减去PCFICH和PHICH占用的reg数,剩余的为PDCCH占用的资源数。

过程二:进行PDCCH盲检

虽然UE不知道接收的PDCCH携带的是哪种格式的DCI,但是UE知道自己处于何种状态以及在该状态下期待接收到的DCI信息,例如:

(1) 在IDLE态,UE期待收到Paging信息

(2) 发起上行随机接入,UE期待收到RAR

(3) 在有上行数据发送时期,期待收到UL Grant等

在盲检之前,UE已知和需要检测的信息如下所示:

其中,搜索空间和RNTI可以通过接收先前信道的信息计算获得,传输模式在协议TS36.213的7.1章节定义,下表是部分相关信息

UE可以通过自身所处的状态和传输模式,判断当前需要检测的DCI类型,然后根据RNTI加扰类型,判断是否为基站发送给自己的信息,但是UE不知道基站是以哪种聚合等级发送的PDCCH,所以会把各种可能都尝试一遍,如果CRC校验成功,那么UE就知道这个信息是发送给自己的,从而进一步解析出DCI的内容

(4) PDCCH处理

PDCCH的处理在协议TS36.211和TS36.212中描述,具体的处理流程和PBCH的类似,包括以下几个部分:

(1) 计算CRC

PDCCH的CRC生成多项式和PBCH的相同,都为16bit的CRC,公式如下:

信息CRC计算的过程如下所示:

其中ant mask是UE的发送天线选择,只有1bit有效,在协议TS36.212的5.3.3.2中描述

(2) 信道编码

PDCCH的编码过程同PBCH相同为咬尾卷积编码,码率为1/3,编码过程如下所示:

和PBCH不同的是,PDCCH输入的信息bit不是固定的长度,假设输入的长度为K,输出的长度为D,D=3*K。

(3) 速率匹配
PDCCH的速率匹配同PBCH相同,在协议TS36.212的5.1.4.2中描述,如下所示:

速率匹配之后的ek资源大小为PDCCH不同聚合等级下所能承载的bit数,在前面的表格中有介绍,例如AL=1,ek表示有72bit的数据。

(4) 加扰、调制和预编码

PDCCH的加扰序列和PBCH的产生相同,区别在于c_init的取值不同,PDCCH的加扰是对所有的PDCCH候选位置信息进行加扰,如下所示:

其中,ns表示子帧号,cell_id表示小区id,Nc为固定1600。

PDCCH的调制和预编码都和PBCH相同,这里不再描述。

(5) 资源映射

PDCCH的资源映射归结为逻辑CCE的reg在频域上的位置,映射规则为先时序后频域,映射过程如下所示:

其中,cfi和phi位置是根据公式计算得出,pdc所处资源位置的数据是经过上述交织,速率匹配,加扰等处理之后的数据,不一定所有资源位置都承载pdcch的内容,根据所承载的CCE大小分配pdcch的信息。

(5) PDCCH的编码

根据上述的处理过程,对PDCCH进行编码,过程如下所示:

%% dci信息
C_rnti     = 100;
c_rnti_bin = num2bin(C_rnti,16);
crc_gen    = [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1];%crc的生成多项式
dci_bits   = [1;0;1;0;0;1;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0]';
crc_bits   = crc16(dci_bits,crc_gen);
crc_outs   = mod(c_rnti_bin+crc_bits,2);
dci_msg    = [dci_bits,crc_outs];
%% 信道编码
G0              = [1,0,1,1,0,1,1];
G1              = [1,1,1,1,0,0,1];
G2              = [1,1,1,0,1,0,1]; %%生成多项式
m_add0          = [dci_msg,0]; 
S_reg           = [m_add0(1),fliplr(dci_msg(end-7+2:end))];%寄存器初值
len             = length(dci_msg);
dk_0            = zeros(1,len);
dk_1            = zeros(1,len);
dk_2            = zeros(1,len);
for i=1:len
    %计算编码结果
    dk_0(i)     = mod(S_reg*G0',2);
    dk_1(i)     = mod(S_reg*G1',2);
    dk_2(i)     = mod(S_reg*G2',2);
    %更新寄存器值
    S_reg       = [m_add0(i+1) S_reg];
    S_reg(end)  = [];
end 
dk              =[dk_0 dk_1 dk_2];
%% 交织
Null_bits       = 2*32 - length(dk_0);%根据信息bit的长度进行调整
interl_line     = [1, 17, 9, 25, 5, 21, 13, 29, 3, 19, 11, 27, 7, 23, 15, 31,...
                   0, 16, 8, 24, 4, 20, 12, 28, 2, 18, 10, 26, 6, 22, 14, 30]
interl_table    = [interl_line;interl_line+32]-Null_bits+1;%去除空白Null部分
interl_index    = interl_table(find(interl_table>0));
vk_0            = dk_0(interl_index);
vk_1            = dk_1(interl_index);
vk_2            = dk_2(interl_index);
vk              =[vk_0 vk_1 vk_2];
%% 速率匹配
AL_type         = 1;
dci_ratematch   = pdc_ratematch(vk,AL_type);
%sum(codedDciBits==dci_ratematch')
%% 产生phi相关参数
CFI              = 4;
PHI              = 1;             %PHI信息
Ng_idx           = 1;             %Ng的选择
ECP_flag         = 0;             %是否为ECP 
N_rb_dl          = 6;             %下行带宽
Ng_table         = [1/6,1/2,1,2]; %Ng取值
N_SF_PHICH_cp    = [4 2];         %通过ECP选择
I_prb_ra         = 0;             %PUSCH所在最低PRB索引
n_DMRS           = 0;             %pdcch传输
I_phich          = 0;             %区别同一下行的两个PHI
%% 计算PHI相关的参数
N_phi_group_ncp  = ceil(Ng_table(Ng_idx)*N_rb_dl);
N_phi_group_ecp  = 2*ceil(Ng_table(Ng_idx)*N_rb_dl);
N_phi_group_cp   = [N_phi_group_ncp,N_phi_group_ecp];
N_SF_PHICH       = N_SF_PHICH_cp(ECP_flag+1);
N_phi_group      = N_phi_group_cp(ECP_flag+1);
%% 资源映射位置
m                =0;
A                = 39827;
D                = 65537;
Yk               = mod(A*C_rnti,D);
tol_reg          = N_rb_dl*2+(CFI-1)*N_rb_dl*3;
phi_reg          = N_phi_group*3;
pdc_tol_reg      = tol_reg - 4 - phi_reg;
NCCE             = floor(pdc_tol_reg/9);
pdc_reg          = NCCE*9;
AL_type          = 1;
for i = 1:6
  candi_start(i) = mod(AL_type*mod((Yk+i-1),floor((NCCE/AL_type))),NCCE)
end 
candi_reg_start  = candi_start*9+1;
candi_re_start   = candi_start*36+1;
candi_bit_start  = candi_start*72+1;

另外附上matlab自带的EDA tool的计算过程,可以用于校验自己在编码过程中的正确性

%% enb para
enb.CyclicPrefix        = 'Normal';
enb.PHICHDuration       = 'Normal';
enb.Ng                  = 'Sixth';
enb.NDLRB               = 6;
enb.CellRefP            = 1;
enb.DuplexMode          = 'FDD';
enb.NCellID             = 0;
enb.NSubframe           = 0;
enb.CFI                 = 3;
%% dci para
dci.NDLRB               = enb.NDLRB;
dci.DCIFormat           = 'Format1A';
dci.AllocationType      = 0;
dci.Allocation.RIV      = 18;
dci.ModCoding           = 10;
dci.HARQNo              = 0;
dci.NewData             = 0;
dci.TPCPUCCH            = 0;
dci.DuplexMode          = 'FDD';
dci.NTxAnts             = 1;
[~,dciMessageBits]      = lteDCI(enb,dci);
%% pdcch 处理
C_RNTI                  = 100;                         
pdcchConfig.RNTI        = C_RNTI;            
pdcchConfig.PDCCHFormat = 0;  
codedDciBits            = lteDCIEncode(pdcchConfig, dciMessageBits);
pdcchDims               = ltePDCCHInfo(enb);
candidates              = ltePDCCHSpace(enb, pdcchConfig, {'bits','1based'});
candidatesRE            = ltePDCCHSpace(enb, pdcchConfig, {'re', '1based'});
candidatesREG           = ltePDCCHSpace(enb, pdcchConfig, {'reg','1based'});

 

SIB介绍

来源 https://zhuanlan.zhihu.com/p/663876117

一. SIB的分类

SIB(System Information Block)系统信息块,前面提到的MIB(主信息块)只包含非常有限的系统信息,更多的系统信息,是通过SIB来告诉UE的。SIB具体信息在协议TS36.331的第6章节描述,如下所示:

LTE系统中常用的系统信息包括8种,如下所示:

所有的SIB中最重要的为SIB1,因为SIB1除了携带UE接入小区的参数外,还携带了其他SIB类型的调度信息,如果UE解析不到SIB1,也就无法解析其他的SIB。

二. SIB的发送

不同于MIB的传输,所有的SIB信息都使用SI-RNTI加扰,在公共搜索空间中,通过PDSCH传输。由于SIB1中携带了其他SIB的调度信息,需要在固定时刻,这样UE可以方便接收,这个固定时刻为SFN为偶数的无线帧的第5个子帧,如下所示:

SIB1的发送周期为20ms,为了确保接收的可靠性,SIB1的内容会重复发送4次,因此SIB1的发送周期为80ms。

每个SI消息包含了一个或者多个除SIB1外拥有相同调度需求的SIB,这些SIB有相同的传输周期。每个SI消息包含哪些SIB是通过SIB1中的SchedulingInfoList指定的,如下所示为SI调度的一个示例:

每个SI消息只在一个SI窗口中传输,SI窗口有如下特点:

(1)一个SI消息跟一个SI窗口关联,该SI窗口内只能发这个SI消息。

(2)一个SI消息在SI窗口内可以重复发送多次,但不能发送其他SI消息。

(3)SI窗口之间是紧挨着的,既不重叠,也不会有空隙。

(4)所有SI消息的SI窗口长度相同。

(5)不同SI消息的周期相互独立。

首先需要确认SI消息对应的SI窗口起始位置以及长度,在协议TS36.331的5.2.3中描述,处理过程如下所示:

(1) 在SIB1中,schedulingInfoList指定了SI消息的列表,每个SI消息在消息列表中以n表示(从1开始),如果制定了4个SI消息,则会有4个连续的SI窗口用于发送这4个SI消息,而n表明了SI消息在第几个SI窗口。

(2) 每一个SI消息有一个x=(n-1)*w,w为SI的窗口长度

(3) SI窗口的起始帧满足SFN%T=floor(x/10),其中T对应SI消息的周期,由si-periodicity指定

(4) SI窗口的起始子帧为a=x%10。

以如下参数为例,表示一个SI调度的示意

通过上述配置计算3个SI的周期和位置,如下所示:

不同SI消息在LTE系统时间上的结构如下所示:

这里计算的是SI窗口的起始帧和起始子帧,并不是计算SI消息具体所在的系统帧和子帧。SI消息是在SI窗口内发送的,UE需要在SI窗口内盲检使用SI-RNTI加扰的PDCCH,才能知道对应子帧上是否有SI消息。

三. SIB内容

在小区接入,选择和重选所涉及的SIB包括SIB1,SIB2和SIB3,每个SIB包含的主要内容参数如下所示

3.1 SIB1

SIB1包含了小区选择相关的系统信息,重要参数内容如下所示:

SIB1重要参数

· PLMN

PLMN(Public Land Mobile Network),公共陆地移动网,为公众提供移动通信而建立的网络,PLMN=MCC+MNC,结构如下所示:

其中MCC为国家代码,MNC与具体的运营商有关,如下是一些PLMN举例

PLMN在无线侧包含三大特性:工作频段、频点和PLMN标识

· TAC

在位置等级的时候,终端向核心网汇报自己所在的位置,终端根据TAC和CID,可以知道自己的位置,LTE中引入了TA列表,当多个TA在同一个TA列表中,终端不需要进行位置更新,如下所示:

如果UE位于TA列表2中,从TA2到TA3不用进行位置更新,从TA2到TA1就需要进行位置更新。

· 小区选择判决

终端测量了小区的RSRP之后,会利用S算法来得到判决的结果,判断小区是否满足要求,LTE规范的TS36.304规定义了S算法的具体内容

上述的各参数如下所示:

如果上述的各种参数值如右图所示,最后计算得到S = 29dB,满足S>=0,可以驻留到该小区。

3.2 SIB2

SIB2包含了寻呼控制信道和随机接入信道的配置信息,重要参数内容如下所示:

SIB2重要参数

· 寻呼参数

DRX机制中,终端平时休眠,短时唤醒,两次唤醒时刻的时间差为休眠周期,成为DRX周期,定义了四种分别是320ms,640ms,1.28s,2.56s。

(1) 每次唤醒的时刻也是固定的,所在的系统帧计算的过程如下所示:

假设T=128,寻呼周期为1.28s,128个无线帧,寻呼一次nB为T,表示一个寻呼周期内,寻呼一次。

LTE定义了六种密度,分别为(1,1/2,1/4,1/8,1/16,1/32)*T,如下所示:

假设UE_ID = 1,寻呼帧的位置为SFN(1),SFN(1*128+1),SFN(2*128+1)。

(1) 唤醒时刻的子帧计算过程如下所示:

LTE中定义了6种寻呼时机PO,如下所示:

根据上述公式,计算得到I_s和Ns,然后根据如下表格定义的参数,选择对应的PO子帧

根据nB参数,可以计算Ns,nB=T,得到Ns=1,s = floor(1/128) mod 1 = 0可以得到,在FDD下,PO时刻为子帧9,在TDD下PO时刻为子帧0。

· 随机接入

携带了随机接入时的时频资源,接入时的功率等,在后续的随机接入的过程种详细介绍各参数的含义及使用。

· 下行功率参数

在WCDMA中,下行功率是以信道为单位进行分配的,不关注信道上的总功率,而是关注信号与信道在每个子载波上的功率,这个功率单位为EPRE(Energy Per Resource Element),也就是每个资源颗粒上的功率。

LTE中设置了一个基准EPRE,称为EPRE0,根据天线端口上最大输出功率和子载波数量得到。

例如,天线端口的最大输出功率为20W(43dBm),当频点带宽为20MHz的时候,由于子载波数量为1200个,平均到每个RE的发射功率为43-10*log(1200)=12.2dBm。因此EPRE0=12.2dBm。当频点带宽为10MHz的时候,子载波数量为600,EPRE0=15.2dBm。CRS可以借助另一个端口不发送CRS功率,使得本端口CRS发射功率加倍,也就是提升3dB。

一般CRS的功率为EPRE0,控制信道PBCH,PCFICH,PHICH,PDCCH等下行控制信道以及同步信号的EPRE设置等于EPRE0。PDSCH与终端业务相关,EPRE可以灵活设置。

情况一:PDSCH所在的OFDM符号上没有分布小区参考信号,

情况二:PDSCH所在的OFDM符号上有小区参考信号,

基站并不向UE直接广播   ,而是通过PA和PB,定义如下所示:

PB的取值及所表示的内容在协议TS36.213的表格5.2-1中定义,如下所示:

例如CRS=21dBm,PA=-3,通过PA可以确定A功率为18dBm,PB=1,使用2port,可以确定p_b/p_a=1,B功率也为18dBm。

·功率控制参数

在开环功率控制中,需用计算UE侧的发射功率,P0-NominalPUSCH为eNB期望的目标信号功率,UE可以根据参考信号功率和计算的RSRP,计算路径损耗,结合基站发送的期望功率,计算得到需要以多大的功率发送数据。

 

3.3 SIB3

SIB3包含了小区重选相关的配置信息,重要参数内容如下所示:

SIB3重要参数

· 小区重选

启动同频测量的条件:

启动异频测量的条件:

S服务小区代表测量的RSRP经过S算法处理之后的结果,S算法在SIB1中介绍,后面两个参数在上述SIB3中配置

通过R排序准则用于小区切换,R准则有两个表达式如下所示:

其中,小区重选的过程如下所示:

小区重选过程

当终端逐渐离开服务小区的覆盖范围,RSRP逐渐下降,当服务小区的RSRP低于  的时候,在A点开始测量邻区的RSRP,邻区的RSRP逐渐走高,到达B点的时候,经过R准则的处理后邻区的质量大于服务小区,但此时不能立马进行重选到邻区,为了重选更可靠,这种满足条件需要持续一定的时间,该参数也在SIB3中广播,到达C点的时候才能重选到邻区。

 

=============== End