数据压缩技术 - 熵编码原理

信息量的概念

信息量:表示该符号所需要的位数。

考虑用 0 和 1 组成的二进制数码为含有 n 个符号的某条消息编码,假设符号 \(a_{j}\) 在整条消息中重复出现的概率为 \(P_{j}\) ,则该符号的信息量定义为:

\[E_{n} = -log_{2}(P_{j})\qquad(0\le P_{j}\le1)\]

信息量表示为以 2 为底的对数,是正值。

举例说明

输入信源字符串:aabbaccbaa

a、b、c 出现的概率分别为 0.5、0.3 和 0.2,他们的信息量分别为:

\[ E_{a} = -\log_{2}0.5 = 1\] \[ E_{b} = -\log_{2}0.3 = 1.737\] \[ E_{c} = -\log_{2}0.2 = 2.322\]

总信息量也即表达整个字符串需要的位数:

\[E = E_{a} \times 5 + E_{b} \times 3 + E_{c} \times 2 = 14.855(bit)\]

等长编码

输入信源字符串:aabbaccbaa

使用等长编码编码该字符串:a-00, b-01, c-10

则该字符串可表示为:"00000101001010010000",需要 20 位二进制数表示。

熵编码的概念

数据压缩的基石是 Shannon 于 1948 年创立的信息论。 Shannon 第一定律(率失真定律)确定了在编码过程中不损失任何信息,即在无损编码条件下数据压缩的理论极限是信息的熵,并指出了如何建立最优数据压缩编码方法。 这类保存信息熵的编码方法统称为熵编码(Entropy coding), 熵编码结果经解码后可无失真地恢复出原始信息。

假设信源符号集 \(A\ {a_{1},a_{2},...,a_{j}}\),其中每个元素 \(a_{j}\) 为信源符号。 其中信源产生符号 \(a_{j}\) 这个事件的概率是 \(P_{j}\),则对每个信源输出的平均信息量为:

\[H(X)=-\sum_{j=1}^{m}p_{j}*\log_{2}p_{j}\] \[\sum_{j=1}^{m}p_{j}=1\]

\(H(X)\) 为信源的平均信息量,或称为 “熵”(entropy)

平均码长的概念

如果对字符 \(a_{j 的}\) 编码长度为 \(L_{j}\),则信号 L 的平均码长为:

\[L_{avg} = \sum_{j=1}^{m}p_{j}*L_{j}\]

其中 m 为信号中所出现不同字符的个数。

无失真编码定理

  • 平均码长 \(L_{avg} \gg H(X)\):有冗余,不是最佳
  • 平均码长 \(L_{avg} \lt H(X)\):不可能
  • 平均码长 \(L_{avg} \approx H(X)\):最佳编码

熵值是平均码长的下限。

编码的基本思想就是用较少的比特数表示出现概率较大的码源符号,用较多的比特数表示出现概率小的码源符号;

常用编码方式:霍夫曼编码 (Huffman):数据压缩技术 - Huffman 编码

编码效率的定义

\(H(x)\) 除以平均码长 \(L_{avg}\) 即表示编码效率:

\[H(X) = -\sum_{j=1}^{m}p_{j}*\log_{2}p_{j}\] \[\eta = \frac{H(X)}{L_{avg}}\qquad\eta\le 1\]