PSS/SSS procedure
基础知识
http://sharetechnote.com/html/Handbook_LTE_PSS.html
http://sharetechnote.com/html/Handbook_LTE_SSS.html
http://sharetechnote.com/html/lte_toolbox/Matlab_LteToolbox_PSS.html
http://sharetechnote.com/html/lte_toolbox/Matlab_LteToolbox_SSS.html
http://sharetechnote.com/html/BasicProcedure_LTE_TimeSync.html
http://sharetechnote.com/html/Handbook_LTE_PCI.html
时间同步过程
在非常高的级别,定时同步的过程可以描述如下。
i)UE解码具有三个不同主同步序列的主同步,并找出为该小区分配的序列并获得主时间同步。
ii)应用主同步序列以解码辅同步代码并找出为该小区分配的序列。
此同步检测每5 ms完成一次。
正如我在前一节中提到的,三个不同的序列被用作主同步信号,并且在三个序列中的每一个之间存在一对一映射,并且在小区标识组内存在小区ID。在UE检测到该小区标识组之后,它可以确定帧定时。UE还从该小区标识组中确定哪个伪随机序列用于在小区中生成参考信号。
iii)一旦建立了该定时同步,UE就可以解码MIB并找出SFN号,因为MIB携带SFN号。
如果您进一步了解详细信息,则需要执行以下几个步骤(步骤(1)和步骤(2))。要检测PSS和SSS,您需要准确地获取具有一系列特定资源元素的数据。要准确地从特定资源元素中提取数据,您需要知道确切的符号边界(起始样本和OFDM符号的结束样本)。一旦检测到确切的符号边界,就可以检测频率偏移(一种频率误差)以进一步补偿信号。从某种意义上说,这两个步骤比PSS,SSS检测更难。
您可以使用不同的技术来检测符号边界,但是使用的常用技术之一是使用循环前缀的属性。如您所知,Cyclic Prefix是来自OFDM符号结尾部分的数据序列的副本。这意味着循环前缀和符号的结尾部分之间的相关性应该与其他区域相比非常大,如下所示。
<图1:当相关窗口精确地位于循环前缀和符号的结尾部分时>的情况
<图2:当相关窗口不在循环前缀的位置和符号的结尾部分时>的情况
正确使用此选项,如果您在沿着捕获的时域数据向下滑动两个相关窗口时找到获得最高相关性的点。您可以找到符号边界。
以下是在逐个样本滑动窗口的同时绘制这些相关性的示例。显然,您可以看到具有一个OFDM符号间隔的峰值(这来自以7.62 Mhz采样率采样的5 Mhz BW LTE下行链路数据)。
但在实际工程中没有任何东西像教科书。尽管循环前缀应该与符号的结尾部分相同,但实际上它并不完全相同,因为在生成信号并通过信号路径传播时应用了不同的噪声(或衰落)。因此,相关峰值现在可能恰好出现在预期点。此外,峰值可能不仅仅是一个点…您可能会在峰值周围的几个样本周围看到类似的高相关性。因此,您会在几个样本中出现峰值位置的一些错误。
随着相关窗口的长度变长,这些相关峰值的准确度将更准确。这意味着您可以在更宽的带宽内获得相当好的准确性,因为CP长度在更宽的带宽中更长。然而,随着CP长度变短,系统带宽越来越窄,相关性的准确性越来越差。
因此,在实际实现中,您需要一些额外的技巧来补偿这种错误。
P-SS(主同步信号)
- 映射到72个活动子载波(6个资源块),以时隙0(子帧0)和时隙10(子帧5)中的DC子载波为中心。
- 由62个Zadoff Chu序列值组成
- 用于下行链路帧同步
- 确定物理小区ID的关键因素之一
- 有关详细信息,请参阅物理层:PSS和Matlab工具箱:PSS。
对于大多数情况来说,这可能不是一个大问题,因为它对于大多数用于测试的设备都可以正常工作。否则它将不会给你进行测试。但是,如果您是LTE芯片组早期阶段的开发人员,那么这将是您必须实施的第一个信号之一。如何从基带捕获的IQ数据序列中找到PSS的确切位置?这是定时同步中最重要的部分之一。这是理解LTE协议的一个非常棘手的部分,它需要很长时间才能完成研究。
S-SS(辅同步信号)
SSS是用于无线电帧同步的特定物理层信号。它具有如下所列的特征。
映射到72个活动子载波(6个资源块),以FDD中的时隙0(子帧0)和时隙10(子帧5)中的DC子载波为中心。
子帧0中的SSS序列和子帧5中的SSS序列彼此不同
由62个加扰序列组成(基于m序列)
奇数索引资源元素中的值和偶数索引资源元素中的值由不同的等式生成
用于下行链路帧同步
确定物理小区ID的关键因素之一
有关详细信息,请参阅物理层:SSS和Matlab工具箱:SSS
对于大多数情况来说,这可能不是一个大问题,因为它对于大多数用于测试的设备都可以正常工作。否则它将不会给你进行测试。
但是,如果您是在LTE芯片组早期工作的开发人员(特别是在基带区域),这将是您必须实现的第一个信号之一。
eNB端代码分析
pss生成函数
int generate_pss(int32_t **txdataF, short amp, LTE_DL_FRAME_PARMS *frame_parms, unsigned short symbol, unsigned short slot_offset);
generate_pss(eNB→common_vars.txdataF[0], AMP, &eNB→frame_parms, (eNB->frame_parms.Ncp==0) ? 6 : 5, 0);
根据NID2提取不同的同步信号
不同的天线端口遍历
从m=5到5+62中间遍历zadoff-chu序列
sss生成函数
int generate_sss(int32_t **txdataF, int16_t amp, LTE_DL_FRAME_PARMS *frame_parms, uint16_t symbol, uint16_t slot_offset)
generate_sss(eNB→common_vars.txdataF[0], AMP, &eNB→frame_parms, (eNB->frame_parms.Ncp==0) ? 5 : 4, 0);
UE端代码分析
lte_sync_time
找到相关性最大的点,返回pos
slot_fep
slot fep (front end processor) = FFT + channel estimation + frequency offset estimation
rx_sss函数流程
从subframe0 slot0的倒数第2和倒数第1个符号解析pss/sss
从subframe5 slot10的倒数第2和倒数第1个符号解析pss/sss
根据d0d5是否翻转、pss和sss的相位偏移、Nid1的个数,遍历62个Zadoff Chu序列值,使用内积计算最强的能量值
对于上述遍历,匹配的就获取小区ID等参数
_do_pss_sss_extract函数流程
pss/sss解析
遍历接收天线个数
对于每一个天线,遍历不同的RB
对于每一个RB,遍历12个 —这里没有搞明白
pss_ch_est函数调用
pss信道估计
PCFICH procedure
http://www.sharetechnote.com/html/Handbook_LTE_PCFICH.html
generate_pcfich
rx_pcfich
PBCH procedure
下行概览
下图是eNB过程,UE是其逆过程。
PBCH 仿真main函数
文件调用关系
函数调用关系
过程
http://www.sharetechnote.com/html/Handbook_LTE_PBCH.html
http://www.sharetechnote.com/html/lte_toolbox/Matlab_LteToolbox_PBCH.html
对每一个符号进行遍历
pbch_extract
pbch_channel_level
pbch_channel_compensation
pbch_detection_mr/pch_alamouti (for mimo)
pbch_quantize
然后pbch_unscrambling
lte_rate_matching_cc_rx 速率匹配
物理层viterbi解码 phy_viterbi_lte_sse2
然后根据crc判断发射天线个数
PDCCH procedure
http://www.sharetechnote.com/html/Handbook_LTE_PDCCH.html
PDCCH TX
PDCCH RX
PDCCH extract RBS
PDCCH channel level
PDCCH channel compensation
PDCCH LLR
rx PCFICH
PDCCH extract RBS
PDCCH channel compensation
PDCCH LLR
PDDCH demapping
PDDCH deinterleaving
PDCCH unscrambling
get_nCEE
PMCH procedure
mch_extract_rbs
mch_channel_level
mch_channel_compensation
mch_detection_mrc
mch_detection_mrc