极化码之tal-vardy算法(1)
继前两节我们分别探讨了极化码的编码,以及深入到高斯信道探讨高斯近似法之后,我们来关注一个非常重要的极化码构造算法。这个算法并没有一个明确的名词,因此我们以两位发明者的名字将其命名为“Tal-Vardy算法”。
在《极化码小结(2)》之中,我们简单讲述了BEC信道下构造极化码的方法——通过直接计算巴氏参数Z(W)来构造,计算复杂度为O(N)。
在《极化码之高斯近似》中,我们讨论了常用的高斯信道下构造极化码的方法——高斯近似,计算复杂度也为O(N)。
现在,我们再次将极化码的触手伸向另一种常见的信道——二元对称无记忆信道(BMS)。
由于篇幅可能较大,因此我将分两节对该算法进行一个简略的介绍。我会将本文涉及到的参考文献放在相关内容开头,并建议有需要的各位去读原论文。
【1】《How to Construct Polar Codes》Ido Tal, Alexander Vardy.
Part1. 简单介绍
这套算法中,有两个核心的信道操作,一种叫做信道弱化(degrade),另一种叫做信道强化(upgrade)。论文作者形象的将这两种操作产生的弱化信道、强化信道与原信道的关系比喻成“三明治”的结构。
图1 三种信道之间的关系示意
论文的大致思路,就是通过将原始信道通过弱化操作和强化操作,使之成为弱化信道和强化信道。分析发现,这两种信道在各种参数水平上都极为接近,因此通过类似数学上的“两边夹定理”,我们可以用这两个信道来近似原始信道。
“tal-vardy算法”构造极化码的思路是直接计算各信道的错误概率Pe(W),然后利用这个参数来挑选我们所需的信息位。这种挑选信道的方法显然更具有普遍性。。“Tal-Vardy算法”是针对B-DMC(二元离散无记忆)信道提出的,对于像高斯信道这样具有连续输出的信道不能直接使用。因此作者也提出了一种办法,使得这种算法同样能够应用于输出连续的信道。
我们之前提到过,计算信道错误概率Pe(W)的难度在于W的输出符号集大小随着n呈指数型增长,这是需要克服的难点。为了使上述计算成为可能,作者在弱化操作或强化操作中,通过使用“合并函数”,使得输出符号集能够缩减到指定的符号集大小。
利用该算法构造极化码的时间复杂度为n的线性复杂度。
根据论文的思路,为了更好的理解这篇论文中所提出的这一算法,我们将尝试从三个部分来探讨。分别是输出字符集的合并、信道操作、如何处理连续对称信道。
Part2.研究对象
【2】《A Note on Symmetric Discrete Memoryless Channels》Ingmar Land.
在研究极化码构造问题时,我们经常遇到各种各样的信道,现在我们来做一个简单的总结。
DMC(离散无记忆信道)
DMC具有离散的输入字符集X,离散的输出字符集Y,以及转移概率函数P(y|x)。它的输出仅仅与当前的输入有关,因此它又是无记忆信道。
假设输入字符集大小为Mx,输出为My,不失一般性的,我们假设:
那么,这个 信道的转移概率可以用一个矩阵来表示:
注意到,矩阵的每一行的和都为1。
Strongly Symmetric DMCs(强对称DMC)
在介绍这个信道之前,我们先来介绍一个概念——恒等排列。
如果向量v和向量μ中的元素完全相同,只是元素的排列顺序不同,那么,我们称v为μ的一个恒等排列。
eg. μ=[1 2 3 4],v=[2 4 1 3],则v是μ的一个恒等排列。
定义:对于一个信道的转移概率矩阵,如果矩阵的每一行都是其他行的恒等排列;每一列都是其他列的恒等排列,那么我们称这个转移概率矩阵所描述的DMC为“强对称DMC”。
一个非常特殊的例子是二元对称信道(BSC):
图2 二元对称信道
二元对称信道的输入字符集为{0,1},输出也为{0,1},其转移概率矩阵为:
对称DMC
定义:对于一个转移概率矩阵,如果它能够按列拆分为数个子矩阵,使得每一个子矩阵都满足“强对称”定义,那么,我们称这个转移概率矩阵所描述的DMC为“对称DMC”。
一个特殊的例子是二元删除信道(BEC):
图3 二元删除信道
它的输入字符集为{0,1},输出字符集为{0,△,1},其中△为删除符号。BEC的转移概率为:
显然 ,它可以按列拆分为两个子矩阵:
这两个矩阵都符合强对称信道的定义,因此BEC是对称DMC。
另外一个特例是AWGN信道。BPSK调制下,AWGN信道的输入字符集为{-1,1}。首先,可以用相对于y = 0对称的量化区间来量化输出(也即,将连续输出近似为离散输出),它的子信道都是BSC,根据上述定义,所生成的信道是对称的。其次,这个量化区间可以设置的无穷小,其子信道依旧是BSC,不过子信道的数量趋近于无穷。
弱对称DMC
定义: 对于一个转移概率矩阵,如果它的每一行都是其它行的恒等排列,且每一列之和都是相等的,那么,我们称这个转移概率矩阵所描述的DMC为弱对称DMC。
eg.给定一个弱对称DMC,其输入字符集为{0,1}(注意,这个地方在【2】中错写为{0,1,2}),输出字符集为{0,1,2},其转移概率矩阵如下:
如果一个信道的输出符号集为{0,1},那么我们称这个信道有二元输入,“二元输入的对称无记忆信道”,这就是本文中的算法所研究的对象。我们来简单了解一下它的性质。
Arikan论文(特指《channel polarization……》)的第VI-A节中对“对称的二元离散无记忆信道”的性质进行了详细的说明,参考文献【1】的第II节中对此也有描述。
对于一个无记忆信道W,我们假设它的输入为二进制数,且它是对称的,则有W:X→Y,其中X为输入符号集,X={0,1};Y为输出符号集,Y任意。根据定义,对于Y,存在一个恒等排列满足:
i) ;
ii) ,对于所有的y∈Y都成立。
为了方便起见,我们将记为,并称和y为共轭对。我们假设输出符号集Y为一个有限输出集(这个假设,在将算法推广到具有连续输出符号集的信道中时,会被证明)。
在Arikan论文的第VI-A节中,给出了这样一个定理:
Proposition 13(定理13):
如果一个B-DMC W是对称的,那么,和也是对称的,并且有: 其中运算 “·” 是一种速记。我们简记x·y:当x=0时,x·y → y;当x=1时,x·y→。如同上面的定义,y和为共轭对。
这是一个非常重要的结论,我们将在下面的信道操作中多次使用这个公式来进行计算的化简,请读者留意。
Arikan论文中给出了定理13的证明。
Part3.合并函数
从逻辑顺序角度考虑,我们先来探讨一下合并函数的内容。不过在这之前,我们必须先熟悉一下弱化信道与强化信道,这对于合并函数的介绍是必不可少的。
弱化信道
对于原始信道W:X→Y,对于信道Q:X→Z,若存在一个中间信道P:Y→Z,使得对于所有的x和z都有: 那么,我们写,指代Q相对于W是弱化的。
强化信道
强化信道的描述与弱化信道类似,实际上,只需要将上式中的W和Q调换位置,就能够得到强化信道的表述:
写,指代Q'相对于W是强化的。
对合并函数的理解从一个引理开始:
Lemma7:
设W:X→Y为BMS信道,假设y1,y2为输出字符集Y中的符号。对于信道Q:X→Z,定义其输出字符集Z为: 则,对于所有的x和z,定义:
那么,有。
引理7中,字符集Z中的“\”表示“不包含”。
我们可以看到,在这个引理之中,我们放入了一个原始的W信道,得到了一个弱化信道Q。并且从W到Q,信道的输出字符集的大小发生了改变,Q字符集大小比W小2。因此,从这一点来看,我们可以通过引理 7同时得到一个弱化的、具有更小字符集的BMS信道。
引理7的证明并不难。我们只需要对中间信道P进行巧妙的定义:
对于中间信道P:Y→Z,从Y到Z的映射关系为:和以100%的概率映射为,和以100%的概率映射为,其余的符号一一映射为自身。
显然,这样的中间信道是存在的,根据前面的描述,Q是W的弱化信道。
得证。
合并函数是用来解决因Arikan信道合并迭代公式造成的信道输出字符集爆炸增长的有力工具。根据引理7,对于一个具有v大小输出字符集的原始信道W,通过合并一对符号(及其共轭符号)的操作,我们每次都能使信道的输出字符集大小减2。通过多次调用这一操作,我们能够将W的输出字符集大小降到任意的大小μ。在【1】中,μ也用来表示“保真度”,一般来说,μ越大,合并函数的调用次数越少,系统性能越好,相应输出字符集也就越大,极化码构造算法的计算复杂度也就越高。
现在,我们有了合并函数这个有力的工具,但是要应用它,还有一个问题需要解决。在每一次的合并操作中,我们应该合并哪两个符号,是在输出符号集中随意挑选吗?还是需要遵循一定的原则?
【1】中的定理8对此进行了限定。
Theorem8
对于BMS信道W:X→Y,输出字符集Y有m个元素,假设有:
1 ≤ LR(y1) ≤ LR(y2) ≤ ······ ≤ LR(ym)
对于Y中任意两个符号a,b,设I(a,b)为合并后信道容量的大小。则,对于 1 ≤ i ≤ j ≤ k ≤ m,有:
定理8中,LR(y)表示似然判决下,y符号的最大似然值。通过定理8,我们可以发现,对相邻两个符号进行合并后所得到的信道的信道容量,总是大于非相邻符号的合并结果。这一定理指导我们在每一次合并时,都选择相邻符号进行合并。定理8的证明在【1】的附录中给出。
为此,我们对W信道的输出符号集Y按照最大似然值排序。假设输出符号集Y大小为2L,包含L个共轭对。
注意到定理8中的似然值排序,有隐含条件LR≥1。
似然值定义为:
根据对称信道的定义:,可以得到,对于有:
同样,对于有: 因此,对于共轭对,1 ≤ i ≤ L ,二者必定有一个满足似然值大于等于1。我们挑选出这个符号作为这对共轭对的代表,参与似然值的排序,最终得到:
当我们将相邻两个符号 yi 和 yi+1 合并为 z 后,有:
除此之外,为了在合并操作的过程中,尽可能少的损失信道容量,我们倾向于选择合并前后信道容量变化最小的那一对相邻元素。因此,在对输出符号集按照似然值排序之后,我们在合并之前还要做的一项工作就是,寻找信道亏损最小的相邻元素。我们设为合并前后信道的亏损,并以此为挑选合并相邻元素的依据。
遵循【1】中的符号命名规则,我们设 a,b,a',b',分别表示: 定义
其中:
这样,合并之前,我们通过计算所有相邻元素合并后信道容量的亏损,找到亏损值最小的那一对相邻元素就可以了。
【1】第V节中对这部分内容的介绍十分详细,给出了包括合并函数中诸如堆栈、链表、指针的相关数据结构概念的介绍,并简述了合并函数的算法实现,思路非常清晰,可作为编程参考。
以上对合并函数的介绍,仅仅针对信道弱化操作展开。合并还可以通过信道强化操作,这部分内容稍微复杂一些,我无法表述清楚,请读者自行探索。
下一节中,我们将着重介绍信道弱化与信道强化操作,如果篇幅允许,我们将探索二元高斯信道下tal-vardy算法的应用。
极化码之tal-vardy算法(1)的更多相关文章
- 极化码的matlab仿真(4)——SC译码(2)
================================================ 首先自作多情的说一句--"抱歉!" 古语"有志者.事竟成",是 ...
- 极化码之tal-vardy算法(2)
上一节我们了解了tal-vardy算法的大致原理,对所要研究的二元输入无记忆对称信道进行了介绍,并着重介绍了能够避免输出爆炸灾难的合并操作,这一节我们来关注信道弱化与强化操作. [1]<Chan ...
- 极化码的matlab仿真(3)——SC译码(1)
一个好码必须具备两个要素:可靠.高效. 高效的码要求码的编译方案都具有较低的复杂度.极化码出现后,Arikan本人提出使用SC译码方案来进行译码操作.SC全称successive cancellati ...
- Android开源项目 Universal imageloader 源码研究之Lru算法
https://github.com/nostra13/Android-Universal-Image-Loader universal imageloader 源码研究之Lru算法 LRU - Le ...
- 极化码的matlab仿真(2)——编码
第二篇我们来介绍一下极化码的编码. 首先为了方便进行编码,我们需要进行数组的定义 signal = randi([0,1],1,ST); %信息位比特,随机二进制数 frozen = zeros(1, ...
- 极化码的matlab仿真(1)——参数设置
根据老师的安排,对于极化码的了解从仿真开始. 仿真的手段有很多种.可以利用C,C++,matlab等进行仿真的实现.其中matlab由于具有强大的函数库,和壮观的矩阵运算能力,被(我们老师课题组)看中 ...
- 死磕以太坊源码分析之Kademlia算法
死磕以太坊源码分析之Kademlia算法 KAD 算法概述 Kademlia是一种点对点分布式哈希表(DHT),它在容易出错的环境中也具有可证明的一致性和性能.使用一种基于异或指标的拓扑结构来路由查询 ...
- 极化码之tal-vardy算法(3)
考完驾照,回来填坑 /doge/doge 前两节分别介绍了tal算法中的合并函数和信道操作两个部分,我们将高斯信道的应用放在最后一节来介绍. 在之前的介绍中,我们一直在一个前提下进行讨论--即输入字符 ...
- 【STL源码学习】STL算法学习之二
第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, cla ...
随机推荐
- Go-back-N Implementation of reliable data transport (RDT)
[Author] @ Yubao Liu Tables 1.Overview 2.Design explanation 2.1Implemented Routines 2.2Called Routin ...
- 【MySQL】MySQL忘记密码或修改密码的方法
MySQL修改新密码方法 记得原密码情况下,修改新密码:登录到数据库后,输入 set password for 用户名@localhost = '新密码'; 来设置新的密码,别忘记分号哦.如图所示: ...
- 重新认识MySQL中的COUNT语句
在数据库的增删改查操作中,使用最频繁的就是查询操作. 而在所有查询操作中,统计数量操作更是经常被用到. 关于数据库中行数统计,无论是MySQL还是Oracle亦或者是SqlServer,都有一个函数可 ...
- 暑期集训20190726 跳动(skip)
[题目描述] 福州三中的操场上有着数不尽的跳动的小朋友. 当然善于思考的你总能从中发掘出不一样的问题 福州三中的跑道是一个n个格子围成的圆形,从0~n-1编号,有m个同学,第i个同学步长为a[i], ...
- Pandas分类(category)数据处理
分类(Category)数据:直白来说,就是取值为有限的,或者说是固定数量的可能值.例如:性别.血型 指定数据类型构建分类数据 dtype="category" 以血型为例,创建一 ...
- 赤壁情:dp
首先这道题用到的3个新关键字大概讲一下: (我刚学会仅仅会瞎搞做题,欢迎大神补充) static:声明一个变量并清空.(不知道用不用时间,求解答) 具体用法:static 变量类型 变量名.如:sta ...
- python——float()函数用法
float()函数是python中一个比较常用的内建函数,我们要详细掌握它的使用方法,避免在编写代码的过程中错误使用. float()函数返回一个十进制浮点型数值(小数). float()括号内只能是 ...
- python多线程总结
概述 进程与线程 进程:进程是资源(CPU.内存等)分配的最小单位,进程有独立的地址空间与系统资源,一个进程可以包含一个或多个线程 线程:线程是CPU调度的最小单位,是进程的一个执行流,线程依赖于进程 ...
- linux中dd相关命令骚操作
一.dd如何快速将磁盘写满 方法一: dd if=/dev/zero of=/tmp/file bs=1G count=10 # 参数解释 1. if=文件名:输入文件名,缺省为标准输入.即指定源文件 ...
- mongodb基本命令,mongodb集群原理分析
mongodb基本命令,mongodb集群原理分析 集合: 1.集合没有固定数据格式. 2. 数据: 时间类型: Date() 当前时间(js时间) new Date() 格林尼治时间(object) ...