- 博客(63)
- 资源 (2)
- 收藏
- 关注
原创 5G NR 上行调度算法流程
1 基本概念PHR功率攀升空间:指示UE上行最大发送功率和UE上行已经使用的发射功率的差值,并上报给gNodeB,包括周期和事件上报两种模式 BSR缓存状态报告:指示上行数据缓存区包含的数据的大小,并上报给gNodeB。 SR调度请求:通过1bit信息通知gNodeB,用于UE有数据需要发送,需要为数据信道分配上行资源;2 上行调度器处理过程上行调度器的输入信息如下:UE信息输入:UE能力: 3GPP协议中规定了UE类别,其中包含了每种类别对应的每个TTI能够传输的最大比特数以及层
2020-12-22 22:17:52 12948 4
原创 5G NR 下行调度算法流程
目录1 下行调度器处理流程2 下行调度的输入3 下行调度流程4 下行业务调度优先级5 控制消息调度6 HARQ重传调度流程1 下行调度器处理流程调度器的基本功能是每个时隙为小区中的UE分配合适的系统资源,用于发送和接收数据。下行调度器位于NR系统的MAC层,主要为UE分配物理共享信道上的资源,并选择合适的MCS用于系统消息或用户数据传输。2 下行调度的输入CSI Channel Status Indicator 信道状态指示,CSI仅支持非周期上报.
2020-12-22 20:35:40 9117 7
原创 5G NR QoS 控制
目录1 QoS管理介绍2 QoS分类3 速率控制参数4 业务建立阶段的QoS映射5 QoS Flow到DRB的映射规则-下行6 QoS Flow到DRB的映射规则-上行7 业务建立后的QoS管理1 QoS管理介绍QoS管理分为两个阶段无线承载建立时,基于QoS特征,为每个无线承载配置不同的PDCP/RLC/MAC参数 无线承载建立后,上下行动态调度,来保证QoS特征及各承载速率要求,同时兼顾系统容量最大化QoS参数的获取NSA场景:通过X2-C接口由eNB下
2020-12-14 15:55:47 10560 7
原创 5G NR调度技术简介
目录1 调度简介2 帧结构配置3调度TTI介绍4调度的基本单位5调度的实现6 调度执行7 下行资源调度PDCCH&PDSCH8上行资源调度PUCCH1 调度简介调度的概念: 调度指的是基站遵从帧结构配置,在帧结构允许的时域单位上,以某个调度基本单位,为UE分配物理下行共享信道PDSCH和物理上行共享信道PUSCH上的资源(时域、频域、空域资源),用于系统消息或者用户数据传输。调度的要素帧结构配置(配置TTI) 调度基本单位 调度器(MAC..
2020-12-08 14:46:33 20355 14
原创 【面试记录2】联想软基站开发面试
邮件通知时间是下午四点,后来提前打电话通知,改为了2点,预计30min,实际60min,我猜测可能面试的人比较少吧。前期没有笔试,投递了简历(9月初投递的)现在安排面试。面试过程:(很多问题都是根据项目来问的)1、自我介绍2、询问了我使用的加速卡的具体型号和pcie通道数;3、询问驱动使用的类型,DMA中的具体哪种类型的驱动?4、自己在项目中主要完成的工作是什么?5、PDSCH信道的各个模块包括什么?6、PUSCH信道的各个模块包括什么?7、产生频偏的原因是什么?8、多.
2020-10-14 19:49:58 615
原创 【参考信号-CSI-RS】信道状态信息参考信号
在LTE中有CRS小区参考信号,在NR中没有了CRS参考信号,而是CSI-RS比CRS参考信号有着更多的用途;NR CSI-RS主要用于以下几个方面:获取信道状态信息,用于测量基站到UE之间的信道,并获取调度和链路自适应所需要的信道状态信息,如预编码矩阵、信道质量信息等。 波束管理,用于UE和基站侧波束的赋形权值的获取,支持波束管理过程中的波束测量。 时频跟踪,用于精确的时频同步跟踪,获取QCL参数。 移动性管理,用于完成移动性管理相关的测量。为了降低设计和实现的复杂度,不同功能的CSI-R
2020-09-29 20:30:37 4157
原创 【面试记录1】爱立信5G基带开发工程师
面试时间约30min,笔试时间45min;可能岗位申请的时间比较晚,没有给我安排线上的笔试,等我到了公司才告知需要先笔试做一套题。笔试题目有关于C语言和通信原理的,其中关于通信原理的知识我忘记了很多,而C语言的编程题也没有手写出来。一、部分笔试题1、码长n=15的汉明码,监督位有几位?2、请简述CDMA、TDMA 和FDMA?3、什么是误码率?什么是传信率?这两者之间的关系是什么?4、请画出16点以2为基时序抽取得FFT流程图5、以什么准则设计的理想接收机,以什么准则设计的最
2020-09-29 15:37:30 2347 2
原创 使用petalinux2020.1进行离线编译
1、petalinux离线安装包下载地址https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html需要根据自己的板卡型号选择对应的sstate-cache,其中downloads是必须要下载的;即一共需要下载两个文件。2、安装教程1)准备文件将下载的downloads 和sstate-cache两个文件放在自己喜欢的路径下,并解压
2020-08-20 10:39:54 4875
原创 Petalinux入门教程一、使用.xsa文件新建petaLinux工程
1、配置环境变量source /opt/petalinux/setting.sh其中/opt/petalinux/setting.sh 为petalinux的安装路径2、新建工程对于Zynq UltraScale+MPSoc 系列,命令如下petalinux-creat -t project -n <PROJECT_NAME> --template zynqMP3、导入硬件描述文件首先cd <PROJECT_NAME>然后执行(其中path-t..
2020-08-20 10:21:38 2547
原创 如何使用PTP4l测试PTPV2协议精度?
1、首先安装ptp4l的方式http://linuxptp.sourceforge.net/下载和安装方式请参照此网址,下载开源代码,然后使用make ,make install 手动安装或者使用yum install ptp4l 进行安装2、ptp4l环境搭建使用ptp4l测试环境,需要两个机器直连或者通过交换机连接。使用一台window下虚拟机环境的Linux主机和一台实体Linux主机。需要确保两个机器网络频段处于同一个网段,此时先不考虑多跳的事情。需要注意的是,虚拟机中L
2020-08-08 15:52:23 5388
原创 基于BIOS或者UEFI 的Centos 7.4 如何修改内存大页
1、在修改前查看系统的内存大页参数# grep Huge /proc/meminfoHugePages_Total: 16HugePages_Free: 16HugePages_Rsvd: 0HugePages_Surp: 0Hugepagesize: 1048576 kB从图中可以看到单个内存大页大小为1G,内存大页数量为16个;2、通过修改内核命令行来修改内存大页首先查看内核命令行# cat /proc/cmdl
2020-08-05 15:02:35 1492 2
原创 Centos 如何修改内核命令行
1、打开/etc/default/grub文件进行编辑:#vi / etc / default / grub2、该文件中包含多个GRUB2选项,内核引导参数由GRUB_CMDLINE_LINUX选项指定。以下是/etc/default/grub配置文件示例GRUB_TIMEOUT=5GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"GRUB_DEFAULT=savedGRUB_DISABLE_SUBMENU
2020-08-05 14:49:06 2374
原创 如何修改电脑的MAC地址?
常见的修改方式为修改有线的MAC地址,本文主要讲述如何修改有限MAC地址;首先第一步让电脑通过网线和交换机相连接,这样才可以看到能够修改的网卡;图中为未连接网线时的网络连接状态,如果电脑连接到网线之后会出现以太网1或者以太网*,此时就可以针对以太网*进行修改;...
2020-08-03 16:25:30 902
转载 Centos 如何挂在exfat格式移动硬盘或者U盘
https://www.myfreax.com/how-to-mount-an-exfat-drive-on-centos-7/
2020-07-22 16:57:36 1063
转载 Ubuntu 16.04 如何windows进行文件共享
转载https://blog.csdn.net/qq_26033071/article/details/54357106
2020-07-18 11:22:18 592
原创 【C++ 08】运算符重载
1 加号运算符重载通过成员函数重载+号通过全局函数重载+//加号运算符重载class Person {public: //成员函数本质 p3 = p.operator+(p2);Person operator+(Person& p1){ Person temp; temp.m_A = this->m_A + p2.m_A; temp.m_B = this->.m_B + p2.m_B; return temp;}public: int m_A;
2020-07-03 01:51:42 136
原创 【C++ 07】类和对象-友元
在程序中有些私有属性,也想让类外特殊的一些函数或者类进行访问,这就需要用到友元技术,友元的目的就是让一个函数或者类访问另外一个类中的私有成员。友元的关键字为friend友元的三种实现方式:全局函数做友元 类做友元 成员函数做友元1 全局函数做友元class Building{ //goodGay全局函数是Building的好朋友,可以访问Building 中的私有成员 friend void goodGay(Building* building); public: Buil
2020-07-02 01:38:11 247
原创 【C++ 06】对象模型和this指针
1.成员变量和成员函数分开存储在C++中成员变量和成员函数是分开存储的;只有非静态成员变量才属于类的对象。空类的内存大小为1个字节。class Person{ int m_A; //非静态成员变量,属于类的对象上 static int m_B; // 静态成员变量 类内声明,类外赋值,不属于类 void func() //非静态成员函数,只需一份 { } static void func2() { }};static int m_B = 0;void test01()
2020-07-02 00:49:14 221
原创 【C++ 05】类和对象-对象的初始化和清理
1 构造函数和折构函数对象的初始化和清理是两个非常重要的安全问题一个对象或者变量没有初始状态,对其使用后果是未知的;同样的,使用完一个对象和变量,没有及时清理,也会造成一定的安全问题;C++利用了构造函数和析构函数,解决上述问题;这两个函数将会被编译器自动表用,完成对象初始化和清理工作。对象的初始化和清理工作是编译器强制我们做的事情,因此如果我们不提供析构函数,编译器会执行编译器提供的构造函数和析构函数(空实现)构造函数:主要作用是创造对象时为对象的成员属性赋值,构造函数由编译器自动调用
2020-07-01 02:15:51 463
原创 【C++ 04】类和对象-封装
C++ 面向对象的三大特性:封装、继承、多态C++认为万物皆为对象,对象上有其属性和行为1 封装的意义封装是C++面向对象的三大特性之一;封装的意义:将属性和行为作为一个整体,表现生活中的事务 将属性和行为加以权限控制;封装意义一:在设计类的时候,将属性和行为写在一起,表现事务;语法:class 类名{ 访问权限 :属性/行为};#include<iostream>using namespace std;//piconst double PI = 3.14
2020-06-30 00:47:33 146
原创 【C++ 03】函数提高
1 函数默认参数在C++中,函数的形参列表中的形参是可以有默认值的;如果没有传递参数使用默认值,如果传递了参数,使用传递的值;语法:返回值类型 函数名(参数=默认值){}注意事项1、如果某个位置已经有了默认参数,那么从左到右都必须有默认值2、如果函数的声明有了默认参数,那么函数实现就不能有默认参数 声明和实现只能有一个定义形参默认值/函数的默认参数//语法:返回值类型 函数名(参数=默认值)int func02(int a, int b=20, int c=30){ retu
2020-06-29 01:53:19 98
原创 【C++ 02】引用的使用说明
目录1 引用的基本使用2 引用注意事项3 引用做函数参数4 引用做函数返回值2.5 引用的本质2.6 常量引用1 引用的基本使用引用:给变量起别名;语法:数据类型 &别名=原名;int a = 10;int &b=a;2 引用注意事项1.引用必须要初始化,int &b ;//错误;2 .引用一旦初始化之后,就不可以更改;3 引用做函数参数作用:函数传参数时,可以利用引用的技术让形参修饰实参;优点:可以简化指针修改实参
2020-06-29 01:11:50 155
原创 【C++ 1】内存分区模型
内存分区模型代码区:存放函数体的二进制代码,由操作系统管理;全局区:存放全局变量和静态变量,以及常量;栈区:由编译器自动分配释放,存放函数的参数值,局部变量等;堆区:由程序员分配和释放,若程序员不释放,程序结束由操作系统释放;不同区域存放的数据,赋予不同的时间周期,给我们更大的灵活编程。1.1程序运行前在程序编译后,生成exe可执行文件,未执行程序部分可以分为两个区域:代码区:存放CPU执行的机器指令,代码区是共享和只读的;全局区:存放全局变量、静态变量以及常量区(字符串
2020-06-28 02:53:45 285
原创 【通信之美】通信系统中的非LIT系统及其存在的意义
LTI系统存在于广泛的通信系统中,今天这篇文章主要介绍非LTI系统。时变系统在通信系统中很常见,比如在信号传输过程中的信道衰落和噪声。这类时变系统不依赖于人的主观意识改变而改变。发射机发射的信号如果在不同的时刻通过信道,则接收到的信号是不同的,这是因为信道的衰落和噪声在不同的时刻是不同的。、在通信系统中信道衰落和噪声是不能被人的主观意识改变的,在实际通信系统中仍然有很多人为设计的非LTI系统:接收机中的自适应均衡器(Adaptive Equalizer),其滤波器系数会随着时间的改变而改变,以满
2020-05-11 10:45:35 664
原创 线程和进程基础知识回归
什么是线程? 线程可以理解为轻量级的进程,是程序执行流的最小单元,一个标准的线程由线程ID、当前指令指针、寄存器集合和堆栈组成。通常意义上,一个进程由多个线程组成,各个线程之间共享程序的内存空间(包括代码、数据段、堆等)以及一些进程级的资源。线程的访问权限线程调度与优先级线程调度的状态:运行:就绪和等待线程具有优先级,同时可以分为抢占式线程和不可抢占式线程.L...
2020-05-04 12:45:44 169
原创 Linux内核模块的加载以及内核模块的管理
Linux内核模块在形式上以.ko文件存在,首先需要知道的是内核模块的编译也分为动态编译和静态编译,动态编译模块生成.ko文件。动态模块的加载命令如下:insmod ****.ko,比较常见的是Linxu设备驱动以内核模块的形式存在。关于内核模块管理的常见命令是:lsmod、insmod、rmmod、modinfo、modprobe、depmod一、基本介绍内核模块的管理命令安装在k...
2020-05-03 20:47:08 1674
原创 如何区分静态链接库和动态连接库
之前一直不是很理解静态链接库和动态连接库的区别,今天在此做一下汇总。首先从下图了解一下文本文件是如何编译成二进制格式的。【静态链接库】是指在编译的连接阶段将库函数嵌入到应用系统程序的内部。但是如何多次调用,则库函数会被调用很多次,造成极大的空间浪费。他的优势在于,应用程序可以独立运行,因为静态连接的时候已经将所需的组件都已经加载到应用程序中,不需要对于的.a、.lib文件。静态库对于库...
2020-05-03 20:08:32 851
原创 Ubuntu18.04如何设置静态IP和DNS
首先需要说明的是,在搜索Ubuntu问题的时候一定要带上系统的版本号,因为不同版本设置静态IP的方式是不一样的。本文主要介绍的是如何在Ubuntu中设置静态IP,以及配置DNS,牢记一定要配置DNS,不然无法内网连接。Ubuntu18.04采用netplan来管理network,在/etc/netplan目录下有缺省的文件:***.yaml 如50-netcfg.yamlv...
2020-05-01 12:17:31 1253
原创 如何对没有生成转存核心的程序如何使用gdb进行调试
因为之前一直使用gdb调试工具分析段错误产生的转存核心,这次出现的段错误没有生成转存核心,应该如何使用gdb调试工具进行分析呢?首先第一步是安装调试工具第二步是直接使用gdb l1app (其中l1app为软件编译出来的bin文件)在调试之前需要使用 ldd l1app 查看l1app中的库是否连接正确,如果确实链接库,需要手动连接。第三步进入gdb 命令行界面后输入run 开始执...
2020-04-30 09:20:00 186
原创 如何区分C++中的自动存储、静态存储和动态存储
C++中有3种管理数据内存的方式:自动存储、静态存储和动态存储(有时叫做自由存储空间和堆)1、自动存储在函数内部定义的常规变量使用自动存储空间,被称为自动变量这意味着他们所属的函数被调用时自动产生,在函数结束时消亡,如下面程序中的temp数组,当且仅当temp数据活动时存在。当程序控制权回到main时temp使用的内存将被自动释放。如果getname()返回的是temp的地址,在m...
2020-04-28 22:32:54 770
原创 如何区分数组指针和指针数组?
#include<iostream>using namespace std;int main(){ int c[4] = {1,2,3,4}; int *a[4]; //数组指针 数组里存储的是指针 int (*b)[4]; //指针数组 指针指向的是数组; b =&c; for(int i=0;i<4;i++) { a[i] = &...
2020-04-28 22:05:07 364
原创 从BIOS到bootloader
BIOS时期通过指向ROM的指令,执行ROM中的初始化工作代码,BIOS进行初始化工作;首先检查硬件配置,然后建立中断向量表和中断服务程序。Bootloader 时期Grud2 : Grand Unified Bootloader Version2 通过 grub2-mkconfig -o /boot/grub2/grub.cfg 来配置系统启动的选项使...
2020-04-02 17:00:28 611 3
原创 关于数组越界问题的有关讨论
首先理解数组的定义:数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。数组有两个特点:其一:线性表线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。其二:连续的内存空间和相同类型的数据。正是因为这两个限制,它才有了一个堪称“杀手锏”的特性:“随机访问”...
2020-04-02 11:13:31 386
原创 为什么大多数编程语言中,数组要从0开始编号,而不是从1开始呢?
从数组存储的内存模型上来看,“下标”最确切的定义应该是“偏移(offset)”。前面也讲到,如果用a来表示数组的首地址,a[0]就是偏移为0的位置,也就是首地址,a[k]就表示偏移k个type_size的位置,所以计算a[k]的内存地址只需要用这个公式:a[k]_address = base_address + k * type_size但是,如果数组从1开始计数,那我们计算数组元素a[...
2020-04-02 10:51:11 959
原创 时间复杂度与空间复杂度学习笔记
目录为什么进行时间复杂度分析?大O复杂度表示法时间复杂度分析1、只关注循环执行次数最多的一段代码2、加法法则:总复杂度等于量级最大的那段代码的复杂度3、乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积几种常见的时间复杂度实例分析1、O(1)2、O(logn)、O(nlogn)3、 O(m+n)、O(m*n)空间复杂度均摊时间复杂度为什么进行...
2020-04-01 15:31:44 369
原创 X86结构的今生前世
总线:CPU和其他设备的高速通道;CPU:运算单元:负责运算、加法位移等数据单元:CPU内部的缓存和寄存器组,存取速度快,存放数据和运算结果;控制单元:通过获取指令、执行指令;进程切换:CPU里有两个寄存器,专门保存当前处理进程的代码段的起始地址、以及数据段的起始地址。这里面写的都是进程A,说明当前执行的进程都是进程A的指令,等切换到进程B,就会执行B的指令,这叫...
2020-04-01 11:30:48 335
原创 一张图讲解Linux的系统调用
目录一、进程管理二、内存管理三、文件管理四、信号处理五、进程间通信六、网络通信七、glibc一、进程管理1、创建进程的系统调用叫fork;2、创建一个新的进程需要老的进程调用fork来实现,其中老的简称叫父进程,新的进程叫子进程3、当父进程调用fork创建进程的时候,子进程将各个子系统为父进程创建的数据结构也全部拷贝了一份;如果不进行特殊处理,...
2020-03-31 23:35:34 553
原创 如何解决undefined reference to `bblib_idft_burst_fxp'编译时函数未定义问题
本文主要提供一种解决问题的思路:出现的错误如图所示:bblib_idft_burst_fxp在库函数中已经定义了,然而编译的时候显示未定义;经过一天的尝试,最终还是让别人解决了,我在此记录一下方法解决问的思路。通过搜索未定义问题,可以发现,在使用库的时候,很多情况下对于库的顺序由很大的关系;在我在此处并不存在库的顺序问题,但是存在函数调用顺序的问题。bblib_idft_burst...
2020-03-31 22:25:08 509
原创 如何打开core转存以及安装debuginfo
首先通过命令:ulimit -c 查看是否打开了core生成的开关,如果是0则表示没有生成,可以使用ulimit -c unlimited命令来打开开关,此命令表示生成的core大小是不受限制的。但仅在shell中执行该命令,在关闭shell之后,命令会失效。如果想在整个系统中生效,方法如下:1) 编辑/root/.bash_profile文件,在其中加入ulitmit -S -c un...
2020-03-29 23:54:05 476
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人