4. 无损压缩基础与实时性改造
任务载荷数据流通常由多路传感器汇聚而成:可见光/红外图像帧、激光测距回波、惯导姿态、GPS 定位、雷达原始采样等。这些数据在进入压缩环节前,先要回答一个基本问题——能不能无损压缩,以及无损压缩能不能满足实时性。无损压缩的数学基础是信息熵:数据中存在的冗余越多,可压缩空间越大;而实时性约束则要求编码器在有限的时间预算内完成处理,不能为了多压几个百分点而让整条数据链超时。
一、三类无损编码的机理与冗余来源
熵编码(Huffman、算术编码、区间编码)针对的是“符号出现概率不均匀”这一统计冗余。它不改变数据内容,只把高频符号映射为短码字、低频符号映射为长码字。以 8 bit 灰度图像为例,若某帧直方图集中在少数几个灰度级,Huffman 编码后平均码长可降到 5~6 bit/像素;但若直方图接近均匀分布,压缩比会退化到接近 1,甚至因码表开销而略微膨胀。熵编码的代价是变长码率:输出速率随数据内容波动,对固定带宽信道不友好。
字典编码(LZ77/LZ78、LZW、LZ4、Zstandard)针对的是“重复子串”这一结构冗余。它维护一个滑动窗口或显式字典,把出现过的字符串替换为(距离,长度)引用。对载荷数据而言,字典编码特别适合两类场景:一是遥测帧中大量重复的帧头、同步字、状态字段;二是图像中成片的平坦区域或重复纹理。LZ4 的解压速度可达 GB/s 量级,压缩速度也在数百 MB/s,是实时链路中常见的“轻量级”选择;而 Zstandard 通过可调压缩级别,在压缩比和解压速度之间提供连续折中。
预测编码(DPCM、线性预测、JPEG-LS 中的 MED 预测)针对的是“相邻样本高度相关”这一空间/时间冗余。它不直接编码原始值,而是编码当前样本与预测值之差(残差)。若预测足够准,残差分布集中在 0 附近,再配合熵编码即可显著压缩。对图像行方向相邻像素、对惯导时间序列的相邻采样,预测编码往往比通用字典编码更有效,因为它利用了数据的物理连续性。
二、三类编码在载荷数据流中的适用性对比
把三类编码放到同一张“适用性坐标”上看,横轴是冗余类型匹配度,纵轴是实时性友好度,可以得出比较清晰的选型边界。
| 编码类型 | 最匹配的载荷数据 | 典型压缩比(示例) | 编码延迟 | 实时性风险 |
|---|---|---|---|---|
| 熵编码(Huffman) | 灰度直方图集中的红外图像、量化后的残差 | 1.5~2.5 | 低(查表) | 变长码率,需缓冲 |
| 字典编码(LZ4) | 遥测帧头、重复状态字段、平坦图像块 | 1.8~3.0 | 极低 | 窗口越大延迟越高 |
| 预测编码(DPCM+熵编码) | 图像行像素、惯导时间序列 | 2.0~4.0 | 低(逐样本) | 误差传播,需定期重置 |
表中压缩比为教学示例量级,实际值取决于数据统计特性。可以看到:没有一种编码在所有载荷上都最优。工程上更常见的做法是“预测 + 熵编码”作为图像主通道,“字典编码”作为遥测/辅助数据通道,二者并行后按固定帧结构打包。
三、实时性改造的关键手段
无损压缩算法本身往往不是为实时链路设计的,直接套用会出现三类问题:编码延迟超过帧周期、输出码率剧烈波动导致信道溢出、码表/字典开销吃掉压缩收益。对应的改造手段如下。
1. 分块独立编码,切断长依赖。把一帧图像切成 16×16 或 32×32 的宏块,每块独立预测、独立熵编码,块内不跨块引用。这样单块解码失败不会污染整帧,也便于 FPGA 流水线并行。代价是块边界处预测精度略降,压缩比通常损失 3%~8%。
2. 限制字典窗口与预测阶数。LZ4 默认窗口可达 64 KB,若改为 4 KB 窗口,压缩比略降但编码延迟和内存占用显著下降。预测编码中,一阶 DPCM 只需缓存前一个样本,二阶线性预测需缓存前两个,阶数越高残差越小但延迟和误差传播越严重。实时链路通常取一阶或二阶。
3. 固定码率打包,吸收码率波动。熵编码输出是变长的,若直接送入固定速率信道会造成溢出或空载。常用做法是设置一个帧级缓冲:每帧分配固定字节数,编码结果不足则填充,超出则触发降级策略(如提高量化步长或跳过部分块)。这样信道利用率平稳,但压缩比会因填充而略降。
四、一个可执行的选型判断流程
面对一路新的载荷数据,可以按以下顺序判断,而不是先选算法再套数据。
- 看数据是否允许有损。若任务要求像素级无损(如遥感定量反演、雷达原始 IQ 记录),则只能走无损路线;若允许有损,则无损编码只作为兜底或辅助通道。
- 估计冗余类型。对一段样本做直方图统计(判断统计冗余)、自相关分析(判断空间/时间冗余)、重复子串扫描(判断结构冗余)。哪类冗余占主导,就优先用对应编码。
- 算实时预算。用帧周期减去采集、打包、传输、解码的时间,得到编码可用时间;再除以单帧数据量,得到所需吞吐率。若吞吐率超过所选算法的实测速度,就降阶、分块或换更轻量的算法。
- 做小样本验证。取 100~200 帧真实数据,分别跑候选算法,记录压缩比、单帧编码耗时、输出码率标准差。选择“压缩比满足下限、耗时留 30% 余量、码率波动可被缓冲吸收”的方案。
五、组合使用的典型结构
实际系统很少只用一种编码。一个常见的实时无损压缩链路是:图像数据先做一阶 DPCM 预测,残差经 Huffman 查表编码;遥测数据走 LZ4 字典编码;两路结果按固定帧结构(帧头 + 图像块 + 遥测块 + 校验)打包。这样图像通道利用空间冗余,遥测通道利用结构冗余,各自发挥所长,同时通过分块和固定打包把实时性控制在预算内。
需要强调的是,无损压缩的“无损”是指解码后与编码前逐比特一致。在实时改造中,分块、限窗、固定打包都不破坏这一性质,它们改变的是压缩比和延迟的折中,而不是数据完整性。真正会破坏无损性的操作是量化、降采样和阈值截断,这些属于有损范畴,不能混入无损通道。
因此,本节的核心结论可以归纳为一句话:先判冗余类型选编码,再用分块、限窗、固定打包做实时性改造,最后用小样本实测验证压缩比与延迟是否同时达标。三类编码不是互斥选项,而是可以按数据通道组合使用的工具箱。