【问题标题】:Compression algorithm for contiguous numbers连续数的压缩算法
【发布时间】:2023-02-07 04:25:06
【问题描述】:

我正在寻找一种有效的编码来存储模拟系数。

数据有数千条曲线,每条曲线有 512 个连续的单精度数字。数据可以存储为定点,同时它应该保留大约 23 位精度(与统一级别相比)。

曲线可能看起来像那些:

我最好的方法是将数字转换为 24 位定点数。只要平方和减少,我就反复取相邻的差异。当使用 LZMA (xz,lzip) 压缩结果数据时,我得到大约 7.5 倍的压缩率(与 float32 相比)。

相邻差异在开始时很好,但它们强调了每一轮的量化噪声。

在边界处减去斜率/曲线后,我还尝试了余弦变换。产生的压缩要弱得多。

我试过 AEC 但 LZMA 压缩得更强。最高压缩是使用 bzip3(在相邻差异之后)。

我发现没有函数可以高精度和有限的参数数来拟合数据。

有没有办法在使用相邻差异时减少量化噪声的惩罚?

是否有更适合此类数据的编码?

【问题讨论】:

  • “连续”到底是什么意思?量化噪声从何而来?您是说 23 位中最低有效位的噪声吗?当您说“模拟”时,是由算法生成的而不是测量的吗?如果它们是由算法生成的,那么为什么不使用算法和参数作为压缩表示呢?
  • 数据模型:数据由模型生成(基于大约 500MB 的测量数据)。计算模型是昂贵的,所以模型应该预先计算各种参数并分布。我想压缩几十 GB 的结果数据。我所说的量化噪声来自数字表示:在与最不重要步骤的一个相邻差异之后,你会得到一个尖峰。对于下一个相邻的差异,您会在前沿获得正尖峰,在下降沿获得负尖峰。
  • 我的意思是连续的,数据遵循严格的曲线。我用这个词来强调数据应该具有高度的预测性。
  • 那么你的意思是连续的, 不连续。

标签: encoding numbers compression


【解决方案1】:

您可以尝试更高阶的预测器。您的“相邻差异”是零阶预测变量,其中预测下一个样本等于最后一个样本。您获取实际值和预测值之间的差异,然后压缩这些差异。

您可以尝试第一、第二等顺序预测器。一阶预测器会查看最后一个二样本,在它们之间画一条线,并预测下一个样本将落在这条线上。二阶预测器会查看最后一个三样本,将它们拟合到抛物线,并预测下一个样本将落在抛物线上。等等。

假设您的样本在 x 轴上等距分布,那么 x[0] 的三次方预测变量为:

  1. x[-1](你现在用的是什么)
  2. 2*x[-1] - x[-2]
  3. 3*x[-1] - 3*x[-2] + x[-3]
  4. 4*x[-1] - 6*x[-2] + 4*x[-3] - x[-4]

(请注意,系数是交替符号二项式系数。)

我怀疑三次多项式预测器是否对您有用,但请尝试所有这些预测器以查看是否有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    相关资源
    最近更新 更多