【5G NR 协议解读】3GPP TS 38.212 (R18) 复用和信道编码(二)

2024-03-18 00:20

本文主要是介绍【5G NR 协议解读】3GPP TS 38.212 (R18) 复用和信道编码(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

本文基于3GPP TS 38.212 (R18) 复用和信道编码协议。

本文档规定了5G NR的编码、多路复用和物理信道映射。

5 总体流程

来自/去往MAC层的数据流和控制流会进行编码/解码,以便通过无线传输链路提供传输和控制服务。信道编码方案是错误检测、错误纠正、速率匹配、交织以及传输信道或控制信息映射到/从物理信道中拆分出来的组合。

5.1 CRC计算

用a0, a1, a2, ..., aA-1表示CRC计算的输入位,用p0, p1, p2, ..., pL-1表示奇偶校验位,其中A是输入序列的大小,L是奇偶校验位的数量。奇偶校验位由以下循环生成多项式之一生成:

  • Gcrc24A(D) = [D24+D23+D18+D17+D14+D11+D10+D7+D6+D5+D4+D3+D1+1]; L=24; 
  • Gcrc24B(D) = [D24+D23+D6+D5+D1+1] ;L=24;
  • Gcrc24C(D) = [D24+D23+D21+D20+D17+D15+D13+D12+D8+D4+D2+D1+1];L=24; 
  • Gcrc16(D) = [D16+D12+D5+1] ;L=16;
  • Gcrc11(D) = [D11+D10+D9+D5+1] ;L=11;
  • Gcrc6(D) = [D6+D5+1] ;L=6;

编码以系统形式进行,这意味着在GF(2)中,多项式:

  • a0D(A+L-1)+a1D(A+L-2)+...+a(A-1)D(L)+p0D(L-1)+p1D(L-2)+...+p(L-2)D(1)+p(L-1)

当上面的多项式被相应的CRC生成多项式除时,它的余数为0。

附加CRC后的位用 ( b_0, b_1, b_2, ..., b_{n-1} ) 表示,其中 ( n ) 是总位数。原始数据位用 ( a_0, a_1, a_2, ..., a_{A-1} ) 表示,其中 ( A ) 是原始数据的位数。( b ) 与 ( a ) 之间的关系可以通过串联CRC校验位和原始数据位来表示:( b = a || crc ),其中 ( crc ) 是根据原始数据计算得到的CRC校验位。这个关系确保了接收方可以通过对接收到的数据进行CRC校验来检测数据传输过程中是否发生了错误。

function crc = calculateCRC(data, poly, initValue, finalXor)  % data: 输入数据,应为uint8类型的数组  % poly: CRC多项式,例如CRC-8的多项式可以是0x07  % initValue: CRC计算的初始值  % finalXor: 计算结束后与CRC值进行异或操作的值(如果不需要,可以设置为0)  % 确保输入数据是uint8类型  if ~isa(data, 'uint8')  error('Input data must be of type uint8.');  end  % 初始化CRC寄存器  crc = uint8(initValue);  % 对输入数据的每个字节进行处理  for i = 1:length(data)  % 将当前字节与CRC寄存器进行异或操作  crc = bitxor(crc, data(i));  % 对异或结果进行模2除法(实际上是按位异或和移位操作)  for j = 1:8  if crc & 0x80 ~= 0 % 检查最高位是否为1  crc = bitshift(crc, -1); % 右移一位  crc = bitxor(crc, poly); % 如果最高位是1,则与多项式进行异或  else  crc = bitshift(crc, -1); % 右移一位  end  end  end  % 应用最终的异或操作(如果有的话)  crc = bitxor(crc, finalXor);  
end  % 示例用法:  
data = uint8([72 101 108 108 111 32 87 111 114 108 100]); % "Hello World"字符串转换为uint8数组  
poly = 0x07; % CRC-8多项式示例  
initValue = 0x00; % 初始值示例  
finalXor = 0x00; % 最终异或值示例(通常不需要)  crcValue = calculateCRC(data, poly, initValue, finalXor);  
disp(['CRC value: ', num2hex(crcValue)]);

这篇关于【5G NR 协议解读】3GPP TS 38.212 (R18) 复用和信道编码(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820659

相关文章

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列