可变带宽数据链路的日志数据减少

时间:2013-04-30 03:41:00

标签: algorithm logging encoding sparse-matrix lossy-compression

我有一个嵌入式系统,以1毫秒的间隔生成样本(16位数)。可变上行链路带宽最多可以每5ms传输一个样本,所以我是 寻找自适应降低数据速率同时最小化损失的方法 重要信息 - 在这种情况下是时间间隔内的最小值和最大值。

我认为应该工作的方案涉及稀疏编码和有损压缩的变化。像这样:

  1. 系统将在10ms间隔内部存储最小值和最大值。
  2. 系统将在内部对有限数量(例如50个)的数据对进行排队。
  3. 不允许丢失最小值或最大值,但它们发生的时间间隔可能会有所不同。
  4. 当队列变满时,相邻数据对将从队列末尾开始合并,以便转换后的最小/最大对现在代表20ms间隔。
  5. 该方案应该是迭代的,以便在必要时进一步间隔组合到40ms,80ms等。
  6. 该方案应在整个队列的长度上进行线性加权,以便不存在最新数据的组合以及最旧数据的最大必要组合。
  7. 例如,对于长度为6的队列,连续数据减少应该使数据对覆盖这些间隔:

    initial: 10 10 10 10 10 10  (60ms, queue full)
     70ms:   10 10 10 10 10 20
     80ms:   10 10 10 10 20 20
     90ms:   10 10 20 20 20 20
    100ms:   10 10 20 20 20 40
    110ms:   10 10 20 20 40 40
    120ms:   10 20 20 20 40 40
    130ms:   10 20 20 40 40 40
    140ms:   10 20 20 40 40 80
    

    左侧添加新样本,右侧读取数据。

    这个想法显然属于 有损压缩 稀疏编码 的类别。

    我认为这是一个必须经常出现在上行带宽有限的数据记录应用中的问题,因此可能会出现一些“标准”解决方案。

    我故意简化并遗漏了其他问题,例如时间戳。

    问题:

    1. 是否已有算法执行此类数据记录?我不是在寻找标准的,有损的图片或视频压缩算法,而是更具体的数据记录,如上所述。
    2. 队列最合适的实现是什么?链接列表?树?

3 个答案:

答案 0 :(得分:0)

您正在寻找的术语是“有损压缩”(参见:http://en.wikipedia.org/wiki/Lossy_compression)。最佳压缩方法取决于各个方面,例如数据的分布。

答案 1 :(得分:0)

定义符合您需求的组合成本函数,例如: (len(i)+ len(i + 1))/ i ^ 2,然后迭代数组以找到要替换的“最便宜”对。

答案 2 :(得分:0)

据我了解,您希望在一个时间段内传输所有样本的min()和max()。

例如。你想要每隔10毫秒传输最小/最大值,每隔1毫秒采样一次吗?

如果您不需要单个样品,则只需在每次采样后对它们进行比较

i=0; min=TYPE_MAX; max=TYPE_MIN;// First sample will always overwrite the initial values
while true do
    sample = getSample();
    if min>sample then
        min=sample

    if max<sample then
        max=sample

    if i%10 == 0 then
        send(min, max);
        // if each period should be handled seperatly: min=TYPE_MAX; max=TYPE_MIN;
done

您还可以通过仅根据更改发送数据来节省带宽(取决于样本数据:如果它们不会很快变化,您将节省很多)