我有一个嵌入式系统,以1毫秒的间隔生成样本(16位数)。可变上行链路带宽最多可以每5ms传输一个样本,所以我是 寻找自适应降低数据速率同时最小化损失的方法 重要信息 - 在这种情况下是时间间隔内的最小值和最大值。
我认为应该工作的方案涉及稀疏编码和有损压缩的变化。像这样:
例如,对于长度为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
左侧添加新样本,右侧读取数据。
这个想法显然属于 有损压缩 和 稀疏编码 的类别。
我认为这是一个必须经常出现在上行带宽有限的数据记录应用中的问题,因此可能会出现一些“标准”解决方案。
我故意简化并遗漏了其他问题,例如时间戳。
问题:
答案 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
您还可以通过仅根据更改发送数据来节省带宽(取决于样本数据:如果它们不会很快变化,您将节省很多)