我计划在一个文件上存档几个小时的传感器数据。对于这个传感器,分辨率(使用的位数)是完全已知的:22位
我的第一次尝试是将一系列22位的值串联起来,作为一个位流。在
它工作得非常好,尤其是当信号很复杂的时候。 然而,当信号高度可压缩时,我发现将我的项目填充到下一个8的倍数会更有趣。在
例如:
high_res_sinus = [int(math.sin(i) * 0x3FFFFF) & 0x3FFFFF for i in range(10000)]
low_res_sinus = [int(math.sin(i) * 0x3) & 0x3FFFFF for i in range(10000)]
这里,high_res_sinus
比low_res_sinus
更难压缩(使用gzip)
https://code.activestate.com/recipes/580649-nbitarray/
对于high_res_sinus
22位值,串联,是最好的选择,未压缩!
但是对于low_res_sinus
,压缩填充版本要好得多。在
你知道一个压缩器,它的分辨率可以设置为与模8不同的值吗? 你有更好的建议吗?在
编辑
关于一个更好的建议:我发现hdf5和mafisc过滤器的组合非常适合传感器数据。即使我喜欢重新发明轮子:)
通常下一个传感器样本的好模型是最后一个传感器样本。你应该看看不同的样本,然后压缩。你方按原样寄出第一个样品。每个后续样本将作为该样本减去上一个样本发送。为了帮助压缩,您可以将每个差异存储为一个可变的字节数,使用每个字节的高位来指示是否还有另一个字节。理想情况下,大多数示例都将以一个字节结尾。然后可以应用deflate(gzip)或其他无损压缩程序。在
一个编码是差的最低有效的七位,如果这是所有位,则高位为一;如果下一个字节中有更多位,则为零。以此类推,直到你得到所有的位,以1的高位结束。在
相关问题 更多 >
编程相关推荐