turbo编码原理以及matlab实现
一、原理
Turbo的编码器由两个并行的分量编码器组成。分量编码器的选择一般是卷积码。在Turbo码中,输入序列在进入第二个编码器时须经过一个交织器 ,用于将序列打乱。两个编码器的输出共同作为冗余信息添加到信息序列之后,对抗信道引起的错误。
- turbo编码器的结构
二、交织器
什么是交织器?
编码器中交织器的使用是实现Turbo码近似随机编码的关键。交织器实际上是一个一对一的映射函数,作用是将输入信息序列中的比特位置进行重置,以减小分量编码器输出校验序列的相关性并且提高码重(码字中1的数目)。
如何实现交织器?
k:信息块的长度,取k = 960
s:原始数据序号,1~k
k = k1 * k2 = 4 * 240
Π(s):交织后的数据序号
根据下图所示流程,即可得到交织后的数据序号。
三、RSC 递归系统卷积码
所谓卷积码,即输出为输入和一段已知序列的卷积。
每个输入会产生三个输出。输出是输入数据和三个寄存器的值之间的模2加法。当第一个数据做完模2加法后,产生第1组输出,然后将第1个数据移入移位寄存器,作为移位寄存器新的初始值。第二个输入数据进来之后,同样进行模2运算,产生第2组输出。即先算输出,再进行移位。
RSC编码器结构
生成多项式
四、归零处理
在数据序列编码完成后,归零处理使分量编码器RSC中的移位寄存器恢复成编码前的零状态,从而使编译码变得简单易于控制。
Turbo码的归零处理如下:
(1)输入所有的编码序列,完成编码
(2)分量码开关切换,各个寄存器中的遗留状态值和反馈结构生成某些编码序列的尾部比特,这些尾比特与自身异或,使新进入寄存器的值为0。尾比特添加至编码序列系统部位,RSC计算出的比特添加到校验序列后。
(3)该过程直到所有移位寄存器中值全部为0。如寄存器有m个,则经过m次后寄存器将全为0。
- 实际操作
前k个时钟,开关位于a,信息被输入到编码器中。
在k个时钟之后的6个时钟,开关位于位置b。在这6个时钟的前3个时钟里,只有RSC1输出。在这6个时钟的后3个时钟里,只有RSC2输出。
所以,终止序列是(X、Y0、Y1、X’、Y0’、Y1’);
五、数据打孔(删余)
现代通信系统中,为了实现高速数据传输,系统对频带利用率要求较高,一般Turbo码的码率只有1/3,所以,频带利用率不高,为了解决这一问题,在编码器中加入了删余处理。
删余处理的具体操作即在编码完成后,将分量码输出的两路校验信息输入删余器,按照一定的规则删除一部分校验信息,减小信息的冗余度,从而提高编码效率。删余处理根据各系统自定。
在上表中,0表示删除这个数据,1表示保留这个数据。
注意,终止部分(尾比特)的穿刺表与前面数据的穿刺表不一定相同。
六、matlab程序
% 函数功能:turbo编码
% 输入:turbo_in
% 输出:turbo_out
% 时钟:clk
% rsc寄存器:reg1-->reg2-->reg3
% 移位寄存器输入:sr_infunction turbo_out=turbo(turbo_in)% rsc参数
g1 = [1 1 1 1]; % y1的生成多项式
g0 = [1 0 1 1]; % y0的生成多项式
g = [1 1 0 1]; % rsc的生成多项式% 数据打孔参数
punc_para = [[1 0 1 0 0 0] [1 0 0 0 0 0] [1 0 0 0 0 0] [1 0 0 0 0 0] [1 0 0 0 0 0] [1 0 0 0 0 1]];% 数据交织
turbo_in1 = interleaver(turbo_in);% 初始化
rsc1_reg1 = 0;
rsc1_reg2 = 0;
rsc1_reg3 = 0;
rsc1_sr_in = mod(turbo_in(1)+rsc1_reg2+rsc1_reg3,2);rsc2_reg1 = 0;
rsc2_reg2 = 0;
rsc2_reg3 = 0;
rsc2_sr_in = mod(turbo_in1(1)+rsc2_reg2+rsc2_reg3,2);ram = [];
rsc1_reg = [0 0 0];
rsc2_reg = [0 0 0];
% 前k个时钟,开关位于a
for clk = 1:length(turbo_in)% 注意时序逻辑放在前面,组合逻辑放在后面,对移位寄存器的赋值注意先后顺序% 因为时序逻辑变化要比组合逻辑快% rsc1rsc1_sr_in = mod(turbo_in(clk)+rsc1_reg2+rsc1_reg3,2);rsc1_x = turbo_in(clk);rsc1_y0 = mod(rsc1_sr_in+rsc1_reg1+rsc1_reg3,2);rsc1_y1 = mod(rsc1_sr_in+rsc1_reg1+rsc1_reg2+rsc1_reg3,2);rsc1_reg3 = rsc1_reg2;rsc1_reg2 = rsc1_reg1;rsc1_reg1 = rsc1_sr_in;% rsc2rsc2_sr_in = mod(turbo_in1(clk)+rsc2_reg2+rsc2_reg3,2);rsc2_x = turbo_in1(clk);rsc2_y0 = mod(rsc2_sr_in+rsc2_reg1+rsc2_reg3,2);rsc2_y1 = mod(rsc2_sr_in+rsc2_reg1+rsc2_reg2+rsc2_reg3,2);rsc2_reg3 = rsc2_reg2;rsc2_reg2 = rsc2_reg1;rsc2_reg1 = rsc2_sr_in;% 并转串ram = [ram rsc1_x rsc1_y0 rsc1_y1 rsc2_x rsc2_y0 rsc2_y1];rsc1_reg = [rsc1_reg;rsc1_reg3 rsc1_reg2 rsc1_reg1];rsc2_reg = [rsc2_reg;rsc2_reg3 rsc2_reg2 rsc2_reg1];
end% 后6个时钟,开关位于b
rsc1_sr_in = 0;
rsc2_sr_in = 0;
for clk = 1:6% rsc1rsc1_x = mod(rsc1_reg2+rsc1_reg3,2);rsc1_y0 = mod(rsc1_sr_in+rsc1_reg1+rsc1_reg3,2);rsc1_y1 = mod(rsc1_sr_in+rsc1_reg1+rsc1_reg2+rsc1_reg3,2);rsc1_reg3 = rsc1_reg2;rsc1_reg2 = rsc1_reg1;rsc1_reg1 = rsc1_sr_in;% rsc2rsc2_x = mod(rsc2_reg2+rsc2_reg3,2);rsc2_y0 = mod(rsc2_sr_in+rsc2_reg1+rsc2_reg3,2);rsc2_y1 = mod(rsc2_sr_in+rsc2_reg1+rsc2_reg2+rsc2_reg3,2);rsc2_reg3 = rsc2_reg2;rsc2_reg2 = rsc2_reg1;rsc2_reg1 = rsc2_sr_in;% 并转串ram = [ram rsc1_x rsc1_y0 rsc1_y1 rsc2_x rsc2_y0 rsc2_y1];rsc1_reg = [rsc1_reg;rsc1_reg3 rsc1_reg2 rsc1_reg1];rsc2_reg = [rsc2_reg;rsc2_reg3 rsc2_reg2 rsc2_reg1];endrsc1_x_ram = ram(1:6:length(ram));
rsc1_y0_ram = ram(2:6:length(ram));
rsc1_y1_ram = ram(3:6:length(ram));rsc2_x_ram = ram(4:6:length(ram));
rsc2_y0_ram = ram(5:6:length(ram));
rsc2_y1_ram = ram(6:6:length(ram));% 数据打孔
punc = repmat(punc_para,1,ceil(length(ram)/36));
punc = punc(1:length(ram));
punc_addr = find(punc);
turbo_out = ram(punc_addr);
turbo编码原理以及matlab实现相关推荐
- 【RS码1】系统RS码编码原理及MATLAB实现(不使用MATLAB库函数)
关注公号[逆向通信猿]更精彩!!! 基础知识 要想搞懂本节知识,需要先熟悉掌握以下前几篇博客 [多元域乘法]多项式乘法电路原理及MATLAB详解 [多元域除法]多项式除法电路原理及MATLAB详解 R ...
- 【BCH码1】系统BCH码编码原理及MATLAB实现(不使用MATLAB库函数)
关注公号[逆向通信猿]更精彩!!! BCH编码原理 设一个 ( n , k ) (n,k) (n,k)循环码的生成多项式为 g
- matlab 投票法_SVM算法原理及其Matlab应用
<SVM算法原理及其Matlab应用>由会员分享,可在线阅读,更多相关<SVM算法原理及其Matlab应用(18页珍藏版)>请在人人文库网上搜索. 1.SVM 算法及其 Mat ...
- 量子遗传算法原理与MATLAB仿真程序
写在前面: 1.其实这些智能算法的思想都差不多,只不过是各自搜寻方式.编码方式.种群更新方式等不一样而已. 量子遗传算法是在遗传算法的基础上使用了一种新的编码方式. 2.直接看前面介绍可能会觉得较难, ...
- Turbo编码相关知识
这段时间里,看到的一些书籍和程序中,很多都用到LDPC码,卷积码和Turbo码,刚好又在学习Turbo码,故将资料中的关于Turbo码编码的知识点加以整理. Turbo编码进化自卷积码,在LTE ...
- simulink 汉明码 用法_通信原理及MATLAB/Simulink仿真
通信原理及MATLAB/Simulink仿真 作 者:张水英,徐伟强 著 出版时间:2012 丛编项:21世纪高等院校信息与通信工程规划教材·高校系列 内容简介 <21世纪高等院校信息与通信工程 ...
- MIMO大规模天线阵列原理与matlab仿真(含GUI)
一 设计实现流程 1.MIMO系统原理 传统的无线通信系统是采用一个发送天线和一个接收天线的通信系统,即单输入单输出(SISO)天线系统.但由于单天线系统的信道容量较低,不能满足4G.5G数据传输需求 ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )
文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...
- base64编码_几分钟看懂Base64编码原理
Base64简介 Base64是基于64个可打印字符(小写字母a-z,大写字母A-Z,数字0-9,符号"+","/" 再加上作为垫字的"=" ...
最新文章
- 类和实例方法有什么区别?
- supersr--时间显示逻辑--NSDate+NSCalendar
- 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0
- 机器人学习--F1TENTH弗吉尼亚大学无人驾驶课程
- mysql 连接数的最大数
- java批量上传图片_JAVA图片批量上传JS-带预览功能
- using a dict on a Series for aggregation is deprecated and will be removed in a future version
- mysql 求两列数据组合_mysql – 将两个具有不同列数的查询组合在一起
- C++ 常用设计模式
- LACP协议:链路聚合/华为交换机LACP
- MySQL面试题常见知识点总结
- steam服务器连接不稳定WIN10,小编操作win10系统steam连接不稳的解决步骤
- java地理位置的获取_Java 根据 IP 获取地理位置
- 宏基品牌机 win7 系统激活
- 计算机科学与技术工程师职称考试试题,2018年下半年网络工程师考试下午试题及答案...
- c# 中通快递对接_C#快递鸟物流查询接口API对接调用源码
- KUCAS清关文件申请形式 TER与TIR认证介绍
- 11个小游戏教你玩趣编程,在玩中也能学!
- 【Linux】动态库与静态库
- 【2011NOIP普及组】T3. 瑞士轮 试题解析