当前位置: 首页 > news >正文

【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-卷积码原理

目录

一、引言

二、卷积编码的发展历史

2.1 卷积码的起源

2.2 主要发展阶段

2.3 重要里程碑

三、卷积编码的基本概念

3.1 基本定义

3.2 编码器框图

3.3 编码多项式

3.4 网格图(Trellis)描述

四、MATLAB示例


一、引言

卷积编码,作为数字通信领域中的一项关键技术,自其诞生以来便受到广泛关注。卷积编码是一种纠错编码方法,它通过引入冗余信息来提高数据传输的可靠性。本文旨在全面介绍卷积编码的基本概念、原理、应用场景、优缺点等方面,并结合具体案例进行分析,以期为读者提供一个清晰、深入的卷积编码知识体系。

二、卷积编码的发展历史

2.1 卷积码的起源

卷积码,作为一种前向纠错编码技术,其历史可以追溯到20世纪50年代。当时,通信领域的研究者们正在探索如何在有限的带宽和信噪比条件下,提高数据传输的可靠性。卷积码的出现,为这一挑战提供了一种有效的解决方案。

2.2 主要发展阶段

  1. 早期研究阶段:在20世纪50年代末到60年代初,卷积码的概念开始形成并得到初步研究。研究者们开始探索卷积码的基本原理和性能特点,为其后续的应用奠定了基础。
  2. 理论成熟阶段:随着研究的深入,卷积码的理论体系逐渐成熟。在这一阶段,研究者们提出了卷积码的代数表示方法、状态转移图等关键理论工具,为卷积码的工程应用提供了理论基础。
  3. 工程应用阶段:从20世纪70年代开始,卷积码开始广泛应用于各种通信系统中。特别是在卫星通信、移动通信等领域,卷积码因其强大的纠错能力和较高的编码效率而备受青睐。

2.3 重要里程碑

  1. 1972年:Viterbi算法的出现为卷积码的高效解码提供了可能。Viterbi算法是一种最大似然解码算法,它能够在多项式时间内找到最可能的原始信息序列,从而大大提高了卷积码的解码效率。
  2. 1980年代:随着移动通信的快速发展,卷积码成为了第一代和第二代移动通信系统(如GSM)中的关键技术之一。在这一阶段,卷积码的优化和改进持续进行,以提高其在不同信道条件下的性能。
  3. 1990年代:随着第三代移动通信系统(如3G、4G)的兴起,卷积码逐渐被更为先进的编码技术(如Turbo码和LDPC码)所取代。然而,卷积码在某些特定场景(如深空通信、水下通信等)中仍具有重要地位。

三、卷积编码的基本概念

3.1 基本定义

卷积码将k个信息比特编成n个比特,特别适合以串行形式进行传输,时延小。

将卷积码记作(n,k,N)。一般来说,卷积码的k和n是比较小的整数。

  • 码率仍定义为k/n。
  • 卷积码是将k个比特的信息段编成n个比特的码组,其编码生成的监督码元不止和k个比特的信息段有关,还和前面的m=(N-1)个信息段有关。可知,一个监督码元同时和前m个比特以及当前输入的一个比特信息有关,即监督着N=m+1个比特,我们将N成为约束度,所有监督码元的长度nN称为约束长度。

综上,k即为卷积码的输入路数(多路输入要进行串并转换),n为输出比特个数,m为移位寄存器的位数(用于保存所需的前几个比特),N=m+1。

3.2 编码器框图

(n,k,N)=(3,1,3)卷积码编码器框图如下:

输入和输出的关系式:

(n,k,N)=(3,1,3)卷积码编码器框图如下:

输入和输出的关系式:

卷积编码的生成多项式是描述卷积编码器内部状态转移和输出码字生成的一组多项式。这些多项式通常表示为 (g(D)),其中 (D) 是一个延迟算子,表示数据在编码器中的延迟。生成多项式用于确定编码器的状态转移和输出码字的生成规则。

3.3 编码多项式

上面的编码器多项式如下:

假设输入序列x[k]=[1101],其多项式: ​​ 。则输出序列y[n]:

 

运算符号为位异或运算。

可以得到对应输入4个比特的输出数据为:[111,110,010,100];

根据上面的编码器图和输入输出关系式,可以看出来,卷积编码是一种前向纠错编码技术,其核心思想是将待传输的信息序列与特定的编码函数进行卷积运算,生成包含冗余信息的编码序列。卷积编码的主要参数包括约束长度(N)、编码速率(k/n)和生成多项式等,这些参数决定了编码的性能和特点。

3.4 网格图(Trellis)描述

卷积码的网格图表示如下:

网格图显示了时序的变化,可以更为清晰的显示出编码的过程。例如当输入(1101)时,假设移位寄存器的初始状态为a状态,则编码输出如红线所示。

四、MATLAB示例

以下是一个简单的MATLAB脚本示例,演示了如何实现一个(n,k,N)=(3,1,3) 的卷积编码器:

function encoded_data = convolutionalEncoder(input_data, K, g)  % 参数:  % input_data - 输入数据比特流 (1xN vector)  % K - 约束长度 (寄存器数量 + 1)  % g - 生成多项式的矩阵形式 (Gx(K-1) matrix, G是输出数量)  % 输出:  % encoded_data - 编码后的数据比特流 (1x(3*N) vector for R=1/3)  N = length(input_data); % 输入数据的长度  G = size(g, 1); % 输出数量 (对于R=1/3, G应为3)  % 初始化寄存器状态和输出数据  register = zeros(1, K-1);  encoded_data = zeros(1, N*G);  % 对输入数据进行卷积编码  for i = 1:N  % 构造当前寄存器的内容(包括新输入比特)  register_with_input = [input_data(i) register];  % 对每个生成多项式计算输出比特  for j = 1:G  % 提取对应的生成多项式  generator = g(j, :);  % 计算异或和  output_bit = mod(sum(generator .* register_with_input), 2);  % 将输出比特添加到编码后的数据中  encoded_data((i-1)*G + j) = output_bit;  end  % 更新寄存器状态  register = register_with_input(1:end-1);  end  
end  % 示例使用  
% 定义生成多项式 (通常为八进制或十六进制形式, 这里转换为二进制)  
% 例如: g1 = [1 1 1], g2 = [1 0 1], g3 = [1 1 0] (八进制)  g_binary = [1 0 0;1 0 1;1 1 1];% 设置约束长度 (K=4 对于上述生成多项式)  
K = 3;  % 输入数据比特流  
input_data = [1 1 0 1 ];  % 进行卷积编码  
encoded_data = convolutionalEncoder(input_data, K, g_binary);  % 显示编码后的数据  
disp('Encoded Data:');  
disp(encoded_data);

上面的程序已经通过调试,运行结果如下:

输入:

% 输入数据比特流

input_data = [1 1 0 1 ];

% 输出数据比特流

Encoded Data = [1 1 1 1 1 0 0 1 0 1 0 0];

大家可以试着运行一下,有问题可以留言。欢迎大家在评论区探讨。

相关文章:

【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-卷积码原理

目录 一、引言 二、卷积编码的发展历史 2.1 卷积码的起源 2.2 主要发展阶段 2.3 重要里程碑 三、卷积编码的基本概念 3.1 基本定义 3.2 编码器框图 3.3 编码多项式 3.4 网格图(Trellis)描述 四、MATLAB示例 一、引言 卷积编码,作为数字通信领域中的一项…...

揭开Markdown的秘籍:标题|文字样式|列表

🌈个人主页:聆风吟 🔥系列专栏:Markdown指南、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. ⛳️Markdown 标题二. ⛳️Markdown 文字样式2.1 🔔斜体2.2 &…...

移动最小二乘法

移动最小二乘法(Moving Least Square,MLS)主要应用于曲线与曲面拟合,该方法基于紧支撑加权函数(即函数值只在有限大小的封闭域中定义大于零,而在域外则定义为零)和多项式基函数,通过…...

【LeetCode】37. 解数独(困难)——代码随想录算法训练营Day30

题目链接:37. 解数独 题目描述 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&…...

VUE学习——属性绑定

属性绑定&#xff0c;就是给html添加id、class这样类似的操作。 <template><div v-bind:id"dynamicId"><div v-bind:class"dynamicClass">Test</div></div> </template><script>export default{data(){return{…...

vue3 之 通用组件统一注册全局

components/index.js // 把components中的所组件都进行全局化注册 // 通过插件的方式 import ImageView from ./ImageView/index.vue import Sku from ./XtxSku/index.vue export const componentPlugin {install (app) {// app.component(组件名字&#xff0c;组件配置对象)…...

[Java][算法 双指针]Day 02---LeetCode 热题 100---04~07

LeetCode 热题 100---04~07 第一题&#xff1a;移动零 思路 找到每一个为0的元素 然后移到数组的最后 但是需要注意的是 要在给定的数组原地进行修改 并且其他非零元素的相对顺序不能改变 我们采用双指针法 定义两个指针i和j i和j一开始分别都在0索引位置 然后判断j所…...

【问题解决】如何将一个服务器的docker迁移到另一个服务器

要将Docker容器从一台机器迁移到另一台机器&#xff0c;可以按照以下步骤操作&#xff1a; 在机器A上提交容器为镜像&#xff1a; 使用docker commit命令将运行中的容器保存为新的镜像。这里需要容器的ID或名称&#xff0c;以及你想要命名的目标镜像名。 docker commit [容器…...

C++单例模式详解

目录 0. 前言 1. 懒汉式单例模式 1.1 最简单的单例模式 1.2 防止内存泄漏 1.2.1 智能指针的方法 1.2.2 静态嵌套的方法 1.3 保证线程安全 1.4 C11版本的优雅解决方案 2. 饿汉式单例模式 0. 前言 起因是在程序中重复声明了一个单例模式的变量&#xff0c;后来程序怎么调…...

LLM应用开发与落地:流式响应

一、背景 最近智能客服产品给到一个游戏客户那边&#xff0c;客户那边的客服负责人体验后认为我们产品回答的准确率是还是比较高的。同时&#xff0c;他反馈了几个需要改进的地方&#xff0c;其中一个就是机器人回复慢。机器人回复慢有很多原因&#xff0c;也有优化方式&#…...

神经网络 | 基于 CNN 模型实现土壤湿度预测

Hi&#xff0c;大家好&#xff0c;我是半亩花海。在现代农业和环境监测中&#xff0c;了解土壤湿度的变化对于作物生长和水资源管理至关重要。通过深度学习技术&#xff0c;特别是卷积神经网络&#xff0c;我们可以利用过去的土壤湿度数据来预测未来的湿度趋势。本文将使用 Pad…...

江科大STM32 终

目录 SPI协议10.1 SPI简介W25Q64简介10.3 SPI软件读写W25Q6410.4 SPI硬件外设读写W25Q64 BKP备份寄存器、PER电源控制器、RTC实时时钟11.0 Unix时间戳代码示例&#xff1a;读写备份寄存器BKP11.2 RTC实时时钟 十二、PWR电源控制12.1 PWR简介代码示例&#xff1a;修改主频12.3 串…...

《MySQL 简易速速上手小册》第10章:未来趋势和进阶资源(2024 最新版)

文章目录 10.1 MySQL 在云计算和容器化中的应用10.1.1 基础知识10.1.2 重点案例&#xff1a;使用 Python 部署 MySQL 到 Kubernetes10.1.3 拓展案例 1&#xff1a;在 AWS RDS 上部署 MySQL 实例10.1.4 拓展案例 2&#xff1a;使用 Docker 部署 MySQL 10.2 MySQL 和 NoSQL 的整合…...

Stable Diffusion 模型下载:GhostMix(幽灵混合)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 GhostMix 是绝对让你惊艳的模型&#xff0c;也是自己认为现在最强的2.5D模型。我认为模型的更新应该是基于现有的画面整体不大变的前提下&#xff0c;提高模型的成…...

django解决Table ‘xx‘ already exists的方法

1&#xff0c;首先看已存在的这个库表结构是什么样的&#xff0c;先让对应的model.py恢复到和他一样的字段 2&#xff0c;删除对应app下的migrations目录里面除__init__.py文件的其他所有文件 3&#xff0c;回到manage.py所在目录执行python manage.py makemigrations 4&#x…...

qt学习:arm摄像头+c调用v412框架驱动+qt调用v412框架驱动 显示摄像头画面

目录 跟内核进行数据通信的函数 编程步骤 c代码 头文件 打开摄像头文件 /dev/videox 获取当前主机上&#xff08;开发板&#xff09;摄像头列表信息 设置当前摄像头的画面格式 比如说 设置 采集图像的宽度为640 高度 480 在内核空间中&#xff0c;申请一个缓冲区队列…...

Linux 36.2@Jetson Orin Nano基础环境构建

Linux 36.2Jetson Orin Nano基础环境构建 1. 源由2. 步骤2.1 安装NVIDIA Jetson Linux 36.2系统2.2 必备软件安装2.3 基本远程环境2.3.1 远程ssh登录2.3.2 samba局域网2.3.3 VNC远程登录 2.4 开发环境安装 3. 总结 1. 源由 现在流行什么&#xff0c;也跟风来么一个一篇。当然&…...

牛客网SQL264:查询每个日期新用户的次日留存率

官网链接&#xff1a; 牛客每个人最近的登录日期(五)_牛客题霸_牛客网牛客每天有很多人登录&#xff0c;请你统计一下牛客每个日期新用户的次日留存率。 有一个登录(login。题目来自【牛客题霸】https://www.nowcoder.com/practice/ea0c56cd700344b590182aad03cc61b8?tpId82 …...

echarts 曲线图自定义提示框

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>曲线图</title><!-- 引入 ECharts 库 -->…...

幻兽帕鲁服务器怎么搭建?Palworld多人联机教程

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...