【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];

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/676655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记——asp.net core 中的 REST

REST(reprentational state transfer,表层状态转移) REST原则:提倡按照HTTP的语义使用HTTP。 如果一个系统符合REST原则,我们就说这个系统是Restful风格的。 在RPC风格的Web API系统中,我们把服务端的代码…

文心一言 VS 讯飞星火 VS chatgpt (197)-- 算法导论14.3 5题

五、用go语言,对区间树 T 和一个区间 i ,请修改有关区间树的过程来支持新的操作 INTERVALSEARCH-EXACTLY(T,i) ,它返回一个指向 T 中结点 x 的指针,使得 x.int. lowi.low 且 x.int.high i.high ;或者,如果…

cool 框架 node 后端封装三方Api post请求函数

1.需求 现在一些数据源 ,需要从三方地址拿到一些数据 比如说电影列表 信息了 影院列表信息了 等一些展示的数据,但是人家这种东西 害需要使用 appkey appserect 这种验签 这种需求 你前端调用接口是直接调用不了的 因为需要用到验签 需要后端接口转接一…

爱奇艺图片格式演进

01 背景 图片是爱奇艺APP页面的主要视觉元素,对整体用户体验有着至关重要的影响。同时,由大量启动带来的图片CDN峰值带宽成本也有待降低。因此,在努力提升用户体验的同时,优化图片CDN峰值带宽成本已成为一项关键任务。而决定图片显…

【机器学习】Kmeans如何选择k值

确定 K 值是 K-means 聚类分析的一个重要步骤。不同的 K 值可能会产生不同的聚类结果,因此选择合适的 K 值非常重要。 以下是一些常见的方法来选择 K 值: 手肘法:该方法基于绘制聚类内误差平方和(SSE)与 K 值之间的关系图。随着 K 值的增加,SSE会逐渐降低,但降低幅度逐…

研究多态恶意软件,探讨网络安全与AI

前言 近期ChatGPT火遍全球,AI技术被应用到了全球各行各业当中,国内外各大厂商也开始推出自己的ChatGPT,笔者所在公司在前段时间也推出了自研的安全GPT,AI技术在网络安全行业得到了很多的应用,不管是网络安全研究人员、…

ElasticSearch之倒排索引

写在前面 本文看下es的倒排索引相关内容。 1:正排索引和倒排索引 正排索引就是通过文档id找文档内容,而倒排索引就是通过文档内容找文档id,如下图: 2:倒排索引原理 假定我们有如下的数据: 为了建立倒…

Matlab绘图经典代码大全:条形图、极坐标图、玫瑰图、填充图、饼状图、三维网格云图、等高线图、透视图、消隐图、投影图、三维曲线图、函数图、彗星图

学会 MATLAB 中的绘图命令对初学者来说具有重要意义,主要体现在以下几个方面: 1. 数据可视化。绘图命令是 MATLAB 中最基本也是最重要的功能之一,它可以帮助初学者将数据可视化,更直观地理解数据的分布、变化规律和趋势。通过绘制图表,可以快速了解数据的特征,从而为后续…

?你咋知道我的电脑密码的?---> Mimikatz!

还记得昨天在内网中提到了mimikatz这个工具,那么今天就来和大家讲一下这一款牛逼的工具 但是在这里先祝自己和各位看官新年快乐,万事顺遂 🐉🐲🐲🐲🐲 1.Mimikatz的介绍 传说呢,是…

学习通考试怎么搜题找答案? #学习方法#微信#其他

大学生必备的做题、搜题神器,收录上万本教材辅助书籍,像什么高数、物理、计算机、外语等都有,资源十分丰富。 1.菜鸟教程 菜鸟教程是一个完全免费的编程学习软件。 它免费提供了HTML / CSS 、JavaScript 、服务端、移动端、XML 教程、http…

开发JSP应用程序

开发JSP应用程序 问题陈述 TecknoSoft Pvt Ltd.公司的首席技术官(CTO)John Barrett将创建一个应用程序的任务委托给了开发团队,该应用程序应在客户访问其账户详细信息前验证其客户ID和密码。客户ID应是数字形式。John希望如果所输入的客户ID或密码不正确,应向客户显示错误…

Stable Diffusion 模型下载:Disney Pixar Cartoon Type A(迪士尼皮克斯动画片A类)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 目前还没有一个好的皮克斯迪士尼风格的卡通模型,所以我决定自己制作一个。这是将皮克斯风格模型与我自己的Loras合并在一起,创建一个通用的…

endnotesX9 如何批量导入 .enw文件

文章是用schoolar搜出来 点击下载引用之后,endnotesX9只能一个一个从.enw文件导入,麻烦 —————————————— 可以在schoolar保存到个人图书馆 类似于上面这种,我用的是保存,保存很多的论文之后点我的个人图书馆&#x…

MySQL进阶查询篇(6)-锁的种类与应用场景

MySQL是一个常用的关系型数据库管理系统。在多用户并发访问数据库时,为了确保数据的一致性和完整性,MySQL提供了多种锁机制。本文将介绍MySQL数据库中的锁的种类与应用场景。 1.悲观锁(Pessimistic Lock) 悲观锁是在进行数据读取…

【GO语言卵细胞级别教程】03.条件与循环语句

注意:以下演示所用的项目,在第一章节已经介绍了,这里不做赘述 目录: 【GO语言卵细胞级别教程】03.条件与循环语句1.条件语句1.1 if语句1.1.1 单层if语句1.1.2 if-else语句1.1.3 if-else-if 语句1.1.4 if 嵌套 1.2 switch 语句1.1…

Android java基础知识

一.Android java基础知识 第一个java程序Hello Worid: public class Hello {public static void main(String args[]) {System.out.println("Hello, world!");} }运行结果: rootubuntu:/home/topeet/guyilian# javac Hello.java rootubuntu…

使用CICFlowMeter 实现对pcap文件的特征提取【教程】

使用CICFlowMeter 实现对pcap文件的特征提取【教程】 针对现有的关于CICFlowMeter 的使用教程不够全面,一些细节没有展示,我将结合网络上的相关资料和实际的经历,提供一些经验和建议。 configuration information --------------- Windows…

C++入门学习(二十六)for循环

for (初始化; 条件; 递增/递减) { // 代码块 } 打印1~10&#xff1a; #include <iostream> using namespace std; int main() { for (int i 1; i < 10; i) { cout <<i<<endl; } return 0; } 打印九九乘法表&#xff1a; #include <iostream…

Java面向对象 访问控制权限

目录 访问控制权限继承多态组合代理向上转型staticfinal 访问控制权限 访问控制权限⼜称为封装 &#xff0c;它是⾯向对象三⼤特性中的⼀种&#xff0c;我之前在学习过程中经常会忽略封装&#xff0c;⼼想这不就是⼀个访问修饰符么&#xff0c;怎么就是三⼤特性的必要条件了&a…

uniapp的配置和使用

①安装环境和编辑器 注册小程序账号 微信开发者工具下载 uniapp 官网 HbuilderX 下载 首先先下载Hbuilder和微信开发者工具 &#xff08;都是傻瓜式安装&#xff09;&#xff0c;然后注册小程序账号&#xff1a; 拿到appid&#xff1a; ②简单通过demo使用微信开发者工具和…