前面簡單說了一下fec,以及它的配合使用的方法。下面我想詳細說一下fec演算法:
曾經有位大神在帖子裡這麼寫著:採用改進型的vandermonde矩陣rs演算法.其優點演算法運算複雜度更低且解決了利用矩陣構造rs碼當矩陣奇異時,構造的糾錯碼不為rs碼的問題。
1)資料報分割
對資料報fec編碼運算首先進行的是包內分割,將資料報分割為多個定長單元,定長單元成為自,設字長為w bits,w的取值一般為8/16/32。fec編碼對k個原始**包朱子進行處理,生成m個冗餘資料報與之對應的字。
例如:現有兩個原始資料報d1、d2,包的長度都為b bytes(對於包長不足b bytes的使用0補齊)-- b b,字長為w bits -- w 位,那麼乙個資料報的總字長為1 = 8b/w。用這兩個冗餘包c1、c2的過程簡述如下:
圖中f代表fec編碼運算
2)vandermonde編譯碼以及改進
設k個原始**包d=(d1,d2,...,dk),,r個冗餘資料報c=(c1,c2,...,cr),那麼傳輸組group表示為y=(y1,y2,...,yn),其中yi=di(0<=i<=k-1),y
j=cj(k<=j<=n-1)。b為 n x k 維 fec生成矩陣,有單位矩陣i和矩陣g組成,則乙個group可表示為如下所示:
通過這種方式構造的rs碼是系統碼,資訊組以不變的形式在碼組的任意k位(通常在最前面: d1,d2,...,dk)。如果以資料報為物件,那麼傳輸組的前k個包就是k個被保護的資料報。在接收端,如果接收者收到了group中的任意k個資料報,即可根據所收到的資料報在group中的位置資訊,從fec生成矩陣b中提取對應的行,組成乙個新的 kxk 維矩陣b『,顯然
如果b』 為非奇異矩陣,那麼就可以通過如下逆變換得到原始資料報,完成恢復。
設計rs碼的關鍵在於怎樣設計生成矩陣b,也就是其係數矩陣g。本方案使用vandermonde矩陣來構建係數矩陣g。常規定義vandermonde矩陣v,r x k 維,如下所示:
係數矩陣g=v,該矩陣元素的運算都是在有限域gf(2^8)中進行的。gij(i=0,1,...,r-1; j=0,1,...,k-1)為係數矩陣的元素,ci(i=1,2,。。。,r)表示第i個冗餘包,dj(j=1,2,。。。,k)表示第j個原始**包,根據下式:
上式運算時以包分割後的資料為運算單位的,模運算使用查表方式實現。例如發端使用k=6,r=2的榮譽模式,那麼對應的係數矩陣為:
根據上面係數矩陣,可以計算得到冗餘包為:
生成冗餘包c1c2,傳送端就可以一次傳送原始**包和冗餘包。如果傳送的途中原始**包d3,d4丟失,那麼接收端就可以根據收到的包恢復丟失的原始**包,具體過程如下:
傳統的vandermonde矩陣構造rs碼是,需要非奇異矩陣,由於vandermonde矩陣元素取值與有限域,且元素的運算遵循有限域的運算規則,就會存在一定概率出現矩陣奇異,用該矩陣構造的糾錯碼就不是rs碼,不能從任意k個包中恢復出原始**包。為此長沙這位大嬸對該傳統vandermonde矩陣進行改進,解決了矩陣概率奇異的問題,具體實現見**。
3)私有協議/rtp與fec的結合,下文繼續講解
Paxos理解之我見(二)
paxos如何提高集群的平行計算能力。已經 在paxos理解之我見講述了paxos的思路。下面講一下我對paxos關鍵條件的理解和總結。paxos集群的前提條件 一 多數派 大於集群的半數以上。二 集群中的伺服器指決議編號比它之前處理的大的,大於則通過。小於反對不通過。三 提議 向集群其他伺服器傳送...
C 設計模式之我見 二
singleton pattern 抽象工廠模式 abstract factory 建造者模式 builder pattern 工廠方法 factory method 和原型模式 protype pattern 首先要回憶一下前面講過的一些概念,理解所具有的含義,然後再來看看圖示和例項。單件模式 s...
FEC之異或運算應用
話說為啥fec需要異或 操作呢?異或 xor 異或運算規則 0 xor 0 0 0 xor 1 1 1 xor 0 1 1 xor 1 0 異或運算特性 1 a xor a 0 2 a xor 0 a 3 a xor b xor c a xor b xor c 4 if a xor b c then...