Algorithm 可变带宽数据链路的日志数据缩减
我有一个嵌入式系统,它以1毫秒的间隔生成样本(16位数字)。可变上行链路带宽最多可以每5毫秒传输一个样本,所以我 寻找方法自适应地降低数据速率,同时最大限度地减少损失 重要信息——在本例中为时间间隔内的最小值和最大值 我认为应该有效的方案包括稀疏编码和有损压缩的变化。像这样:Algorithm 可变带宽数据链路的日志数据缩减,algorithm,logging,encoding,sparse-matrix,lossy-compression,Algorithm,Logging,Encoding,Sparse Matrix,Lossy Compression,我有一个嵌入式系统,它以1毫秒的间隔生成样本(16位数字)。可变上行链路带宽最多可以每5毫秒传输一个样本,所以我 寻找方法自适应地降低数据速率,同时最大限度地减少损失 重要信息——在本例中为时间间隔内的最小值和最大值 我认为应该有效的方案包括稀疏编码和有损压缩的变化。像这样: 系统将以10ms的间隔在内部存储最小值和最大值 系统将在内部对这些数据对中的有限数量(比如50)进行排队 不允许丢失最小值或最大值,但它们出现的时间间隔可能会有所不同 当队列满时,相邻的数据对将从队列末尾开始合并,以便转换
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
在左侧添加新样本,从右侧读取数据
这一思想显然属于有损压缩和稀疏编码的范畴
我假设这是一个在上行带宽有限的数据记录应用程序中经常出现的问题,因此可能会出现一些“标准”解决方案
我故意简化并省略了其他问题,如时间戳
问题:
您要查找的术语是“有损压缩”(请参阅)。最佳压缩方法取决于各个方面,如数据的分布。定义一个符合您需要的组合代价函数,例如(len(i)+len(i+1))/i^2,然后迭代数组以找到“最便宜”的对来替换。据我所知,您想要传输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
i=0;最小值=最大值类型;最大值=类型_最小值;//第一个示例将始终覆盖初始值
尽管如此
sample=getSample();
如果最小>采样,则
最小值=样本
如果你愿意,谢谢。我应该说得更具体些。显然,我对算法的最初想法是减少单个样本,但它从未减少最小值和最大值。它也可以看作是一种“稀疏编码”。