bi压缩

2024-04-25 14:08:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我计划在一个文件上存档几个小时的传感器数据。对于这个传感器,分辨率(使用的位数)是完全已知的: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_sinuslow_res_sinus更难压缩(使用gzip)

^{pr2}$

https://code.activestate.com/recipes/580649-nbitarray/

对于high_res_sinus22位值,串联,是最好的选择,未压缩! 但是对于low_res_sinus,压缩填充版本要好得多。在

你知道一个压缩器,它的分辨率可以设置为与模8不同的值吗? 你有更好的建议吗?在


编辑

关于一个更好的建议:我发现hdf5和mafisc过滤器的组合非常适合传感器数据。即使我喜欢重新发明轮子:)


Tags: 数据infor信号分辨率rangeresmath
1条回答
网友
1楼 · 发布于 2024-04-25 14:08:15

通常下一个传感器样本的好模型是最后一个传感器样本。你应该看看不同的样本,然后压缩。你方按原样寄出第一个样品。每个后续样本将作为该样本减去上一个样本发送。为了帮助压缩,您可以将每个差异存储为一个可变的字节数,使用每个字节的高位来指示是否还有另一个字节。理想情况下,大多数示例都将以一个字节结尾。然后可以应用deflate(gzip)或其他无损压缩程序。在

一个编码是差的最低有效的七位,如果这是所有位,则高位为一;如果下一个字节中有更多位,则为零。以此类推,直到你得到所有的位,以1的高位结束。在

相关问题 更多 >