极化码的matlab仿真(4)——SC译码(2)
================================================
首先自作多情的说一句——“抱歉!”
古语“有志者、事竟成”,是说有志向的人最终都能够成事。想到这句话我很惭愧,我居然连这样一件小事都无法坚持不懈的完成,这个系列的博客我一拖再拖,一个多月里竟然再没有更新。虽然博客鲜有看客垂阅,但是这半途而废的事实却是明显的。痛定思痛,我决定老老实实更完。算是亡羊补牢,做到有始有终吧。
================================================
---内容开始--
上一节,我们介绍了SC译码过程中的两个解码特例——u1和u2,通过这两例解码方案的介绍,我们对于利用Arikan递推公式进行串行消除解码的过程有了一个初步的认识,接下来我们的任务在于由特殊到一般,归纳出适用于所有解码器节点的解码方案,并给出相应的matlab代码。
我们先来重新观察蝶形解码图:

根究u1、u2的解码经验,我们可以将解码过程作如下归纳:
① 判断要解出的节点为上节点还是下节点,若为上节点则进行步骤②,否则进行步骤③;
② 根据解码图中前后节点的坐标关系,找到该节点所开启的两个节点,分别判断这两个节点是否被解出,如果未解出回到步骤①,否则直接利用上节点计算公式求得该节点似然值。
③ 判断相应上节点是否解出,如果未解出,执行步骤②,否则执行步骤④计算指数项;
(根据我们多次提到的原则——左上节点和左下节点总是同时被解出,一般情况下在求解下节点的时候,相应的上节点已经解出。)
④ 我们先来复习一下什么是指数项

如上图为Arikan译码递推公式。对于蝶形的左下节点的求解,在得到左上节点似然值的基础上使用第二个公式。其中,指数项为
。
【关于指数项计算的专业内容,读者可参考论文《极化码编码与译码算法研究》...王继伟...第3.3.1.3节】
这个指数项在随着迭代N-->N/2-->N/4-->...将发生变化。由于博主水平有限,无法很好的表述推导过程,这里偷个懒,直接将结论写在下面。读者如果对于结论的导出有更深入的需要,请移步上述论文相关章节。

如上图所示为n=3,N=8时的解码图,不同的是,我们给每一个节点提供了第三个标签。(除去第一列和最后一列)将节点所在行数减一后转化为长度为n的二进制数,自第二行开始将二进制数用斜杠 ‘ / ’ 加以分割,斜杠放置位置的规律显然可见。经过这样的处理以后,我们可以观察一个非常明显的现象,观察每个斜杠后的比特,比特为0代表该节点为上节点,比特为1代表该节点为下节点。
下面来关注指数项的求解。观察斜杠前后的比特:
- 为了求解指数项,自左向右,我们定义操作“1”为抽取向量中的偶数位,组成长度减半的新向量;定义操作“0”为分别抽取向量中的偶数位与奇数位组成两个新向量,然后将它们按位异或,得到长度减半的新向量。(这部分会通过一个例子详细说明,看不懂不要捉急=v=)
- 为了确定解码图中的某个节点由哪个解码器所启动,自右向左,我们定义操作“1”为向左上寻找节点;定义操作“0”为向右寻找节点。(这里我们回顾一下上一节提到的前后节点之间的关系:
设当前节点坐标为(i,j),若当前节点未左上蝶形,则这个节点开启的两个节点的坐标为(i,j+1)和(i+N/2j,j+1)。若为左下节点,则这两个节点开启的两个节点坐标为(i,j+1)和(i-N/2j,j+1))
因此,利用反推的道理,对于所求解的节点 (i,j) ,从斜杠处开始,自右向左,遇到比特“0”则向左寻找一位 (i,j-1),遇到比特“1”则向左上寻找 (i-N/2j,j-1)。
下面,我们以节点26为例详细说一下。该节点的三个标签分别为“26”、
,“10/1”。第一个标签指代该节点的求解顺序,第二个标签描述该节点的似然值通过计算
得到,其中
即为指数项。通过第三个标签,我们可以知道为什么指数项是
。观察“10/1”,斜杠前有两位“10”。首先,我们来判断,节点26由哪一个节点所开启,自右向左,第一位遇到“0”,往左移动一位;第二位遇到“1”,往左上寻找。最后发现找到的是节点21,观察发现此时已经解出的解码器为
。得到这一信息后,我们来求解指数项,自左向右,第一位遇到“1”,抽取偶数位组成向量(u2,u4);第二位遇到“0”,抽取奇数位——u2,偶数位——u4,按位异或——
。

对于解码器中所有的节点,在以上办法的指导下,通过坐标变换和少量的位运算,即可在必要情况下求解相应节点的指数项。
求得指数项之后返回文章最开始的流程之中,我们可以依次求解出解码图中所有节点的似然值,最后对解码器进行似然判决(包含硬判决与软判决)。
判决后所得到的比特流即为原比特流在极化码系统下仿真得到的结果,通过逐位比对,统计传输前后的比特差异,我们可以得到一系列的误码指标来表征系统性能。
我们来回顾一下本节中的重点:
1、本节,我们旨在解决如何求解解码图中的节点似然值。
2、我们根据似然值计算递推公式,将节点分为上节点和下节点,上节点可以直接求解,下节点需要计算指数项。
3、通过判断前后节点坐标关系以及定义“1”、“0”两种位运算,我们实现了求解所需任意节点的指数项。
4、通过似然判决以及统计比特误码率,我们得到了系统的仿真性能。
由于matlab代码存在版权问题,而我又没有那么多精力再重新写一份(主要因为我太懒,抱歉了各位orz),本节没有贴代码。所涉及到的算法和理论我已经尽力阐明了,如果各位非常需要源代码,可以私信我,有必要的话,我会在征得原作者同意后,奉上原码。
关于极化码,一些入门的论文如下:
【1】Channel polarization: A method for constructing capacity-achieving codes for symmetric binary-input memoryless channels.作者 Erdal Arıkan。Arikan教授是极化码的缔造者,这篇论文发表在IEEE上,也是第一篇对极化码及相关理论进行系统而详尽阐明的权威论文。
【2】极化码编码与译码算法研究.作者 王继伟。对于很多人来说,英文文献阅读起来比较吃力,好在一些质量较高的中文文献中对极化码有非常详尽的介绍,其内容之丰富,足以作为研究Arikan论文的有力辅助。
【3】极化码的译码算法研究及其应用.作者 张亮。这是一篇博士学位论文,内容充实详尽、专业严谨,文末对于极化码存在的一些问题进行了分析和展望,很有启发性。
这些文章在知网、万方等数据库中均可获取,在极化码的研究论文中,这三篇只是沧海一粟,还有很多国内外学者的文章值得借鉴,不再啰嗦列举。
这是本系列的最后一篇文章。开始时雄心壮志,结束却时草草收笔,未免有些遗憾。在撰写博文的过程中,我发现了很多之前没有注意到的问题,收获不可谓不硕大。论语云,“温故而知新”,诚不我欺!
极化码的matlab仿真(4)——SC译码(2)的更多相关文章
- 极化码的matlab仿真(3)——SC译码(1)
一个好码必须具备两个要素:可靠.高效. 高效的码要求码的编译方案都具有较低的复杂度.极化码出现后,Arikan本人提出使用SC译码方案来进行译码操作.SC全称successive cancellati ...
- 极化码的matlab仿真(2)——编码
第二篇我们来介绍一下极化码的编码. 首先为了方便进行编码,我们需要进行数组的定义 signal = randi([0,1],1,ST); %信息位比特,随机二进制数 frozen = zeros(1, ...
- 极化码的matlab仿真(1)——参数设置
根据老师的安排,对于极化码的了解从仿真开始. 仿真的手段有很多种.可以利用C,C++,matlab等进行仿真的实现.其中matlab由于具有强大的函数库,和壮观的矩阵运算能力,被(我们老师课题组)看中 ...
- OFDM通信系统的MATLAB仿真(1)
由于是第一篇博客,想先说点废话,其实自己早就想把学到的一些东西总结成文章随笔之类的供自己复习时查看的了.但是一是觉得自己学的的不够深入,总结也写不出什么很深刻的东西:二是觉得网上也有海量的资料了,需要 ...
- OFDM通信系统的MATLAB仿真(2)
关于OFDM系统的MATLAB仿真实现的第二篇随笔,在第一篇中,我们讨论的是信号经过AWGN信道的情况,只用添加固定噪声功率的高斯白噪声就好了.但在实际无线信道中,信道干扰常常是加性噪声.多径衰落的结 ...
- 经典功率谱估计及Matlab仿真
原文出自:http://www.cnblogs.com/jacklu/p/5140913.html 功率谱估计在分析平稳各态遍历随机信号频率成分领域被广泛使用,并且已被成功应用到雷达信号处理.故障诊断 ...
- MATLAB仿真总结
MATLAB仿真过程中,编写MATLAB代码的时候犯了很多错误,做了很多蠢事.记录下自己犯错的点点滴滴,并引以为戒.使用MATLAB版本为2014a,以下内容如有不当还请指正. 1. 仿真开始前清理工 ...
- 极化码之tal-vardy算法(2)
上一节我们了解了tal-vardy算法的大致原理,对所要研究的二元输入无记忆对称信道进行了介绍,并着重介绍了能够避免输出爆炸灾难的合并操作,这一节我们来关注信道弱化与强化操作. [1]<Chan ...
- (转) 经典功率谱估计及Matlab仿真
原文出自:http://www.cnblogs.com/jacklu/p/5140913.html 功率谱估计在分析平稳各态遍历随机信号频率成分领域被广泛使用,并且已被成功应用到雷达信号处理.故障诊断 ...
随机推荐
- 如何免费使用jrebel 和eclipse 项目配合完成热部署功能
天,感谢王同学分享了热部署插件,jrebel,说修改后台代码可以不用重启tomcat,于是立即下载使用....本来很简单的一个事情,因为参照了网上各种帖子,结果坑的不行....所以把自己的经验分享一下 ...
- Dubbo应用文档
Dubbo应用文档 Dubbo简介 概述 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 Dubbo是阿里巴巴SOA服务化治理方案的核心框架, ...
- 实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove
本小节的教程需要完成前置教程:建议阅读<实例甜点 Unreal Engine 4迷你教程(5)>,因为5里面提到了本节的工程,不过也可以在不看5的前提下直接阅读本教程. 第一步:Empty ...
- Koa框架教程,Koa框架开发指南,Koa框架中文使用手册,Koa框架中文文档
我的博客:CODE大全:www.codedq.net:业余草:www.xttblog.com:爱分享:www.ndislwf.com或ifxvn.com. Koa -- 基于 Node.js 平台的下 ...
- NYOJ--139--我排第几个(康托展开)
我排第几个 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在有"abcdefghijkl"12个字符,将其所有的排列中按字典序排列,给出任意一 ...
- IntelliJ IDEA(2017.2)安装和破解(转)
如果有一定的经济基础,请支持正版,这里提供破解方法. 一.下载并安装, IntelliJ IDEA的官网:https://www.jetbrains.com 二.破解. 百度下载一个 Jetbrain ...
- 关于IE,Chrome,Firefox浏览器的字符串拼接问题
昨天项目测试的时候,IE8.IE11测试勾选checkbox然后执行保存的时候,竟然执行的结果与预期相反,吓屎我了,最终排查之下,原来是拼接checkbox的值的时候出现的问题.本人对js了解知之甚少 ...
- JVM笔记——技术点汇总
目录 · 初步认识 · Java里程碑(关键部分) · 理解虚拟机 · Java虚拟机种类 · Java语言规范 · Java虚拟机规范 · 基本结构 · Java堆(Heap) · Java栈(St ...
- 在WebGL场景中使用2DA*寻路
这篇文章将讨论如何在一个自定义的地面网格上进行简单的2D寻路,以及确定路径后如何使用基于物理引擎的运动方式使物体沿路径到达目标地点.读者需要预先对WebGL和Babylonjs知识有一些了解,可以 ...
- android学习笔记之GridView的使用
除了listview会使用适配器外,还有一种就是GridView,listview是单列多行的显示形式,适用于多项目的查看.而GridView是多行多列的显示形式,一般用在查看图片样式的activit ...