信息论-Turbo码学习
1.Turbo码:
信道编码的初期:分组码实现编码,缺点有二:只有当码字全部接收才可以开始译码,需要精确的帧同步时延大,增益损失多
解决方案:卷积码:充分利用前一时刻和后一时刻的码组,延时小,缺点:计算复杂度高
Turbo码,依靠迭代译码解决计算复杂性问题,通过在编译码器中交织器和解交织器的使用,有效地实现随机性编译码的思想,通过短码的有效结合实现长码,达到了接近Shannon理论极限的性能(在两个分量译码器之间迭代译码)
缺点:时延问题。
百科结论:Turbo码采用反馈卷积码是为了获得更大的交织增益;Turbo码的性能主要取决于它的有效自由距离;Turbo码在低信噪比下具有近Shannon界纠错能力的原因;自由距离较低引起Turbo码在中信噪比下出现纠错平台现象等等。
在信噪比较低的高噪声环境下性能优越(信道条件差的移动通信系统中有很大的应用潜力),而且具有很强的抗衰落、抗干扰能力
Turbo码引起超乎寻常的优异译码性能,可以纠正高速率数据传输时发生的误码。在直扩(CDMA) 系统中采用Turbo 码技术可以进一步提高系统的容量。
在短帧情况下的仿真结果表明短交织Turbo码在AWGN信道和Rayleigh衰落下仍然具有接近信道容量的纠错能力
提出背景:在加性白高斯噪声的环境下, 采用编码效率R=1/2、交织长度为 65536的Turbo码,经过18次迭代译码后,在 Eb/N0=0.7dB时, 其误码率到达10-5,与香农极限只相差0.5dB。
2.Turbo码理解:
将两个简单分量码通过伪随机交织器并行级联来构造具有伪随机特性的长码,并通过在两个软入/软出(SISO)译码器之间进行多次迭代实现了伪随机译码。
交织:在实际应用中,比特差错经常成串发生,这是由于持续时间较长的衰落谷点会影响到几个连续的比特,而信道编码仅在检测和校正单个差错和不太长的差错串时才最有效(如RS只能纠正8个字节的错误)。
为了纠正这些成串发生的比特差错及一些突发错误,可以运用交织技术来分散这些误差,使长串的比特差错变成短串差错,从而可以用前向码对其纠错。
伪随机特性:频谱会因数据出现连“1”和连“0”而包含大的低频成分,不适应信道的传输特性,也不利于从中提取出时钟信息。解决办法之一是采用扰码技术,使信号受到随机化处理,变为伪随机序列
扰码不但能改善位定时的恢复质量,还可以使信号频谱平滑,使帧同步和自适应同步和自适应时域均衡等系统的性能得到改善。
3.Turbo码的编码结构:
三种:并行级联卷积码PCCC,串行级联卷积码SCCC,混合级联卷积码结构HCCC。
3.1并行级联卷积码结构:
是由两个反馈的系统卷积编码器通过一个交织器并行连接而成,编码后的校验位经过删余阵,从而产生不同的码率的码字。
分量编码器:分量码的最佳选择是递归系统卷积码:
Turbo码编码器一般包括两个结构相同的递归系统卷积编码器和一个随机交织器。长度为N的信息序列u一方面直接进入第1个分量编码器RSC1,另一方面经过随机交织器处理后送入第2个分量编码器RSC2。随机交织器的处理是输入序号至输出序号的一映射,它的输出为长度相同,但比特位置经随机排列的交织序列。两个分量编码器RSC1和RSC2分别产生两个不同的校验比特序列x和x。为了提高Turbo码的码率,除可以选用高码率的分量码外,还可以采用打孔(Puncturing)技术从这两个校验序列中删除一些校验位,然后再与信息序列x复用在一起输出。
递归系统卷积码:BER性能在高信噪比好,高码率(R≥2/3)的情况下,对任何信噪比,它的性能均比等效的高码率(R≥2/3)的情况下,对任何信噪比它的性能均比等效的非系统卷积码NSC要好,
递归系统卷积码(RSC)不同于一般的卷积码器在于其结构中不仅有向前结构,还有向后反馈结构:
RSC 编码器一般有2-5 级移位寄存器,
Turbo 码在高信噪比下的性能主要由它的自由距离所决定。因为Turbo码的自由距离主要由重量为2的输入信息序列所产生的码字间的最小距离所决定,用本原多项式作为反馈连接多项式的分量编码器所产生的码字的最小重量为最大,因此当Turbo码交织器的大小给定后,如果分量码的反馈连接多项式采用本原多项式,则Turbo码的自由距离会增加,从而Turbo码在高斯信噪比情况下的“错误平层(errorfloor)”会降低。错误平层效应指的是在中高信噪比情况下,误码曲线变平。
3.2交织器的设计
作用:可以使得Turbo码的距离谱细化,即码重分布更为集中。
交织器实际上是一个一一映射函数,作用是将输入信息序列中的比特位置进行重置,以减小分量编码器输出校验序列的相关性和提高码重。通常在输入信息序列较长时可以采用近似随机的映射方式,相应的交织器称为伪随机交织器。
交织:交织是对信息序列加以重新排列的一个过程。如果定义一个集合A , A={1,2,…,N}。则交织器可以定义为一个一一对应的映射函数π(A-->A):J=π(i),(i,j属于A) 这里的i ,j 分别是未交织序列C 和交织序列C' 中的元素标号。映射函数可以表示为πN = (π⑴,π⑵,π⑶,…,π(N))。
有三原则:
最大程度的置乱原来的数据排列顺序,避免置换前相距较近的数据在置换后仍然相距较近,特别是要避免相邻的数据在置换后仍然相邻
尽量提高最小码重码字的重量和减小低码重码字的数量;尽可能避免与同一信息位直接相关的两个分量编码器中的校验位均被删除
对于不归零的编码器,交织器设计时要避兔出现"尾效应" 图案。
交织器和分量码的结合可以确保Turbo码编码输出码字都具有较高的汉明重量。在Turbo编码器中交织器的作用是将信息序列中的比特顺序重置。当信息序列经过第一个分量编码器后输出的码字重量较低时,交织器可以使交织后的信息序列经过第二个分量编码器编码后以很大的概率输出较高重码字,从而提高码字的汉明重量:同时好的交织器还可以奇效地降低校验序列间的相关性
内置交织器:
Turbo码内置的交织器是在第2个分量编码器RSC2编码处理之前将信息序列的N个比特的位置进行随机排列,它起着关键的作用,很大程度上影响着Turbo码的性能。通过随机交织,使得编码由简单的短码得到了近似长码。当交织器充分大时,Turbo码就具有近似于随机长码的特性。
4.迭代译码
Turbo码译码器采用迭代译码方法,其中使用两个分量译码器,并在第一分量译码器与第二分量译码器之间传递软译码信息,如图3-35所示。无冲突交织器支持并行译码的主要原理是:在进行迭代译码时,第一分量译码器将信息序列进行分段,每个分段使用单独的一个专用的译码处理单元独立地进行译码,各分段译码过程可以并行进行,提高译码速度。但是第二分量译码器也需要采用相同的、并行的分段译码方法,这就要求第二分量译码器的每个独立专用的译码处理单元同一时刻访问不同的分段,这样才能避免信息序列分段地访问冲突,从而实现第二分量译码器的并行分段译码,提高整个迭代译码的速度。
图3-36所示为无冲突交织器的示意图,4个窗口(Windows)A、B、C、D分别代表独立的分段译码,它们需要通过交织器获取各自的原始数据,此时4个窗口A、B、C、D在读取原始数据时,不会出现在同一时刻访问同一分段,不会发生资源访问冲突的问题,这样保证了4个窗口A、B、C、D可以并行地分段译码。
5.译码原理
Turbo码的译码算法采用了最大后验概率算法:译码时首先对接收信息进行处理,两个成员译码器之间外部信息的传递就形成了一个循环迭代的结构。由于外部信息的作用,一定信噪比下的误比特率将随着循环次数的增加而降低。但同时外部信息与接受序列间的相关性也随着译码次数的增加而逐渐增加,外部信息所提供的纠错能力也随之减弱,在一定的循环次数之后,译码性能将不再提高。
在译码的结构上又做了改进,再次引入反馈的概念,取得了性能和复杂度之间的折衷。
译码算法:MAP-Log-MAP算法、Max-Log-MAP以及软输入软输出(SOVA)算法。
5.1译码算法
软输入软输出的译码算法。软输出译码器的输出不仅应包含硬判决值
标准MAP算法
Log-MAP算法
Max-Log-MAP算法
信息论-Turbo码学习的更多相关文章
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...
- jQuery源码学习感想
还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)
前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)
前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...
- 我的angularjs源码学习之旅2——依赖注入
依赖注入起源于实现控制反转的典型框架Spring框架,用来削减计算机程序的耦合问题.简单来说,在定义方法的时候,方法所依赖的对象就被隐性的注入到该方法中,在方法中可以直接使用,而不需要在执行该函数的时 ...
- ddms(基于 Express 的表单管理系统)源码学习
ddms是基于express的一个表单管理系统,今天抽时间看了下它的代码,其实算不上源码学习,只是对它其中一些小的开发技巧做一些记录,希望以后在项目开发中能够实践下. 数据层封装 模块只对外暴露mod ...
- leveldb源码学习系列
楼主从2014年7月份开始学习<>,由于书籍比较抽象,为了加深思考,同时开始了Google leveldb的源码学习,主要是想学习leveldb的设计思想和Google的C++编程规范.目 ...
随机推荐
- 理解 PHP 依赖注入 和 控制反转
理解 PHP 依赖注入 和 控制反转 要想理解 PHP 依赖注入 和 控制反转 两个概念,就必须搞清楚如下的两个问题: DI -- Dependency Injection 依赖注入 IoC -- ...
- phpexcel导出数据 出现Formula Error的解决方案
phpexcel导出数据报错 Uncaught exception 'Exception' with message 'Sheet1!A1364 -> Formula Error: Unexpe ...
- 【应用服务 App Service】App Service 中部署Java应用中文乱码现象
问题情形 有时候部署在 Azure App Service的 Java应用会出现乱码 详细日志 无 问题原因 因为 App Service默认的编码为gbk,所以在显示页面或传递中文字符时就会出现乱 ...
- Linux 发行版本简介
1991年的10月5日Linus Benedict Torvalds在comp.os.minix 新闻组上发布消息,正式向外宣布他自行编写的完全自由免费的内核诞生(Freeminix-like ker ...
- linux修改环境变量后无法登录
在登陆界面按Ctrl+Alt+F1(F1~F6), 进入 tty 后登陆账号. 执行以下命令: /usr/bin/sudo /usr/bin/vi /etc/environment 将PATH的值复原 ...
- 3分钟学完Python,直接从入门到精通
作为帅气小编,我已经把python一些模块的甩在这儿了qwq,只要你拿到这些干货,包你玩转python,直接冲向"大佬"的段位,如果已经学了C或者C++或者说如果你需要你的一段关键 ...
- c++ 获取当前时间周初凌晨时间戳(获取当前时间周一凌晨时间戳)
UINT64 GetWeekBeginTime(){ time_t t; t = time(0); tm* t_tm = localtime(&t); t_tm->tm_hour = 0 ...
- 服务器免密码登录 deployer
在本地(或者开发机)执行部署任务时我们不想每次输入密码,所以我们需要将 deployer 用户设置 SSH 免密码登录: 在本机生成 deployer 专用密钥,然后拷贝公钥: $ ssh-keyge ...
- 【bug录】安装项目编译环境bug录
安装mySQL是遇到一些问题: 刚开始按照教程配置int文件,看着图标没有显示正确,把隐藏文件夹后缀名去掉, mysql由两种版本,zip和msi格式,我用的是zip格式,mysql后进行解压,记住解 ...
- Redis【一】 RESP协议
https://redis.io/topics/protocol RESP:redis序列化协议 client-server交流 二进制安全的 网络层 client端建立tcp连接到Server po ...