2013-04-30 61 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 

還可以節省帶寬,只在改變發送數據(取決於樣本數據:如果他們不改變非常快,你將節省很多)