【发布时间】:2009-08-28 17:51:41
【问题描述】:
我需要一个针对受限资源环境(例如基于二进制(十六进制数据)的嵌入式系统)优化的 FAST 解压缩例程,具有以下特点:
- 数据面向 8 位(字节)(数据总线为 8 位宽)。
- 字节值在 0 到 0xFF 的范围内并不统一,但在每个 DataSet 中都有泊松分布(钟形曲线)。
- 数据集是高级固定的(要刻录到 Flash 中),每个集很少 > 1 - 2MB
压缩可能需要尽可能多的时间,但在内存占用最少的最坏情况下,一个字节的解压缩应该需要 23uS,因为它将在嵌入式系统(3Mhz - 12Mhz 内核,2k)等受限资源环境中完成字节 RAM)。
什么是好的减压程序?
基本的运行长度编码似乎太浪费了——我可以立即看到,将标头集添加到压缩数据以使用未使用的字节值来表示经常重复的模式会带来惊人的性能!
对于只投入了几分钟的我来说,肯定已经存在来自热爱这些东西的人的更好的算法吗?
我想要一些“准备就绪”的示例在 PC 上试用,以便我可以将性能与基本 RLE 进行比较。
【问题讨论】:
-
你真的是指 256 字节的 RAM 吗?那么,如果一个压缩字节可以扩展到 >256 个未压缩字节,它们就没有空间了?
-
连续字节之间是否存在相关性?压缩可以有损吗?
-
如果这类似于 6502 或 z80,大多数(全部?)指令都需要几个时钟周期,并且在 2mhz 时会花费超过一微秒的时间。
-
1 uSec 只有 2 个时钟周期 @ 2 Mhz。在您施加的约束下,您将很难实现均匀的运行长度编码。
-
好点 Jim.. 我将重新审视时序约束并更新本文。时钟频率不过可以提高到 12Mhz。
标签: embedded compression run-length-encoding