動態

詳情 返回 返回

噴泉碼淺談 - 動態 詳情

01、噴泉碼簡介

噴泉碼(Fountain Code)是一種在無線通信、數據傳輸和網絡編碼領域中使用的錯誤糾正技術。它與傳統的糾錯碼和編碼方法有所不同,噴泉碼被設計用於在不確定信道條件下的高效數據傳輸。傳統的糾錯碼(如海明碼、RS碼等)通常需要在發送方對數據進行編碼,接收方則使用相同的編碼進行解碼和糾錯。這些方法一般具有固定的碼率(Code Rate),即針對一定長度的原始數據,編碼後的長度是固定的,這些方法在面對不穩定的信道或嚴重的信道丟失時可能效果不佳。相比之下,噴泉碼通過在發送方生成隨機的冗餘數據,然後將其注入到原始數據中,以創造出一個“噴泉”流——相應的碼率也也就不固定了。接收方可以從這個流中採樣任意數量的數據包,並將它們合併以恢復原始數據。噴泉碼的一種常見應用是在無線傳感器網絡中,其中網絡節點之間的通信可能受到弱信號、干擾和多徑傳播等因素的影響。通過使用噴泉碼,節點可以在較差的通信條件下實現可靠的數據傳輸。噴泉碼另外一個常用的場景是大量文件或者數據的廣播,這種時候每位接受者的丟包率是不確定的,因此固定碼率的編碼就不適用,噴泉碼卻可以解決該場景下的問題——丟包率高的接受者多收一些包,丟包率少的接受者則少收一些包。本文會介紹最常見的兩種噴泉碼實現,LT 編碼 和 Raptor 編碼。通過這兩種編碼的介紹和比較可以比較好的瞭解噴泉碼的特性和基本的實現原理。

02、LT 編碼

LT 編碼 是第一個被實現的具有實用價值的噴泉碼,該編碼在 2002 年被提出,實現記的基本原理也非常簡單,即位運算中的 xor 操作。Xor 操作有如下的特性:

  1. 兩個相同的數據塊 M,它們 Xor 的結果是 0。即 M ^ M = 0。
  2. 對一塊數據塊 M,Xor 兩次相同的數據塊 N,最終結果仍然為 M。即 M ^ N ^ N = M。
  3. 假設兩個等長的數據塊 M 和 N,M ^ N = L。那麼 L ^ M = N 並且 L ^ N = M。

基於上述的特性,LT 編碼的方式就可以描述為下列的步驟:

  1. 對於長度為 N 的等寬數據塊序列,隨機選取一個 degree (d),1 ≤ d ≤ N。
  2. 從上述的數據塊中選取隨機 d 個數據塊,將所有選取的數據塊進行 xor 操作,最終得到一個編碼的數據塊。
  3. 重複上述步驟 1 和 2,我們可以得到源源不斷的編碼數據塊,好像“噴泉”一樣水流不斷。

編碼過程很簡單,唯一需要注意一下的問題是如何獲得等款的數據塊。如果總數長度不能夠恰巧分成 N 等分,我們可以通過在後續加 padding 的方式來實現可以 N 等分。解碼相對比較複雜, 描述如下:

  1. 已經接受過的重複的編碼塊丟棄。
  2. 如果接收的數據塊 d > 1, 將其和 所有已知和該編碼塊相關的 d = 1 的原始數據塊進行 xor 操作,沒操作一次 d 減一,如果知道最後 d > 1,則將結果暫存到隊列中,否則將最終得到的原始數據塊記錄下來。
  3. 每當發現一個新的 d = 1的原始數據塊,將該數據塊和所有等待數據塊中相關的數據塊進行 xor 操作,以期待發現更多的 d = 1 的原始數據塊。
  4. 重複上述操作,直到所有的原始數據塊被恢復出來。

該過程中的編碼數據塊一般還是會攜帶 metadata 信息,包含原始數據塊的位置信息,例如告知該編碼塊由 第1 和 第3 個原始數據塊 xor 而來。LT 編碼有其侷限性,如果我們想保證編碼塊的數量 m 和原始數據塊數量 k 非常接近,且恢復的成功率較高,那麼平均每個編碼塊的生成需要進行 O(log(k)) 次 Xor 操作,需要消耗非常多的計算資源。相反,如果 degree 比較低,雖然每個編碼塊的操作數減少了,但是我們會需要更多的編碼塊來恢復出全部數據。上述所説的侷限性是受到信息論的約束的,無法進一步降低。那麼我們有沒有辦法實現一種方式來降低計算資源的消耗呢?比如我們如果不需要恢復出全部的原始數據呢?受到這個思路的啓發 Raptor 算法應運而生。

03、Raptor 算法

Raptor 本質上是一類混合編碼方式,結合 LT 編碼和 LDPC 編碼,同時獲取了兩種編碼的好處。如下圖所示:

Raptor 編碼首先通過 LDPC 編碼進行一次固定碼率編碼,形成一箇中間編碼層,然後再對該編碼層進行 LT 編碼,生成最終的編碼數據塊。當然 Raptor 編碼也會有其他變種,不過原理大同小異,例如下圖所示:

該編碼具有三層結構,中間編碼結果經過了兩層固定碼率編碼,分別是Hamming 編碼LDPC 編碼,然後再進行LT 編碼生成最終的編碼塊。針對 Raptor 編碼的解碼方式一般有兩種。第一種和編碼方式完全相反,首先利用 LT 編碼的解碼方式恢復出部分的中間編碼塊,然後利用固定編碼的解碼方式恢復出原始的數據塊。第二種方式則是將上述所有的多層編碼方式都變成一種矩陣運算,針對收到數據後利用矩陣的高斯消元方法解出原始的數據塊。現有為人所熟知的 Raptor 編碼主要有 RFC 5053 和 RFC 6330 RaptorQ 編碼。兩者的實現細節有諸多區別,但是內在的思路和上述的方法是類似的,有興趣的讀者可以進一步進行閲讀和學習。

04、總結

噴泉碼是一種無固定碼率的編碼方式,其中比較著名的有 LT 編碼和 Raptor 編碼。LT 編碼算法簡單,實現也簡單,但是算法效率不高。Raptor 算法結合了 LT 編碼和一些固定碼率編碼,利用混合編碼的方式實現了高效的噴泉碼。

達坦科技(DatenLord)專注下一代雲計算——“天空計算”的基礎設施技術,致力於拓寬雲計算的邊界。達坦科技打造的新一代開源跨雲存儲平台DatenLord,通過軟硬件深度融合的方式打通雲間壁壘,實現數據高效跨雲訪問,建立海量異地、異構數據的統一存儲訪問機制,為雲上應用提供高性能安全存儲支持。以滿足不同行業客户對海量數據跨雲、跨數據中心高性能訪問的需求。

公眾:達坦科技DatenLord

DatenLord官網:www.datenlord.io

知乎賬號:

https://www.zhihu.com/org/da-tan-ke-ji

B站

https://space.bilibili.com/2017027518

user avatar u_15511034 頭像 null_null_null 頭像 u_16077267 頭像 xiaoyanjingdepidan 頭像 decaday 頭像 videocloud 頭像 momodel 頭像 czy 頭像 lzfhope 頭像
點贊 9 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.