Turbo译码原理说明(一)
Turbo Codes译码是一类具有反馈结构的伪随机译码器,2个码可以交替互不影响的译码,并且还可以通过关于系统码信息位的软判决输出相互传递信息,进行递推式迭代译码。Turbo译码结构如图1所示:
1 迭代译码原理介绍
接收端,接收序列经过串并转化之后,得到3个序列:
- 系统信息序列
- 分量编码器1相对应的校验序列
- 分量编码器2相对应的校验序列
若进行编码时对校验比特进行了删余,那么在分离 和 时要对删余的位置以“0”来填充,以此保证 和 以及 有相同的长度。 和 以及 在送入译码器之前要经过信道置信度Lc 的加权,加权后生成的对数似然比信息用表示。
分量译码器1的输入包括:
- 系统信息 ;
- 校验信息 ;
- 先验信息 ,由分量译码器2生成的外部信息 经过解交织生成的;
- ,为 映射交织函数。第一次迭代时,;
分量译码1的输出为,可得到:
(1)
由于 与 和 无关,故可以在交织后作为分量译码器2的先验信息,即 ;
同样地,分量译码器2的输入包括:
- 交织后的系统信息;
- 校验信息 ;
- 先验信息 ;
分量译码2的输出为 ,同样也可得到公式(2)如下所示:
(2)
同样地,将译码器2得到的外部信息经过解交织后,可以再作为分量译码器1的先验信息。通过多次的迭代,使得每个码元都可以得到来自序列中几乎所有码元信息,具体是通过迭代中反复交织反馈、去交织来实现的。这实际上就实现了译码的伪随机化。图2所示是流水线式的迭代结构。
2 Turbo译码算法介绍
Turbo码的译码算法主要分为两大类:一类是基于最大后验概率(Maximum A Posteriori,MAP)软输出算法,这类算法由标准MAP算法演化得来。对标准MAP算法取对数得到Log-MAP算法,对Log-MAP算法中的分支度量进行简化,得到MAX-Log-MAP算法。
另一类是基于Viterbi算法的软输出算法,是对卷积码的译码算法Viterbi的改进,使其满足SISO特性,软信息可以在两个分量译码器之间交换。这种改进的Viterbi算法为软输出Viterbi算法(SOVA)。
2.1 MAP算法介绍
MAP算法是SISO算法的代表,对于二元输入,可以用对数似然比(LLR)作为判决函数:
( 3)
表示k时刻的编码输入信息比特,y 表示接收机的接收序列。MAP会根据计算出来的 的值对 进行判决,判决规则为:
(4)
MAP算法主要是在给定接收序列 y 的情况下,用BCJR算法计算 LLR ,我们将(3)式进一步细化,可将写成:
(5)
是 时刻 l 的编码器状态,u+ 是状态对(s',s)的集合,对应事件 所发生的状态转移, ; u- 是状态对(s',s)的集合,对应事件 所发生的状态转移;
根据公式(5)可知,算法的关键是计算 ,然后在分子和分母中对所有合适的转移求和。以下我们先给出一些引理,方便我们进行计算推导:
首先定义:
引理1:前向度量计算
运用贝叶斯(Bayes)准则和全概率准则:
(6)
引理2:后向度量计算
(7)
引理3:分支度量计算
这里对应事件,如果 s不是从 s' 出发到达的有效状态,则
从而推出: ; 若 为有效状态,
(8)
由以上3个引理,可以最终推导出
(9)
至此,MAP算法推导过程完成。算法具体实现步骤可参见:
卷积译码之BCJR算法详细介绍https://blog.csdn.net/snowman898/article/details/123421074?spm=1001.2014.3001.5502
3 举例说明
以下所示的(2,1,1)SRCC码(Systematic Recursive Convolutional Code)作为分量码的PCCC码,SRCC码生成矩阵为,编码器框图如下图所示:
图3 SRCC码(2,1,1)编码框图
考虑序列输入长度为4,包含一个收尾比特,使用2*2分组(行-列)交织器,产生码率R=1/4的(12,3)PCCC码(注意,收尾比特不算信息比特)。译码网格如图4所示:
图4 SRCC码(2,1,1)译码网格图
假设输入向量 ,交织后输入分组为,第一个分量码的校验向量为, 第二个分量码的校验向量为;
我们可以把传输的12个比特排列成一个矩阵,如下表1-1所示。其中,输入向量 u 决定了前两行中的校验向量 , 交织后的输入向量 u' 决定了前两列中的校验向量 。假定信道信噪比为Eb/N0=0.25(-6.02dB),对应于接收向量 ,接收到的信道L值为:
(10)
第一次行译码 后的外部L值 |
第一次列译码 后的外部L值 |
第一次行和列译码 后的软输出L值 |
|||
-0.32 | -0.38 | -0.88 | -0.69 | -0.40 | -0.07 |
+0.77 | +0.47 | +0.23 | -0.04 | -0.80 | +2.03 |
第二次行译码 后的外部L值 |
第二次列译码 后的外部L值 |
第二次行和列译码 后的软输出L值 |
|||
-0.01 | -0.01 | -0.98 | -0.81 | -0.19 | +0.18 |
+0.43 | +0.77 | +0.07 | -0.21 | -1.30 | +2.16 |
第一次行译码 后的近似外部L值 |
第一次列译码 后的近似外部L值 |
第一次行和列译码 后的近似软输出L值 |
|||
-0.9 | -0.9 | -0.8 | -0.8 | -0.9 | -0.7 |
+1.4 | -0.3 | +1.1 | +0.1 | +0.7 | +1.4 |
第二次行译码 后的近似外部L值 |
第二次列译码 后的近似外部L值 |
第二次行和列译码 后的近似软输出L值 |
|||
-0.1 | -0.1 | -0.9 | -0.7 | -0.2 | +0.2 |
+0.6 | +0.5 | +0.3 | -0.5 | -0.9 | +1.6 |
p.s.:本案例较长,后续系列文章详细介绍。
Turbo译码原理说明(一)相关推荐
- ldpc译码讲解_LDPC码编译码原理及应用
LDPC 码编译码原理及应用 下一代移动通信系统的设计能力将远远超过当前的第三代移动通信系统的 能力 , 其中一个最重要的特点表现在需要在 20M 赫兹的带宽内 , 实现高达 100Mbps 的数据传 ...
- LDPC码的编译码原理简述
关于fpga调用ldpc IP core的相关参数问题可以看我的另一篇文章 LDPC码由Gallager在1962年提出,全称为 Low Density Parity-check Codes 低密度奇 ...
- LDPC译码原理(公式推导)及其matlab代码实现(超详细)
目录 博文更改记录 一.背景概述 二.LDPC译码理论 2.1 LDPC码的表示方法 2.1.1LDPC码的矩阵表示 2.1.2 Tanner图表示 2.2符号说明 2.3LDPC译码算法 2.3.1 ...
- turbo编码原理以及matlab实现
一.原理 Turbo的编码器由两个并行的分量编码器组成.分量编码器的选择一般是卷积码.在Turbo码中,输入序列在进入第二个编码器时须经过一个交织器 ,用于将序列打乱.两个编码器的输出共同作为冗余信息 ...
- 【RS码2】RS码的BM迭代译码原理详解及MATLAB实现(不使用MATLAB库函数-代码见CSDN同名资源)
关注公号[逆向通信猿]更精彩!!! 理论基础 订阅<信道编码>专栏,首先查阅各子程序的详解 [有限域生成]本原多项式生成有限域的原理及MATLAB实现 [有限域除法]二元多项式除法电路原理 ...
- 【BCH码2】BCH码的快速BM迭代译码原理详解及MATLAB实现(不使用MATLAB库函数-代码见CSDN同名资源)
关注公号[逆向通信猿]更精彩!!! 理论基础 订阅<信道编码>专栏,首先查阅各子程序的详解 [有限域生成]本原多项式生成有限域的原理及MATLAB实现 [有限域除法]二元多项式除法电路原理 ...
- 信道编码---RS编码与译码原理
本文介绍了RS编码以及译码的原理. 本文的内容基本上都来自刘梦欣的<基于FPGA的RS编译码研究与设计>,大家可以通过知网找到这篇文章,链接在下面.对RS码的原理讲解非常清楚,如果要看的话 ...
- 【BCH码3】BCH码的彼得森译码原理详解及MATLAB实现(不使用MATLAB库函数『需要完整代码请先私信』)
结果预览 理论基础 订阅<信道编码>专栏,首先查阅各子程序的详解 [有限域生成]本原多项式生成有限域的原理及MATLAB实现 [有限域除法]二元多项式除法电路原理及MATLAB详解 [有限 ...
- LDPC编译码原理介绍
引言 LDPC编码中文全称叫做低密度奇偶校验码,是众多信道纠错编码中的一种.在系统的信息传输速率小于信道容量时,LDPC编译码技术可以在较高传输速率下将有噪信道下的突发错误尽可能无限减小 ...
最新文章
- (转)Javascript模块化编程(一):模块的写法
- 文思创新深圳招聘biztalk
- 【已解决】Linux下安装MySQL数据库
- java 绘图 渐变_如何在Java 2D中创建渐变绘画?
- (五)HTML5本地存储——Web Storage
- MyEclipse非正常关闭问题
- 5v继电器模块实物接线_电气工程师都收藏的西门子S71200PLC接线图设计大全
- css 特殊性 权重排列
- mysql日期相关的函数
- IP切换器是做什么用的?
- 问卷与量表数据分析(SPSS+AMOS)学习笔记(六) : SPSS 描述性统计分析
- 【pandas数据分析】pandas安装
- chromium浏览器安装flashplayer(Ubuntu16.10)
- 离线底图瓦片,可用于Cesium加载使用【图说GIS】
- DirectX11 使用Cube Mapping 立方体环境贴图实现天空、物体反射效果
- 无限轮播的实现,未加自动轮播效果(非原创)
- bcdedit用法详解
- UninstallToo卸载软件
- 学习Photoshop的一些网站以及找素材的网站
- PHP涉及的所有英文单词
热门文章
- 利用android studio实现手机信息界面
- 《数字摄影与摄像》——风光摄影
- 某个音乐网站的音乐地址寻找方式
- 网络爬虫之requests模块的使用+Github自动登入认证
- python十个数排序_python基础练习--对10个数进行排序
- java事件影响处理接口,Java的(______)包中包含了许多用来处理事件的类和接口。...
- Git合并多次commits
- URLEncoder 空格编码问题
- 怎么设置oracle变量环境变量,window中oracle环境变量设置方法分享
- React18的useEffect会执行两次