gpt4 book ai didi

python - 比特级压缩

转载 作者:太空宇宙 更新时间:2023-11-04 05:32:15 25 4
gpt4 key购买 nike

我计划将数小时的传感器数据归档到一个文件中。对于这个传感器,分辨率(使用的位数)是众所周知的: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)

# size before -> after gzip compression (ratio)
high_res_sinus:22 bits: 27500 -> 27528 (100.1 %) # 22 bits
high_res_sinus:24 bits: 30000 -> 29300 (97.7 %) # same, padded to 24 bits
low_res_sinus:22 bits: 27500 -> 1104 (4.0 %) # 22 bits
low_res_sinus:24 bits: 30000 -> 374 (1.2 %) # same, padded to 24 bits
low_res_sinus:32 bits: 40000 -> 338 (0.8 %) # same, padded to 32 bits, even better !

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

对于 high_res_sinus 22 位值,串联是最佳选择,未压缩!但对于 low_res_sinus,压缩填充版本会好得多。

您知道可以将分辨率设置为与模 8 不同的值的压缩器吗?您有更好的建议吗?


编辑

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

最佳答案

通常下一个传感器样本的良好模型是最后一个传感器样本。您应该查看样本的差异,然后进行压缩。您按原样发送第一个样本。每个后续样本作为该样本减去前一个样本发送。为了帮助压缩,您可以将每个差异存储为可变字节数,使用每个字节的高位来指示是否有另一个字节。理想情况下,您的大部分样本最终都会以一个字节结束。然后您可以应用 deflate (gzip) 或其他一些无损压缩器。

如果这是所有位,则编码是与高位之差的最低有效七位,如果这是所有位,则为零,如果下一个字节中有更多位,则为零。依此类推,直到获得所有位,以高位 1 终止。

关于python - 比特级压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36772501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com