2013-04-30 69 views
0

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

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

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

例如长度为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. 什么是最适合队列的实现?链接列表?树?

回答

0

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

+0

谢谢。我应该更具体。很明显,我最初的算法忽略了单个样本,但它从不松动最小值和最大值。它也可以被看作是“稀疏编码”的一种形式。 – 2013-04-30 23:34:11

0

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

0

据我所知,你想在一个时间段内传输所有样本的min()和max()。

例如。您希望每隔10ms发送一次最小/最大值,每1ms采样一次?

,如果你不需要单独的样本,只是每次取样后对它们进行比较

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 

还可以节省带宽,只在改变发送数据(取决于样本数据:如果他们不改变非常快,你将节省很多)