Turbo码原理简介

1993年C.Berrou、A.Glavieux和P.Thitimajshiwa首先提出了称之为Turbo码的并行级联编译码方案。Turbo码性能取决于码的距离特性。线性码的距离分布同于重量分布,如果低重量的输入序列经编码得到的还是低重量的输出序列,则距离特性变坏。该特性对于块码来说不存在问题;然而对于卷积码,则是个非常严重的问题。因为卷积码的距离特性是影响误码率的一个非常重要的因素。

在Turbo码中,利用递归系统卷积码(RSC)编码器作为成员码时,低重量的输入序列经过编码后可以得到高重量的输出序列。同时交织器的使用,也能加大码字重量。实际上,Turbo码的目标不是追求高的最小距离,而是设计具有尽可能少的低重量码字的码。Turbo码由两个递归系统卷积码(RSC)并行级联而成。译码采用特有的迭代译码算法。

1  Turbo码编码原理

典型的Turbo码编码器结构框图如图2所示:由两个反馈的编码器(称为成员编码器)通过一个交织器I并行连接而成。如果必要,由成员编码器输出的序列经过删余阵,从而可以产生一系列不同码率的码。例如,对于生成矩阵为g=[g1,g2]的(2,1,2)卷积码通过编码后,如果进行删余,则得到码率为1/2的编码输出序列;如果不进行删余,得到的码率为1/3。一般情况下,Turbo码成员编码器是RSC编码器。原因在于递归编码器可以改善码的比特误码率性能。

2 编码

方案中使用的Turbo码为1/3码率的并行级联码,它的编码器由两个相同的码率为1/2的RSC编码器及交织器组成,如图4所示。

由于与非递归卷积码相比,递归卷积码产生的码字重量更大,所以这里采用了两个相同的系统递归卷积码(RSC)。信息序列分成相同的两路,第一路经过RSC编码器1,输出系统码及校验码。另一路先通过交织器进行交织,使信息序列在1帧内重新排列顺序,然后经过RSC编码器2得到系统码和对应的校验码,由于该系统码和实际上都是原信息序列,只是排列顺序不同,在接收端完全可以通过对进行交织得到,因此在传输过程中可以省去,而只保留对应的校验位。在具体实现中, RSC编码器2的输入是通过对RSC编码器1的系统输出进行交织来得到的。再经过并/串转换,作为整个Turbo码编码器的输出。对应于每1位信息比特,该编码器输出3位,因此其码率为1/3。如果采用了奇偶删余,即在并/串转换时,在校验位奇位上取,偶位上取或反之,则码率可升为1/2。

由于RSC编码器不能如非递归编码器一样通过输入连“0”序列来使编码器复位(网格终止),因此通过设计如图8所示的A、B间的开关来控制编码器终止,当一帧结束时,开关由A打到B,则经过m时刻后,编码器复位,可以对下一帧数据进行编码。这里m=2。只有RSC编码器1(外编码器)进行了网络终止,RSC编码器2保持开放。

3        译码

由于Turbo码是由两个或多个成员码经过不同交织后对同一信息序列进行编码。译码时,为了更好地利用译码器之间的信息,译码器应该利用软判决信息,而不是硬判决信息。因此,一个有两个成员码构成的Turbo码的译码器是由两个与成员码对应的译码单元和交织器与解交织器组成的,将一个译码单元的软输出信息作为下一个译码器单元的输入,为了进一步提高译码性能,将此过程迭代数次。这就是Turbo码的迭代译码算法的原理。

Turbo码可以利用多种译码算法,如最大似然译码MAP、Log-MAP算法、Max-log-MAP算法和SOVA算法等。
图所示为Turbo码迭代译码器的结构。

Turbo码译码器为串行结构,两个编码器所产生的校验信息通过串并转换被分开,分别送到对应的译码器输入端。首先,第一级译码器根据系统位信息L(ys|u)和第一级编码器的校验位信息L(y1|x1)得到输出信息(此时译码器2外信息Le[C2](u)=0),输出信息包含两部分,一部分是由译码器根据码字相关性提取出来的外信息,用Le[C1](u)表示;另一部分来自于系统位对应的信道输出,在传递给下一级译码器之前,被减去。Le[C1](u)在交织之后被送到译码器2作为先验信息,译码器2因此根据校验位信息、系统位信息和Le[C1](u)这三者共同做出估计,得到输出信息L(u),L(u)在减去Le[C1](u)+L(ys|u)之后,得到译码器2的外信息Le[C2](u),它在解交织之后,反馈给第一级译码器作为先验信息,结合Le[C2](u),译码器1重新做出译码估计,得到改善的外信息。而此时的外信息又可以传递到译码器2,如此往复,形成迭代过程。最终,当达到预先设定的迭代次数或满足迭代结束条件时,译码结束,取L(u)的符号作为最终硬判决输出。

a)SOVA译码算法

传统Viterbi算法用来计算卷积码的最大似然(ML)序列,只提供硬判决输出。但在级联系统中,前级硬判决实际上相当于丢失了信息,使后级译码器无法从解调得到的软输出中获益。SOVA是改进的Viterbi算法,它可以给出译码结果的可靠性值(软输出),这个可靠性值作为先验信息传递给下级译码器,从而提高译码性能。

b) LOG-MAP译码算法

LOG-MAP是改进的MAP(最大后验概率)算法,它在对数域进行计算,可以将MAP算法中大量的乘法运算化简为加法运算,从而降低计算量。除此之外,它的基本原理与经典MAP算法相同。

MAP算法由Bahl等人于1974年提出,因此又称为BCJR算法。与Viterbi算法不同,它估计出最大似然比特,而前者产生最大似然序列。也就是说Viterbi算法提供整体最优解,而MAP算法则提供个体最优解。

前面已经提到,卷积码编码过程实际就是一个有限状态机的状态转移过程。设t时刻编码器从状态S t-1转移到状态S t,对应的输入为u t=k,k∈{0,1},输出校验位为x t, 它与u t一起传输到接收端,译码器的任务就是根据接收信号y t来尽可能恢复u t。图3.23示意了这一过程。由于u t与状态转移是对应的,因此,有

(3.20)

式中表示接收序列[y1….yN]。因此,只要得到所有的

(3.21)

就可以通过对其中那些对应于的状态转移概率求和来得到信息比特的后验概率。由贝叶斯定理,

(3.22)

上式右侧分子项联合概率可作进一步化简:

(3.23)

以上的化简过程中应用了马尔可夫信源的性质,即t时刻以后的状态只与St及以后的输入有关,而与t时刻之前的状态和输入无关,也就是说得到了t时刻的状态,之后的状态转移就不再依赖于以及t-1时刻的状态。(3.23)式分为三部分,可以分别定义如下,令:

则联合概率可写为:

(3.24)

其中,和可以用递归方法求出:

(3.25)

(3.26)

通常,编码器的初始状态已知,对于编码器1,帧结束时网络终止,因此其终了状态了也是已知的,因此有

以及

对于编码器2,由于网格不终止,可以认为它的终了状态是平均分布的。另外,有

(3.27)

式中为信息符号,为对应于状态转移的编码输出符号。上式中为信息符号的先验概率,而条件概率可由如前所述的信道模型得到。

MAP算法可按以下步聚实现:

1.对于每个时刻t,根据解调软输出y和信息符号u计算式(3.27);

2.根据式(3.25)及式(3.26)递归计算及;

3.根据式(3.24)计算联合概率;

4.根据式(3.20)得到;

5.计算每个信息符号的对数似然比

式(3.22)中的分母在第5步中被约去,因此不必求得具体数值。另外,在具体实现中,上述概率计算都是在对数域中进行的,因此乘法运算都变成了加法运算。

3.5.4SOVA和LOG-MAP译码算法性能比较

在实现过程中,选用了SOVA和LOG-MAP两种译码算法,并对两者的性能进行了仿真比较。

图3.24 SOVA和LOG-MAP译码算法在不同迭代次数下的误码率曲线

仿真中采用1/3码率的Turbo码,共传输了20000帧(每帧210比特,共2百万比特),采用与软件中相同的螺旋交织方案,通过高斯白噪声(AWGN)信道,分别采用LOG-MAP和SOVA译码,迭代1-5次。图3.24,3.25分别表示了两种译码算法的误码率和误帧率曲线。

由图3.24,3.25可得到如下结论:

(1)                     在相同的迭代次数和信噪比条件下,LOG-MAP译码的误码率和误帧率性能都明显优于SOVA。

(2)                     迭代次数越高,误码率性能越好。但是,大部分迭代增益都出现在前两次迭代中。

(3)                     在信噪比较小时(低于0dB),SOVA迭代译码误码率随信噪比增大降低较快,信噪比较大时误码率改善较缓慢。因此,在信道噪声比较弱时,减少迭代次数不会对误码率性能造成太大影响,却可以降低译码时延;而信道环境比较差时,可增加迭代次数来提高误码率性能。

(4)                     LOG-MAP译码的性能非常优异,2次迭代在信噪比为-0.5dB时误码率即可达到10-6

图3.25 SOVA和LOG-MAP译码算法在不同迭代次数下的误码率曲线

从误码率性能看,Log-MAP优于SOVA。从实现复杂度看,SOVA译码算法实现比较容易,更简单。因此,可以根据实际需要来选择译码方式。

3.5.5译码迭代终止条件

Turbo码的迭代译码终止条件的设计是个很重要的问题,因为迭代译码是个很耗资源的计算,另一方面,过多的迭代可能会造成溢出或者振荡,从而得到错误的输出结果。

最简单的终止方法就是指定迭代次数,实验表明经过5次左右迭代之后,能够从以后的迭代过程中获得的好处就很少了,因此可以指定迭代次数,使译码过程在达到设定数值时结束。这是本项目中采取的方法之一。

然而,固定迭代次数有两个弊端。当信道特性较好时,多余的迭代造成了计算资源的浪费,另一方面,当信道特性差,误码率高时,又不能充分发挥出Turbo码的性能。理想的情况下,迭代次数应随着误码情况动态的变化。

另一种译码终止算法是在信息序列中加入CRC校验字,每次迭代之后即检测信息序列是否有错,无错时译码即结束,为防止误码率很高时不能完全纠错的情况,还必须设定最大迭代次数,达到这一数值后,即使译码结果仍然有错误,迭代过程也被强制终止。CRC校验适用于信道特性比较好的情况,实验表明在这种情况下,只需一两次迭代就可以得到正确结果。它的缺点是必须加入多余的校验位,降低了通信效率。

另外一种效果较好的方法是采用检测成员编码器输出之间的交叉信息熵,当发现熵值低于某一门限时,表明再次迭代能够获得的增益已经很小,因此终止译码。这种方法能够非常好的挖掘出Turbo码的潜力。它的缺点是计算交叉信息熵需要较大的计算量和存贮空间。

多进制正交扩频系统中软信息的提取

多进制正交扩频系统:

l  进制数:

l  每个进制代表编码交织比特个数:

l  个编码数据为()

l  个编码比特需要个正交扩频码()

l  扩频码的波形为(),是由构成的N维伪随机码序列波形

l  信道:AWGN信道,叠加一个N维的零均值且双边谱为高斯白噪声

l  接收信号:R

假设发送等概,

l  个编码数据的第j位为0,即的那些码子的集合记为;

l  个编码数据的第j位为1,即的那些码子的集合记为;

则关于第个编码比特的对数似然比(软信息)为

(1)

其中AWGN信道下,接收信号的先验概率为

(2)

便于电路实现的、次最优的软信息提取:

l  利用MAX近似公式

(3)

l (1)式变为

l 将(2)式代入(1)式可得:

其中表示接收序列R和本地伪码序列之间的欧式度量。

AWGN下如果传送比特0和1的能量相等,则欧式度量就等价于相关度量,即

其中就是相关匹配滤波器的输出。

在多进制正交扩频系统接收端,与码子D()相对应伪码的相关匹配滤波器的输出设为,即

根据码子D中第j个比特的取值对D进行分组:

则第j个比特的软判决信息为:

进一步归一化为

其中

表示的置信度信息,越接近+1表示判决为1的可能性越大;

越接近-1表示判决为0的可能性越大。

Turbo码测试报告

一、  测试的Turbo码参数

1、             数据帧长:4096

2、             码率:1/2

3、             生成矩阵:(13,15)

4、             编码后一帧长度:4096*2+12=8204

5、             信噪比范围:0~9dB,间隔1dB

6、             测试长度1000帧

二、  测试内容

1、             Turbo软判决下性能

2、             Turbo硬判决下性能(译码之前是解调输出的硬判决)

3、             4-16walsh码软信息提取下的Turbo码性能

Turbo码原理简介相关推荐

  1. javascript原理_JavaScript程序包管理器工作原理简介

    javascript原理 by Shubheksha 通过Shubheksha JavaScript程序包管理器工作原理简介 (An introduction to how JavaScript pa ...

  2. Nginx 反向代理工作原理简介与配置详解

    Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...

  3. 【Android 异步操作】Handler ( 主线程中的 Handler 与 Looper | Handler 原理简介 )

    文章目录 一.主线程中的 Handler 与 Looper 二.Handler 原理简介 一.主线程中的 Handler 与 Looper Android 系统中 , 点击图标启动一个应用进程 , 就 ...

  4. VC++实现Turbo码

    Turbo码的概述如下, Turbo码的设计和分析 主要包括交织器的设计.码的级联方式.译码算法.Turbo码的性能分析等.在性能分析中,主要对码重分布及距离谱进行分析,但由于没有相应的理论支持,这种 ...

  5. 基于MATLAB的turbo码代码,一种基于Simulink的Turbo码仿真实现

    一种基于Simulink的Turbo码仿真实现 Implementation of Turbo Code Simulation Based on Simulink DOI: 10.12677/HJWC ...

  6. CountDownLatch原理简介和使用过程

    前言 本文介绍下面试的高能考点 countDownLatch 的原理和应用 countDownLatch具有的功能 CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这 ...

  7. Redis分布锁原理简介和实现过程

    前言 这篇文章介绍下如何实现redis来实现分布式锁及原理简介 原理简介 redis 获取分布式锁使用lua脚本的命令 setnx pexpire(提供了毫秒的过期时间,expire提供了基于秒的过期 ...

  8. linux设备驱动程序架构的研究,Linux设备驱动程序学习(12)-Linux设备模型(底层原理简介)...

    Linux设备驱动程序学习(12) -Linux设备模型(底层原理简介) 以<LDD3>的说法:Linux设备模型这部分内容可以认为是高级教材,对于多数程序作者来说是不必要的.但是我个人认 ...

  9. turbo编码原理以及matlab实现

    一.原理 Turbo的编码器由两个并行的分量编码器组成.分量编码器的选择一般是卷积码.在Turbo码中,输入序列在进入第二个编码器时须经过一个交织器 ,用于将序列打乱.两个编码器的输出共同作为冗余信息 ...

  10. Xposed原理简介及其精简化

    Xposed原理简介及其精简化 Xposed是⼀个很强⼤的Android平台上的HOOK⼯具,⽽且作者为了⽅便开发者使⽤开发了⼀个APP(Xposed Installer,下⽂称为Installer) ...

最新文章

  1. WebBrowser
  2. 为了熟练掌握动态SQL你必须要知道Mybatis中的OGNL表达式
  3. 让Web开发者事半功倍的8个网站
  4. Elasticsearch技术解析与实战(七)Elasticsearch批量操作
  5. 不用到处找图标了!模库承包你所有的图标素材!
  6. 中国移动虚拟服务器设置,在中国移动公众服务云平台上服务器虚拟化的设计与实现...
  7. iOS--资料--类目Category收集
  8. Eclipse开发struts完全指南(二)安装与配置
  9. WPF学习笔记(5):两个DataGrid的滚动条实现同步滚动(转)
  10. LNMP一键安装脚本使用 离线安装
  11. 肿瘤外显子数据分析 -- 20201119
  12. android模拟器 vt,逍遥安卓模拟器怎么开启VT模式 VT虚拟化设置方法
  13. 判断Linux环境是否装了NCCL,安装cuDNN和NCCL指南
  14. 解决小熊无叶电风扇摇头嘎嘎响的问题
  15. 乘方计算机在线应用,乘方开方计算器v1.2免费版
  16. CS143 6、7. 自顶向下和自底向上的语法分析
  17. 凡人修c传(四)翻牌子(POJ - 3279 - Fliptile每日一水)
  18. ZZULIOJ:1088: 手机短号 (多实例)
  19. APP批量自动生成各种不同分辨率尺寸图标和启动页(Android和iOS都支持) - 使用cordova-res图文教程
  20. MS17-010(永恒之蓝)适合Windows 2008r2的补丁如何打?

热门文章

  1. 怎样使用U盘启动盘安装乌班图系统
  2. Windows Server 2019 安装应用商店
  3. 关于Eclipse配置Tomcat8的问题
  4. keil5怎么放大字体_keil5不同字体不全 keil字体放大快捷键
  5. QQ机器人闪照转发/撤回消息转发【最新beta2版本】
  6. 爬虫python漏洞群_python3-爬取cnnvd漏洞信息
  7. python实现邮件客户端_SMTP邮件客户端Python
  8. font-family:常用中文字体的英文名称 (宋体 微软雅黑)
  9. 《流畅的Python第二版》读书笔记——Python数据模型
  10. 145分计算机考研408复习复盘