要求

  实现对于给定字符串,能够统计出出现了哪些字符,以及每个字符出现的频次。这是构造哈夫曼编码等问题的一个基本功能模块。

实现

  计算机中的字符种类是有限的,只考虑ASCII中规定的字符则不超过256个。为此,考虑空间换时间的做法,直接用数组来解决。这个实现的核心就在这里,使用一个长度大于等于256的int型数组,每个数组元素为ASCII表中相应元素的出现频次。扫描给定的字符串,将相应的数组元素值加一,最后输出那些值不为0的元素对应的字符即可。

阅读全文 »


希望在旧版博客访问该文章?请戳:极化码的matlab仿真(1)——参数设置


  仿真的手段有很多种。可以利用C,C++,matlab甚至python等进行仿真的实现。其中matlab由于具有强大的函数库和可观的矩阵运算能力而特别适合于工程领域的仿真。matlab的语法非常简单,接近自然语言。其优秀的绘图能力,众多的集成工具箱极大的方便了使用者。当然用C来仿真也是可以的,C语言编写的程序仿真速度非常快,但是编写起来很不友好。试想一个简单的函数,matlab只需要调用一下就好了,C语言基本上都要自己动手写。
  话不多说,本节我们主要介绍matlab仿真极化码的第一步——设置仿真参数。

阅读全文 »


希望在旧版博客访问该文章?请戳:极化码小结(2)


  极化码的编码问题主要包括两个方面。

生成矩阵的构造

  先来看信道合并示意图,下图截自Arikan论文(以后不再解释,Arikan论文 特指论文《Channel polarization: A method for constructing capacity-achieving codes for symmetric binary-input memoryless channels》):


  请读者留意这是fig.3,也即图三。根据这张图所表现的形式,我们可以归纳出$G_N$的表达式:


  疑问:这个表达式如何得到?它与上图有什么对应关系?
阅读全文 »


希望在旧版博客访问该文章?请戳:极化码小结(1)


  极化码建立在信道极化这一现象之上。信道极化现象来自于信道合并信道分裂这两种信道操作。

信道合并

  将$N$个独立信道$W$通过变换使之变为一个具有“集体意义”的信道$W_N$,这里“集体意义”的产生来源于变换,而变换遵循固定的规则。
  首先,变换是一个递归过程。对于$N(N=2n)$个独立信道$W$,想要将其变为一个具有“集体意义”的信道$W_N$需要进行$n$次信道操作,每次信道操作都将$N$个信道变为$N/2$个小型的信道集合体,这样通过递归$N$—>$N/2$—>……—>$2$—>$1$就可以实现$N$个信道的合并。每次信道操作又分为两个部分:

阅读全文 »


希望在旧版博客访问该文章?请戳:开启极化码之路


极化码(Polar Codes)是一种新型的编码方式,于2008年左右酝酿成型。由于其在二元对称删除信道中能够达到信道容量而受到关注。自出现以来,极化码吸引了许多国内外学者的关注。华为公司递交的入选5G的信道控制方案就是一个基于极化码理论的方案。

极化码属于信息论的范畴,对于我一个本科生来说其实十分茫然。一次偶然的机会我接触到学院一位进行相关方面研究的老师,于是抱着尝试的心态,我开始了对极化码理论的了解。目前还处于非常基本的认识阶段。

希望能够将自己学习中收获的知识和理解在博客上记录分享,以后不管是否从事这个领域,回看起来如果有一些成就感,也算值得了。博客上的分享来自个人的总结思考,水平有限,纰漏之处在所难免,望看客斧正。


转载请注明来源:©Tinshine