第 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}}\)