如何有效地compress/archive一条温度曲线?

How to compress/archive a temperature curve effectively?

总结:工业温度计用于在技术设备上采样温度。几个月来,样本只是存储在 SQL 数据库中。是否有任何众所周知的方法来压缩温度曲线,以便可以有效地存储更长的历史记录(比如用于审计目的)?

更多详情:实际上,温度计的数量要多得多,可能还有其他与该技术相关的传感器。并且有众所周知的时间间隔,曲线 属于 在机器上处理的批次。温度曲线应添加到批次文档中。

我的想法是温度是一个可以以某种方式进行插值的平滑函数——比如使用 MP3 格式压缩声音的方式。压缩不必是松散的。但是,必须能够重建温度曲线(不一定是相同的样本值和相同的采样间隔)——比如说,能够绘制曲线或告诉特定时间的温度是多少。

来自 SQL table 的原始样本值将被处理,压缩版本将存储在其他地方(可能也在 SQL 数据库中,作为一个 blob),然后可以删除原始样本以保存数据库 space.

是否有解决该问题的众所周知且广泛使用的方法?

一种简单的方法是将温度编码为一个字节或两个字节,具体取决于您需要的范围和精度,然后将第一个温度写入输出,然后是所有其余温度之间的温度差.对于双字节温度,您可以限制一些范围并根据与可变长度整数的差异写入一个或两个字节。例如。如果设置了第一个字节的高位,则下一个字节包含另外 8 位的差异,允许 15 位的差异。根据您的描述,大多数情况下是一个字节。

然后获取该流并将其提供给标准无损压缩器,例如zlib.

任何有损都应在采样步骤中引入,仅编码您真正需要编码所需范围和精度的位数。剩下的过程应该是无损的,以避免解压缩值的系统漂移。

减去连续值是最简单的预测器。在那种情况下,下一个值的预测是它之前的值。它也可能是最有效的,具体取决于数据的噪音。如果您的数据真的很流畅,那么您可以尝试使用更高阶的预测器来查看您是否获得更好的性能。例如。使用最后两个点预测下一个点是 2a - b,其中 a 是前一个点,b 是之前的点,或者使用最后三个点 3a - 3b + c,其中 c 是 [= 之前​​的点18=]b。 (这些假设每个之间的时间步长相等。)