5G NR - CSI-RS学习笔记10 - CSI-RS Sequence的生成_长度为31的gold序列-程序员宅基地

技术标签: 5G  5g  

​- 楔子 -

一直跟不上潮流,每年网络上各种流行词都不太会用,除非自己关注的领域也出现某个流行词,比如“虽迟但到”,我是通过看一个梅西的经典过人集锦视频学到该词的一个衍生词才知道:2015年的欧冠半决赛梅西通过假动作轻松晃到博阿滕然后将球打进,让阿滕和一众拜仁后卫成为背景帝(也是个流行词),但在这个集锦视频里,迟迟未现这一经典场面,直到视频快结束时才看到博阿滕的身影,然后就看到网友纷纷发弹幕“迟但到”,我发现这些网友太有才了。

回到CSI-RS系列学习笔记,距离上篇已经超过两个月,是因为工作忙到极致,几乎没有时间和精力去看资料写笔记,直到最近过了忙碌的巅峰期,才能零星抽空来学习和写笔记,这篇也算是“迟但到”了。

- 正文 –

在《5G NR - CSI-RS学习笔记4 - 物理层资源映射》这篇开头提到了CSI序列由如下公式(38.211-7.4.1.5.2)生成:

  r(m) = \frac{1}{\sqrt2}(1 - 2.c(2m)) + j\frac{1}{\sqrt2}(1 - 2.c(2m + 1))

然而并没有说生成细节,从公式看这里的关键是如何得到c(2m)和c(2m+1). 

c(n)值的计算在38.211-5.2.1的如下一段描述:


Generic pseudo-random sequences are definedby a length-31 Gold sequence. The output sequence c(n) of length M_{PN, where n=0,1,...,M_{PN}-1, is defined by

  c(n)=(x_{1}(n+N_{C})+x_{2}(n+N_{C}))mod2

x_{1}(n+31)=(x_{1}(n+3)+x_{1}(n))mod2

x_{2}(n+31)=(x_{2}(n+3)+x_{2}(n+2)+x_{2}(n+1)+x_{2}(n))mod 2

    where N_{C}=1600 and the first m-sequence x_{1}(n) shall be initialized with x_{1}(0)=1,x_{1}(n)=0,n=0,1,2,...,30 . The initialization of the second m-sequence, x_{2}(n),   is denoted by c_{init}=\sum_{i=0}^{30}x_{2}(i).2^{i} with the value depending on the application of the sequence.


但我看完这一段我还是一头雾水,脑袋充满诸多疑问(包括一些关于最基本概念的),比如:

1. Pseudo-random sequence是什么?Gold sequence是什么?m-sequence是什么?

2. length-31 Gold sequence是指sequence长度为31还是指sequence为31阶?

3. Gold sequence如何通过m-sequence得到?

4. 如何通过c_{init}初始化x_{2}(n)

5. 一些文档/书籍里讲pseudo-random sequences时提到的的seed是什么?跟c_{init}有什么关系?

试图查阅很多文档/博文或书籍里关于Pseudo-random/Gold/m-sequence部分的讲述,没有哪一篇能解答上面所有疑问,但综合起来,这些疑问就基本得到解决了。不过也只是“基本”解决,“基本”就是说CSI-RS序列生成过程的轮廓清晰了,但是随机序列背后本身涉及到的数学原理(比如本原多项式)的理解对于数学基础太差的我来说却并非朝夕的事,只能等有空再抽专门的时间学习,前缘等待,再续后爱。

1.pseudo-random sequences是什么?

即伪随机序列。

首先,“随机”就是字面意思:没有规律。”伪“”是伪造的,而不是真正意义上的随机,比如通过某些数学公式生成一个看起来像是真正随机的数列。伪随机序列是一个通用的概念,具体讲到CSI-RS序列,就是上面协议提到“Generic pseudo-random sequences are defined by a length-31 Gold sequence. ”,因此需要弄清楚什么叫Gold sequence.

2. Gold sequence是什么?length-31 Gold sequence是指sequence长度为31还是指sequence为31阶

1) Gold sequence是一种伪随机序列,是二进制(binary)序列。

Gold, 并不是说这个序列像金子一样闪闪发光或值钱(当然这个序列确实为人类创造巨大的价值),而是因为这种序列是由一个叫Robert Gold的人提出。

Gold sequence由两个长度相同的m-sequence相互XOR(异或:按位加然后mod2)而成。

2) length-31 sequence是指31阶sequence,是指用于生成Gold sequence的两个m-sequence由31阶线性反馈移位寄存器(Liner Feedback Shift Registers - LFSR)输出.

3. m-Sequence是什么?

通过一个m阶的线性反馈移位寄存器可以输出周期<=2^{m}-1的序列,选择合适的反馈函数可以使序列周期达到2^{m}-1,周期达到最大值的序列称为为m-sequence.(LFSR基本工作原理是给定前一状态的输出,将该输出的线性函数再用作输入的移位寄存器。)

上面协议描述中的x_{1}(n)x_{2}(n)就是m-sequence:

  x_{1}(0), x_{1}(1), x_{1}(2),..., x_{1}(n)是第1个m-sequence

 x_{2}(0), x_{2}(1), x_{2}(2),..., x_{2}(n)是第2个m-sequence

4. Gold sequence如何通过m-sequence得到?

Gold sequence在这里就是指协议提到的output sequence c(n), 那c(n)又是什么呢?单独说c(n)时,它就是一个具体的数,数值∈{0,1},c(0), c(1)...c(n)组成M_{PN}序列,其中n最大值是M_{PN}-1c(n)就是通过上面协议提到的如下公式得到:

  c(n)=(x_{1}(n+N_{C})+x_{2}(n+N_{C}))mod2

这个公式的计算对应的就是之前提到的“Gold sequence由两个长度相同的m-sequence相互XOR(异或:按位加然后mod2)而成。”,这里的两个m-sequence分别是x_{1}(n+N_{C})x_{2}(n+N_{C}), 其中N_{C}=1600.

其中:

  -  x_{1}(n)根据x_{1}(n+31)=(x_{1}(n+3)+x_{1}(n))mod2计算,由x_{1}(0)=1, x_{1}(n) =0, n=1,2,...30初始化。 

  -  x_{2}(n)根据x_{2}(n+31)=(x_{2}(n+3)+x_{2}(n+2)+x_{2}(n+1)+x_{2}(n))mod 2计算,由c_{init}=\sum_{i=0}^{30}x_{2}(i).2^{i}初始化. 那么下一步就是看初始化具体如何完成。

5. 如何初始化x_{2}(n)

1) 首先要知道c_{init}的值:

由于当前的slot,symbol,  n_{ID}等值都是已知,因此可以通过7.4.1.5.2 公式c_{init} = (2^{10}(N_{symb}^{slot}n_{s,f}^u + l + 1)(2n_{ID} + 1) + n_{ID})mod2^{31}得到。

2) 如何初始化x_{2}(n)

2.1) 根据x_{2}(n+31)=(x_{2}(n+3)+x_{2}(n+2)+x_{2}(n+1)+x_{2}(n))mod 2可以知道,只要知道x_{2}(0),x_{2}(1),...,x_{2}(30)的值,就能得到x_{2}(31)的值,从而进一步得到x_{2}(31)之后所有的值。

那么如何确定x_{2}(0),x_{2}(1),...,x_{2}(30)的值呢?根据公式c_{init}=\sum_{n=0}^{30}x_{2}(i).2^{i}:  

2.2)   c_{init}=\sum_{n=0}^{30}x_{2}(i).2^{i}的意思是,  x_{2}(i)对应c_{init}的第i个bit的值(从LSB开始算),假设c_{init}的值是2,那么2对应的二进制00000000000000000000000000000010

那么  就是0100000000000000000000000000000

6. seed是什么?

根据一处  的定义“the initial condition to seed the second m-sequence x_{2} ”

以及一段根据seed初始化m-sequence x_{2}(n)的如下代码可以知道seed就是c_{init}  

--- clip ---

for(n = 0; n < 31; n++) {

    x2[n] = (seed >> n) & 0x1;  //x2[n]是将seed右移n位, 然后与0x1按位与(将高位清零)

  }

--- clip ---


笔者在公众号“协议工程师笔记”定期首发NR/LTE/IMS...学习笔记, 敬请关注、订阅和分享,谢谢!

                                                               图片

                                                                      一起努力,蒸蒸日上

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/travel_life/article/details/122316786

智能推荐

Android插件化、组件化_android commonstub-程序员宅基地

文章浏览阅读407次。转载仅供本人存档及后续研究使用,请尊重原创。转载自:https://blog.csdn.net/qq941263013/article/details/82864553 如今移动app市场已经是百花齐放,其中有不乏有很多大型公司、巨型公司都是通过app创业发展起来的;app类型更加丰富,有电子商务、有视频、有社交、有工具等等,基本上涵盖了各行各业每个角落,为了更加具有竞争力app不仅功..._android commonstub

matlab 调速系统试验,实验三 开环直流调速系统Matlab仿真-程序员宅基地

文章浏览阅读1.2k次。开环直流调速系统Matlab仿真实训三 晶闸管开环直流调速系统的MATLAB仿真实训一、实验实训目的1.学习并掌握晶闸管开环直流调速系统模型建立及模型参数设置的方法和步骤。2.熟悉并掌握系统仿真参数设置的方法和步骤。3.学会利用MATLAB软件对系统进行稳态与动态计算与仿真。4.巩固并加深对晶闸管开环直流调速系统理论知识的理解。二、实验实训原理及知识准备1. 晶闸管开环直流调速系统的原理图..._开环直流调速系统的matlab仿真

iscroll部分机型高度计算错误原因--transform属性_iscroll transform-程序员宅基地

文章浏览阅读1.7k次。iscroll在部分手机上做下拉刷新的时候,高度会计算错误,显示为顶部部分高度被隐藏。当时使用版本是4.2.2。通过调试发现是iscroll源码的bug,在此Mark下,懒得提交Issue。iscroll4均有这个错误,在iscroll5里面已改正,但是只是在计算高度时做了防御式编程,根本原因估计还是没找到。图方便可以直接使用iscroll5,只是api变了。不想升级,可以按我的方式稍微修改下_iscroll transform

graphql----java使用_graphql.field-程序员宅基地

文章浏览阅读1.6k次。前言前一篇,已经讲了go语言中的使用。那么java端如何使用。1.定义用户结构public class User { private int id; private int age; private int sex; private String name; private String pic; // get set方法}_graphql.field

Linux的进程查看命令ps与top详解_psr top-程序员宅基地

文章浏览阅读1w次。1、ps -eFHUID进程所有者的用户标识、PID进程的进程标识、PPID父进程的进程标识、SZ进程的核心映像的页面大小、RSS进程的实际内存(驻留集)大小(单位是 1KB)、PSR绑定内核线程的处理器(如果有)的逻辑处理器号,对一个进程来说,如果它的线程全都绑定到同一处理器上,则显示该字段、STIME进程的启动时间、TTY进程的控制工作站、TIME进程的执行时间总和、CMD包含命令名_psr top

java.lang.ClassNotFoundException: ${jdbc.driverClassName}_caused by: java.lang.classnotfoundexception: ${jdb-程序员宅基地

文章浏览阅读3.4k次,点赞3次,收藏6次。错误日志错误分析一 . 配置文件中 <context:property-placeholder location=“classpath:db.properties” /> 标签没有写这个错误相信看完错误日志大家都能找的到, 就不多赘述了. 错误的原因就是, 如果没有加上面的标签, 那么下面配置文件代码中的property标签中的value属性的值就仅仅是一个string类型的..._caused by: java.lang.classnotfoundexception: ${jdbc.driverclassname}

随便推点

层级重音分析与预测方法研究_crf预测重音-程序员宅基地

文章浏览阅读357次。语音合成技术主要有三部分:1、文本分析;2、韵律建模;3语音合成文本分析文本分析处理流程:输入文本→文本预处理→文本规范化→分词→词性标注→字音转换→韵律预测→输出拼音节奏等信息文本预处理包括删除无效符号,断句,内码转换等。文本规范化的任务就是将文本中的这些特殊字符识别出来,并转化为一种规范化的表达。字音转换的任务是将待合成的文字序列转换为对应的拼音序列,即告诉后端合成器应_crf预测重音

在Python里的字符串、列表、元组、集合之间转换的一个不为人知的细节和bug_python list转化为set时长度发生变化-程序员宅基地

文章浏览阅读536次。首先看如下代码:a = ['0234','abcd']seta = set(a)b = ['0234']setb = set(b)c = ('0234','abcd')setc = set(c)d = ('0234')setd = set(d)e= tuple(b)sete = set(e)print(type(a), ' , ', a,' , ',seta)..._python list转化为set时长度发生变化

计算机专业专业课代号408,计算机专业考研你一定要知道的事情!-程序员宅基地

文章浏览阅读4.3k次。1.计算机专业专业课比较难,建议考研最好是本专业或者相关专业,有一定的基础,跨考有一定的难度。2.计算机考研主要分为学硕和专硕两个方向。学硕为计算机技术应用,专硕为计算机应用和软件工程。3.考试科目我这里只说学硕(专硕每个学校规定不同):一般情况下,初试为公共课+专业课。公共课考英语(学硕为英语一,难度较大)和政治,各占100分。专业课一考数学一,相对较难。专业课二考计算机专业基础。计算机专业基础..._408是哪个专业

使用uedior关于iframe,样式问题【已解决】-程序员宅基地

文章浏览阅读117次。网站需要主题切换,但是iframe里读取不到改变后的css变量看文件只有一个我需要一个js的位置,能添加js到ifram

大话:边缘计算、雾计算、云计算_云计算 雾计算-程序员宅基地

文章浏览阅读7.8k次,点赞9次,收藏50次。云计算一种利用互联网实现随时随地、按需、便捷地使用共享计算设施、存储设备、应用程序等资源的计算模式。云计算系统由云平台、云存储、云终端、云安全四个基本部分组成,云平台从用户的角度可分为公有云、私有云、混合云等。通过从提供服务的层次可分为:基础设施即服务(Iaas)、平台即服务(Paas)和软件即服务(Saas)通过将应用部署到云端后,可以不必再关注那些令人头疼的硬件和软件问题,它们会由云服务商去解..._云计算 雾计算

STM32-自学笔记(10.使用GPIO和SysTick定时器实现按键扫描)_stm32定时器扫描按键-程序员宅基地

文章浏览阅读5.5k次,点赞3次,收藏23次。按键抖动的原因:通常按键所用的开关都是机械弹性开关。当按键触点闭合或者断开时,由于机械触点的弹性特点,一个按键开关在闭合时不会马上就稳定的接通。在断开时也不会一下子就彻底断开。而是在闭合和断开时伴随了一系列抖动。按键消抖的方法:硬件消抖和软件消抖硬件消抖:利用电容的充放电特性对抖动过程中产生的电压毛刺进行平滑处理。软件消抖:通过延迟程序过滤,通过延迟来过滤掉抖动时间。..._stm32定时器扫描按键