跳转至

第 4 章:基础信息编码方法

把信息映射到信息向量

直接映射

给每个信息 \(m \in M\) 分配一个独一无二的标志(水印)\(w \in W\),检测的时候看内嵌的标志最像哪一个。

  • 假阳性:越来越多的水印会增加出现假阳性的概率。
  • 精确度:用高频信号的话水印位置会很快用完,低频信号的话精确度会偏低。

所以标志之间要尽可能不相似,最好是负相关。比如在一个二维平面里面放三个标志向量,就最好让它们各自成 120 度角。

多标志信息编码

设有个字符集 \(A\),那么一条长度为 \(L\) 的信息就有 \(|A|^L\) 种。

复用

  • 时间/空间复用:把载体(work)按照时间或者空间分割,打上对应位置的标记。
  • 频率复用:在不同频率上编码标记,进行各种变换。
  • 码分复用:做 \(L \times |A|\) 种标记,称为 \(W_{AL}\)\(W_{AL}[a, b]\) 表示第 \(a\) 位信息为 \(b\),然后把这些标记叠在一起发送。

\(W_{AL}\) 的要求:不同位的水印之间不相关;同一位不同种的水印之间负相关,因为同一位里面只会出现一种水印,也就是说:

\(W_{AL}[i, a] \cdot W_{AL}[j, b] = 0 \quad (i \neq j)\)

\(W_{AL}[i, a] \cdot W_{AL}[i, b] = -1 \quad (a \neq b)\)

纠错编码(ECC)

对于所有可能出现的编码 \(S\),把它们分成两类:\(S_c\),合法的编码:\(\bar{S_c}\),传输过程中出错了的编码。\(\bar{S_c}\) 里面的编码各自有一个原编码。

格子码(Trellis Codes)、Viterbi 解码算法

看这个的前半段

如果信息长度有 \(N\) 位,纠错码有 \(k\) 位,要能纠正 \(w\) 位错误,那么 \(k\) 至少需要满足:

\(2^{N + k} \geq 2^N \times (\sum_{i = 0}^{w} \binom{N + k}{i})\)

检测多标记水印

如果单个标记出现假阳性的概率是 \(P_{fp0}\),那么 \(A\) 里面的标记出现假阳性的概率可以近似为 \(|A| P_{fp0} \approx P_{fp1}\)(标记之间完全不重合的时候取等号);长度为 \(L\) 的信息出现假阳性的概率就是 \((P_{fp1})^L = P_{fp}\)

归一化相关性

\(\mathbf{v}_L = \mathbf{v}_o + \sum_{i = 1}^{L} \mathbf{w}_{ri}\)\(||\mathbf{v}_L|| \approx \sqrt{L}\)

\(z_{lc}(\mathbf{v}_L, \mathbf{w}_{r1}) = \mathbf{v}_o \cdot \mathbf{w}_{r1} + \mathbf{w}_{r1} \cdot \mathbf{w}_{r1} = \epsilon + 1\)

\(z_{cc}(\mathbf{v}_L, \mathbf{w}_{r1}) = \frac{\mathbf{v}_L}{||\mathbf{v}_L||} \cdot \mathbf{w}_{r1} = \frac{\epsilon + 1}{\sqrt{L}}\)