• Principles of Digital Communications I 学习笔记2-Discrete Source Encoding


    Principles of Digital Communications I 学习笔记2-Discrete Source Encoding

      这是《Principles of Digital Communications》的第二次课,也是第二章《Coding for Discrete Source》的一个开始节。Prof.Gallager的教学安排是,先讲信源的编码和解码,再将信道的编码和解码,这样很符合通信的分层的思想。

      我觉得学习“不求甚解”是不行的,知其然必须知其所以然(虽然大家都说做工程的会用公式就行)。带着目的性去学习方可学得好,也就是说知道为什么要这样做之后才能更深刻的理解。那为什么要进行信源编码,从我的理解上来说,通信系统强调三点:有效性、可靠性、安全性。有效性是为了让信道能传输更多的信息,可以从两个方面来提高有效性:第一是尽可能只传输有用的信息,剔除无用的信息;第二个方面就是尽可能提高传输的速度,在相同时间内传输更多的信息。前一个方面的实现就是信源编码,信源编码就是尽可能得提取出信源信息,用尽可能短的二进制符号“covering”信源信息。以前的信息论老师讲到了信源编码的一个形象比喻,我觉得讲得很好。他说,信源编码就像淘金子,一堆沙子里面可能有几克金子,但是我不可能把这堆沙子全带回家里,所以我必须想办法提取出沙子来带走,虽然我在淘金的过程中可能失去一部分金子,但是最后我可以拿着纯度很高的金子回去,一点点的损耗还是值得的。对于信源来说,可能含有1.5bit的信息量,我不经过编码可能得需要用10bit来表示,但如果经过编码,可能只需要2bit来表示。当然这其中可能会丢失信息(没经过一次信息处理,信息量是有丢失的),但是接收端能解码就行。这样我们就提高了系统的有效性。

      扯多了,下面回到课上。Prof.Gallager先讲到了信源的分类,信源的分类从大体上来说分为三类:离散信源、模拟波信源、有模拟幅值的离散时间信源。其中最重要的一类是离散信源,也是应用最广泛的一类。Prof.Gallager曾经强调了一种思考方法,就是从最简单的模型(toy model)出发,理解了简单模型后再思考复杂模型。所以对于信源编码而言,我们先考虑最简单的一种toy source-离散信源。离散信源的假定是先有一个信源的符号集{x1,x2,x3,x4...xm},信源编码要做的事情就是将信源符号用二进制序列表示。

      首先考虑的是等长编码,即每个信源符号都用相同长度的bit序列表示。这样来说的话,假如信源中含有M个不同的符号,要用L-bit表示信源,则必须使得,当然要使L无限接近于logM是可行的,那就是先将信源符号分组,n个信源符号组成一组进行编码,此时,当n很大的时候,L就无限接近于logM。

      但是定长编码还是有一定的问题,那就是没有考虑概率问题。信源的输出通常是概率意义上的,从直观上来说,要减小平均码长,就得概率大的信源符号编码码长小,概率小的信源符号编码码长大,这样系统的有效性可以更进一步的提高。所以我们就引入的变长编码,虽然变长嘛会带来挺多问题,比如说同步,比如说可能需要缓冲,但是有效性能提高,这些都不是事儿!其实信源编码要遵守一个很重要的原则:唯一可译。前面讲等长码的时候为什么没有提到唯一可译,是因为只要用来表示M个信源符号的等长码各不相同,肯定是唯一可译。而变长码,由于长度不确定,所以必须能有确定的方式对码字进行定界。下面给出唯一可译的定义:

    也就是说无论信源输出符号怎么排列,对应的码序列不可能完全一样,没有模糊度。

    一种很重要的唯一可译码是无前缀码(prefix-free code),无前缀码的生成可以采用“二进制树”,即如下图所示:

    从根节点开始到叶子节点结束为一个码,二进制树为什么可以编出无前缀码,是因为每个码都是到叶子节点结束,而处在不同叶子节点的码不可能经过完全一样的路径。而且叶子节点之前不可能存在叶子节点,所以不可能存在一个码是另外一个码的前缀。当然为了保证平均码长最小,尽量得让树满(full),即所有码的兄弟节点都得是码。而上图中的树不满,因为C的兄弟节点不是码,所以遇到这样的情况的话,将C往跟节点移一步,如下图:

    而讲到了无前缀码的编码,必须得谈到解码,这样才能保证唯一可译性。唯一可译性的保证可以从二进制树中看出来:

      可以出,编码时是树的扩展,解码时从根出发,根据编码树解出一个码后,其子树又是一个和编码树相同的树,按同样的方法可以得到第二个码,依此类推,循环往复。

    在此特说明一点:无前缀码是唯一可译码,但是唯一可译码不一定是无前缀码!!!!

      那到底怎么样才能构成无前缀码,或者说无前缀码的本身需要满足哪些条件,这就说到了著名的Kraft不等式(这篇博客仅提到不等式,下篇博客将给出证明,包括Prof.Gallager的证明,同时也包括我自己给出的证明)。

      Kraft不等式说明了无前缀码码长所需要满足的条件,即:

    也就是说,只有具有码长满足kraft不等式的一组码才能构成无前缀码。

  • 相关阅读:
    函数三
    函数二
    函数一
    python数据类型和编码补充
    Python基础数据类型考试题
    VS2017设置C++标准
    std::weak_ptr
    Visual Assist 配色
    JMeter
    fcgi返回状态码
  • 原文地址:https://www.cnblogs.com/LNAmp/p/Discrete_Source_Encoding.html
Copyright © 2020-2023  润新知