对随机数值数据最有效的无损压缩?

时间:2012-11-15 02:12:39

标签: data-compression

我的数据实际上并非完全随机。我希望压缩遥测测量,这将倾向于在相同的范围内(例如,温度变化不大)。但是,我寻求多种应用的解决方案,所以我可能会发送一天的温度,下一次发送电压等等。

我想通过低数据速率卫星链路发送测量数据。 SatCom相当昂贵,所以我想尽可能地削减每一分钱。我不介意花费计算资源来打包和购买解压缩数据,因为没有太多时间关键(传输192个字节最多可能需要30秒)。

任何人都可以建议使用FOSS数据压缩方法,这会给我最大的遥测数据压缩效果吗?

值得一试吗?我可以期待什么样的百分比涨幅?

我很抱歉我无法更精确地了解数据的性质 - 只需要进行一般的遥测测量,如温度,纬度/长度GPS位置,液体流速等等。

2 个答案:

答案 0 :(得分:5)

真正的随机数据不可压缩。

由于您无法透露数据的详细信息,因此您最好的办法是在某些样本数据上测试一些不同的压缩算法。

一个好的起点是DEFLATE algorithm,它是LZ77滑动窗口压缩和霍夫曼编码的行业标准组合。它由许多特定的压缩包实现,GZIP是一个突出的例子。

答案 1 :(得分:4)

也许最好的解决方案是使用DEFLATE库并在大数据块和高压缩设置下运行它。

如果要滚动自己的流压缩算法,可以应用适用于声音文件的相同算法:直接发送第一个测量值,然后对每个样本与前一个样本之间的差异进行编码(delta编码)。

现在,最佳编码因数据变化的速度而异:

如果数据变化足够快,请使用自适应霍夫曼树。如果差异是不相关的(数据+噪声),这将使每个样本最多从熵获得一位。

如果几个连续的数据样本可能彼此相等(数据变化不是很快并且没有HF噪声),则使用一个Huffmann树对每个非零差异进行编码,并使用a对零个数进行编码。第二个霍夫曼树。这样每次运行最多可以获得两位。

您甚至可以将差异编码为仅一位(向上或向下),但是您需要能够对零长度运行进行编码。


我的建议:delta-encode一次或两次以获得不相关的条目,然后使用库进行DEFLATE。

相关问题