3. 无损压缩基础与熵编码
高频采集数据(如振动、电流、温度、压力等通道)在采样率提升到 10 kHz~1 MHz 后,原始数据量会迅速膨胀。以 8 通道、24 bit、100 kHz 采样为例,每秒产生 8×3×100000 ≈ 2.4 MB 原始数据,一天就是约 207 GB。无损压缩的目标是在不丢失任何采样点数值的前提下,把存储与传输成本降下来。本章从信息熵出发,讲清熵编码的原理,并落到高频采集场景中的实现与评估方法。
一、信息熵:压缩极限的度量
信息熵由香农提出,用来衡量一个离散信源的平均不确定度。设信源符号集为 {x₁, x₂, …, xₙ},各符号出现概率为 p(xᵢ),则熵定义为:
H(X) = - Σ p(xᵢ) · log₂ p(xᵢ) (单位:bit/符号)
熵的物理含义是:在无损前提下,平均每个符号至少需要多少比特才能表示。若某通道采样值只有 4 种电平,概率分别为 0.5、0.25、0.125、0.125,则 H = 0.5×1 + 0.25×2 + 0.125×3 + 0.125×3 = 1.75 bit/符号,而原始固定 2 bit 编码平均要 2 bit,压缩空间约 12.5%。
香农信源编码定理指出:对无记忆信源,无损编码的平均码长 L 满足 H(X) ≤ L < H(X) + 1。也就是说,熵是压缩率的下界,任何无损编码都不可能突破它。这给工程实践一个明确判断:如果某通道实测熵为 6.2 bit/样本,而原始是 16 bit,那么理论压缩比上限约为 16/6.2 ≈ 2.58,实际做到 2.2~2.4 已属良好。
二、霍夫曼编码:变长前缀码
霍夫曼编码是最经典的熵编码之一。它按符号概率自底向上构建二叉树:每次取概率最小的两个节点合并,新节点概率为两者之和,重复直到只剩一个根节点,再从根到叶分配 0/1 得到码字。概率大的符号码短,概率小的码长,从而逼近熵。
以 5 个符号为例,概率为 A:0.4、B:0.2、C:0.2、D:0.1、E:0.1。合并 D+E=0.2,再合并 B+C=0.4,再合并 0.2+0.4=0.6,最后与 A 合并。可得码长:A=1、B=2、C=2、D=3、E=3,平均码长 L = 0.4×1 + 0.2×2 + 0.2×2 + 0.1×3 + 0.1×3 = 2.0 bit,而熵 H = 2.12 bit,效率约 94%。
霍夫曼码是前缀码,任意码字都不是另一码字的前缀,因此解码无歧义。但它有两个工程限制:一是必须预先统计概率并传输码表,码表本身有开销;二是码长必须为整数比特,当符号概率接近 1 时无法进一步压缩。在高频采集中,常先对采样值做差分或预测,再对残差做霍夫曼编码,使残差分布更集中,提升压缩效果。
三、算术编码与区间编码
算术编码突破了整数码长的限制。它把整个符号序列映射到 [0,1) 区间内的一个实数子区间:初始区间为 [0,1),每读入一个符号,就按该符号的累积概率范围把当前区间按比例缩小。最终只需输出一个落在最终区间内的二进制小数即可表示整段序列。其平均码长可以非常接近熵,尤其适合概率高度偏斜的数据。
区间编码(Range Coding)是算术编码的整数化实现,用整数上下界代替浮点区间,避免了浮点精度问题,便于硬件和嵌入式实现。它同样通过累积频率表更新区间,解码时根据当前值落在哪个符号区间反推符号。区间编码在视频、音频和高速采集压缩中应用广泛。
算术/区间编码的代价是计算复杂度高于霍夫曼,且对错误传播敏感——一位出错可能导致后续解码全部错位。因此在高频采集系统中,通常把数据分块(如每 4096 个样本一块),每块独立编码,既限制错误传播,又便于并行处理。
四、在高频采集中的实现要点
把熵编码用到高频采集,不能只套算法,还要处理几个工程问题。
概率模型的选择。霍夫曼需要先统计全局概率,适合离线压缩;区间编码可以用自适应模型,边编码边更新频率表,适合流式采集。自适应模型无需传输码表,但解码端必须严格同步更新,否则会错位。
分块与并行。把连续采样按 4096 或 8192 个样本分块,每块独立统计和编码。这样既限制错误传播,又可以让多核 CPU 或 FPGA 并行处理。块大小需要权衡:块太小,码表/频率表开销占比高;块太大,并行度和错误隔离变差。
残差编码。原始采样值相邻点高度相关,直接对原始值编码效果差。通常先做一阶差分:d[n] = x[n] − x[n−1],再对 d[n] 做熵编码。差分后残差集中在 0 附近,熵显著降低。对于周期信号,还可以用线性预测器,如 x̂[n] = 2x[n−1] − x[n−2],进一步减小残差。
码表传输与同步。霍夫曼码表需要随数据一起存储或传输。常见做法是把码表放在块头部,或用规范霍夫曼码(Canonical Huffman)只传码长,减少开销。区间编码若用自适应模型,则收发两端用相同初始频率表和更新规则,不需要额外码表。
五、性能评估方法
评估一套熵编码方案,至少看四个指标:压缩比、编码效率、吞吐率和资源占用。压缩比 = 原始字节数 / 压缩后字节数;编码效率 = H / L × 100%,越接近 100% 越好;吞吐率用 MB/s 衡量,高频采集常要求编码速度不低于采样速度;资源占用包括 CPU 占用、内存和编解码延迟。
以一个教学示例说明:某振动通道 16 bit、50 kHz 采样,取 1 秒数据共 100 KB。统计得原始熵 H = 9.8 bit/样本。用一阶差分后残差熵降到 6.5 bit/样本。采用区间编码,实测平均码长 6.8 bit/样本,压缩后约 42.5 KB,压缩比约 2.35,编码效率 6.5/6.8 ≈ 95.6%。若改用霍夫曼,平均码长约 7.2 bit/样本,压缩后约 45 KB,压缩比约 2.22。该示例说明:差分预处理带来的收益往往大于编码算法本身的差异,而区间编码在偏斜分布下比霍夫曼更接近熵极限。