第四章 新式解碼器演算法
4.1 S YSTEMATIC CODE
一種編碼若最後產生的編碼訊號中還有原本的來源訊號,則稱此種編碼為有 系統的(systematic)。前面章節所介紹過的 LT code 與 Raptor code 皆不是有系統的 編碼,而 RaptorQ code 為有系統的編碼方式。
Permanent Inactivation 是另一個 RaptorQ code 的重要特色。在 2.3.2 小節的 未活躍解碼中介紹過未活躍(inactivation)的概念,此一概念主要是為了讓 belief-propagation decoding 能過順利地繼續進行,當 belief-belief-propagation decoding 找不到 度數為 1 的列訊號時,演算法會”動態”地選擇特定的行訊號為未活躍,此種未活
躍的選擇方式,我們稱之為動態未活躍(dynamic inactivation),與此小節所要介紹 的 permanent inactivation 做區分。
所謂的 permanent inactivation,意思是有些中間訊號在解碼執行前,就已經 被設定為未活躍;這些訊號稱為永久未活躍訊號(permanent inactivation symbol, PI symbol),而其他的中間訊號稱作 LT symbol;此外,編碼訊號的產生方式也與原 本的 LT 編碼有些許不同。首先,令共有
W
個 LT 訊號,分別為x x
1, 2,...,x ,
WP
個PI 訊號,分別為
y
1, y ,..., y2 p。接著,與之前一樣有一個度數分布 (x)
(degree distribution),此一度數分布應用在 LT 訊號的編碼,而另外還有一個應用在 PI 訊 號上的度數分布 (x)
。編碼步驟如下所述:由於 PI 訊號在一開始就被設為未活躍,也就是二分圖中的連線在編碼前就 減少了許多,因此大量地增加 LT 訊號能夠完成解碼的成功機率,也減少額外的 動態未活躍訊號。更詳細的推導可以參考文獻[3]。
2.4.3 Galois Field
在前面章節所討論的編碼運算皆為邏輯異或的運算,也就是操作在
GF (2)
的 運算。而在這樣的運算下,解碼成功率有一個極限存在,即便是設計最好的編碼 在收到K h
個編碼訊號的情況下,其解碼成功率大約為1 1
12
h
。而克服此一極限的方法就是讓運算操作在更大的 Galois Field,假設使用的 Galois Field
(256)
, 則在接收到K h
個編碼訊號的情況下,解碼成功率約為1 1
1256
h
。圖 2.18 為不 同 Galois Field(q)
的 overhead-failure curve。圖 2.18 不同 Galois Field 的解碼失敗率[3]
然而操作在較大 Galois Field 的缺點是所需要的運算量比單純的邏輯異或要 大上許多,因此 RaptorQ code 採用的方式是仍會用到較大的 Galois Field,但只 有一小部分,絕大部分的運算仍操作在
GF (2)
,如此便可兼顧較低的運算量以及 較佳的解碼成功率。2.4.4 解碼失敗率
討論到 Raptor code 的效果,解碼的成功與否是一個相當重要的因素。如同在 2.3.3 小節討論到 Raptor code 的解碼失敗率,根據[6]可以將 RaptorQ code 的解碼 失敗率整理如式(2.4)所示:
(n, k) 1
0.01 0.01
f n k
if n k
p
if n k
(2.4)(n, k)
p
f 表示解碼器在接收到 n 個編碼訊號,來源訊號共 k 個的情況下,解碼器 解碼失敗的機率。將式(2.4)與式(2.3)做比較,可明顯地看出 RaptorQ code 效果較 Raptor code 要好上許多。3. 第三章 RaptorQ 規格及 其編解碼器架構
本章節將詳細地介紹 RaptorQ code 的運作方式、編碼過程以及解碼器的架 構;其中解碼器的演算法為互聯網工程任務組(Internet Engineering Task Force, IETF)所釋出標準上提供的範例。
3.1 RaptorQ code 規格介紹
本小節將介紹 RaptorQ code 在編解碼中所使用到的標識以及架構等等。
3.1.1 來源區塊組成
為了利用 RaptorQ code 傳送物件,首先將此一物件會分成
Z 1
個來源區塊 (source block);而 RaptorQ code 編碼器會分別對各個來源區塊獨立地進行編碼,來源區塊之間會利用來源區塊號碼(source block number)進行區分,第一個來源區 塊從零開始編號,以此類推。每個來源區塊又會再細分成
K
個來源訊號,每個來 源訊號大小為T
octet;而來源訊號之間亦會利用編碼訊號標識符(encoded symbol identifier)作區分,第一個編碼訊號標識符為零,以此類推。進一步地,每一大小為
K
個來源訊號的來源區塊會在被細分為N
個子區塊 (sub-block),主要目的是為了使編碼訊號大小能夠讓接收端的解碼暫存器所接受。每個子區塊亦會再分成
K
個大小為T
octet 的子編碼訊號(sub-symbol)。值得注意的是上述中的每個來源區塊的來源訊號數
K
不必相同,且每個子區 塊中的子編碼訊號大小T
也不必相同。儘管如此,每個來源區塊的來源訊號大小T
以及同一個來源區塊中每個子區塊的子編碼訊號數K
必須相同。更詳細的來源 區塊與子區塊的切割方式可以參考文獻[8]。3.1.2 八位組的算術運算
RaptorQ code 規格中含有許多八位組(octet)的元素,這些元素會分別對應到 範圍從 0 到 255 的非負數整數,令一個元素為
B
, [7]B
、 [6]B
、 [5]B
、 [4]B
、零元素(additive identity)即代表整數零的八位組。而u的加法逆元素(additive inverse)就是u本身,如下:
注意上式中的 "+" 號為平常的整數加法,因為加數與被加數皆為正常的整數。
兩個八位組u及v的除法定義如下,其中
v 0
:u v
0
, ifu 0
_ [ _ [ ] _ [ ] 255]
OCT EXP OCT LOG u OCT LOG v
, otherwise一元素(multiplicative identity)即代表整數一的八位組。另一個不為零的八位 組u,其乘法逆元素定義如下:
_ [255 _ [ ]]
OCT EXP OCT LOG u
3.2 編碼器架構
RaptorQ 編碼器的功能是利用一個含有𝐾個來源訊號的來源區塊,產生任意 數的修補訊號(repair symbol);圖 3.1 為 RaptorQ 編碼器的整體架構圖,整個編 碼的流程大致分為三個步驟。
圖 3.1 RaptorQ 編碼架構圖
3.2.1 加入填補訊號
第一個步驟是將𝐾個來源訊號補上零或多個填補訊號(padding symbol),使 得訊號總數𝐾′為介於 10 到 56403 共 477 個值中的一個[8],如(式 3.1);其中𝐾′
必須為規格中大於𝐾的最小值。
0
KK
x = x
(3.1)𝐾是決定一個來源區塊中含有多少來源訊號的值,因此傳送端及接收端都必須 知道𝐾的大小,如此傳送端及接收端都可以計算出𝐾′− 𝐾值並加上填補訊號,
而不需多餘的溝通。
填補訊號可以視為延伸後的來源訊號,但它們不會是編碼訊號,也就是不 會被當作編碼訊號一起傳出,接收端則是藉由計算𝐾′− 𝐾值來得知填補訊號 數,進而還原出原本的來源訊號。加上填補訊號的目的主要是讓編碼及解碼都 能更快速的進行,此外也能減少傳送端及接收端所需存放的資料量。
3.2.2 產生中間訊號
第二步驟則是利用𝐾′個來源訊號,經過前置編碼產生
M
個中間訊號。3.2.2.1 前置編碼矩陣
圖 3.2 為前置編碼矩陣。前置編碼矩陣
A
的大小為M M
,其中圖 3.2 前置編碼矩陣
前置編碼矩陣組成大致分述如下,
G
LDPC1及G
LDPC2為兩個低密度奇偶檢查 碼(low-density parity-check code, LDPC code)的子矩陣,定義在二元的 Galois Field (GF(2)),主要用來產生大部分的 LDPC 訊號。G
HDPC為高密度奇偶檢察碼 (high-density parity-check code, HDPC code)的子矩陣,定義在八位組的 Galois Field(GF (256)),主要用來產生少量的 HDPC 前置編碼多餘訊號;此一子矩陣也 是 RaptorQ code 不同於以往 Raptor code 的主要部分。最後一個子矩陣為(1,..., LT K)
G
,此一矩陣的組成與 Luby Transform 矩陣的前𝐾′個列向量視相同的,如此便可滿足 RaptorQ code 為一個有系統(systematic)的編碼。
中間訊號c的產生方式如(式 3.2)所示。其中,
M
個中間訊號必須滿足前置 編碼關係,見 3.2.2.2 所述。1 0M K '
c = A
x
(3.2)填補一個零行向量0M K '是為了滿足前置編碼矩陣的大小。
3.2.2.2 前置編碼關係
前置編碼關係為
M
個中間訊號必須滿足𝑆 + 𝐻個線性組合後的值為零。此 外共有𝑆個 LDPC 訊號以及𝐻個 HDPC 訊號,因此𝑀 = 𝐾′+ 𝑆 + 𝐻。另一種分類 方式是將M
個中間訊號分為兩類,一部分為𝑊個 LT 訊號,另一部分為𝑃個 PI 訊號,因此𝑀 = 𝑊 + 𝑃。𝑃個 PI 訊號是由𝐻個 HDPC 訊號以及其他𝑈 = 𝑃 − 𝐻個 中間訊號所組成,𝑊個 LT 訊號是由𝑆個 LDPC 訊號以及其他𝐵 = 𝑊 − 𝑆個中間 訊號所組成。承上段所述,
c [0] ~ c [ M 1]
為M
個中間訊號,其中:1.
c [0] ~ c [ B 1]
是 LT 訊號,但不是 LDPC 訊號的中間訊號。2.
c [ ] B ~ c [ B S 1]
是既為 LT 訊號,亦為 LDPC 訊號的中間訊號。3.
c [ B S ] ~ c [ W U 1]
是 PI 訊號,但不是 HPDC 訊號的中間訊號。4.
c [ M H ] ~ c [ M 1]
是既為 PI 訊號,亦為 HPDC 訊號的中間訊號。3.2.3 產生編碼訊號
最後一個步驟為產生編碼訊號,利用在第二步驟所得到的中間訊號與 LT
編碼矩陣
G
LT(1,...,N)相乘求得,如式(3.3)所示。G
LT(1,...,N)矩陣的大小為N M
,M
為中間訊號數,N
則是由編碼率以及預計通道遺失率所決定。(1,...,N)
e = G
LTc
(3.3)為了滿足有系統(systematic)的編碼特性,
G
LT(1,...,N)矩陣中的前K
個列向量 與前置編碼矩陣的G
LT(1,...,K')相同;其中,為了避免傳送編碼前所加入的填補訊號(padding symbol),
G
LT(1,...,N)的第K
到K
個列向量不會加入編碼。最後可以得 到N
個編碼訊號,其中包括K
個來源訊號以及N K
個修補訊號(repairsymbol)。
3.3 解碼器架構
解碼器架構與編碼器架構不同的地方在於前置編碼與 LT 編碼的順序互 換,整個流程如圖 3.3 所示。首先收到的訊號為
e
,依照編碼器與解碼器共同的 設定補上正確數量的填補訊號得到ˆe;接著將ˆe乘上A ˆ
1得到中間訊號,如式 (3.4);其中,ˆA
與原先的編碼矩陣不同的地方在於G
LT(1,...,N),傳遞的過程中遺 失的訊號無法加入解碼的過程,因此遺失訊號所對應的列向量就會從G
LT(1,...,N) 中移除。ˆ ˆ
1c = A e
(3.4)求得中間訊號後,利用來源訊號以及修補訊號皆為中間訊號的線性組合特 性還原來源訊號,如式(3.5)。
(1,..., )
LT K
x = G c
(3.5)圖 3.3 RaptorQ 解碼架構圖
由於
G
LT(1,...,K)為一個稀疏的二位元矩陣,因此整個解碼的運算量主要都集中在求得中間訊號,即式(3.4);因而,大部分的解碼演算法都是針對此一部分 化簡及優化。
3.3.1 Inactivation Decoding Gaussian Elimination[]
此小節要介紹的方法是由互聯網工程任務組(Internet Engineering Task Force) 提出的標準解碼演算法[8],稱為 Inactivation Decoding Gaussian Elimination。整 個演算法是藉由將
ˆA
化為一單位矩陣,同時求得中間訊號,如式(3.4)。接下來 所說明的步驟主要是針對ˆA
矩陣的行列運算,同時行列運算亦會對應到中間訊 號c以及接收到的訊號 ˆe 。整個 IDGE 演算法大致分為以下階段:
階段(1):
在第一階段的運算主要可以分成不同個子矩陣來觀察,如圖 3.4 所示。首 先,建立一個大小與
ˆA
相同的新矩陣X
,並將整ˆA
複製到X
;此外i
的初始值 為 0,u的初始值為 PI 訊號的數量P
,而一開始的V
矩陣即為ˆA
。圖 3.4 階段(1)中
ˆA
的各個子矩陣此一階段中,每一次都會從
ˆA
中挑選一個列向量,挑選的條件如下: 若
V
中所有項皆為零,即沒有列向量可以選擇時,表示解碼失敗 令r表示
ˆA
的列向量中在V
子矩陣中含有最少 1 的數目: 若
r 2
,則選擇在V
子矩陣含有r個1
且在ˆA
中含有最小度數的列 向量,但此一步驟不會先挑選 HDPC 列向量,除非所有的非 HDPC 列向量都已被選完。 若
r 2
,則選擇在V
子矩陣含有r個1
且含有最大組成成分元素 (maximum size component)的列向量。完成列向量的選擇後,將此一列向量與
V
矩陣的第一個列向量互換位置,並將其中ㄧ個