我有一个嵌入式系统,它以1000秒的间隔产生样本(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在左边添加新的样本,从右边读出数据。
这个想法显然属于lossy-compression和sparse-coding.的范畴。
我认为这是一个在上行带宽有限的数据日志应用程序中必须经常出现的问题,因此可能会出现一些“标准”解决方案。
我已刻意简化及遗漏其他事项,例如时间戳。
问题:
发布于 2013-05-01 01:58:20
定义一个符合您需要的组合成本函数,例如(len(i) + len(i+1)) / i^2,然后迭代数组以找到要替换的“最便宜”对。
发布于 2013-05-01 08:56:57
据我所知,您希望在一段时间内传输所有样本的min()和max()。
例如:你想每隔10毫秒传送一次最小/最大一次,每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您还可以通过发送数据来节省带宽(取决于示例数据:如果更改不太快,您将节省很多)。
https://stackoverflow.com/questions/16291788
复制相似问题