• 沒有找到結果。

第四章 新式解碼器演算法

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 ,

W

P

PI 訊號,分別為

y

1, y ,..., y2 p。接著,與之前一樣有一個度數分布

 (x)

(degree distribution),此一度數分布應用在 LT 訊號的編碼,而另外還有一個應用在 PI 訊 號上的度數分布

 (x)

。編碼步驟如下所述:

由於 PI 訊號在一開始就被設為未活躍,也就是二分圖中的連線在編碼前就 減少了許多,因此大量地增加 LT 訊號能夠完成解碼的成功機率,也減少額外的 動態未活躍訊號。更詳細的推導可以參考文獻[3]。

2.4.3 Galois Field

在前面章節所討論的編碼運算皆為邏輯異或的運算,也就是操作在

GF (2)

的 運算。而在這樣的運算下,解碼成功率有一個極限存在,即便是設計最好的編碼 在收到

Kh

個編碼訊號的情況下,其解碼成功率大約為

1 1

1

2

h

。而克服此一極

限的方法就是讓運算操作在更大的 Galois Field,假設使用的 Galois Field

(256)

, 則在接收到

Kh

個編碼訊號的情況下,解碼成功率約為

1 1

1

256

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本身,如下:

注意上式中的 "+" 號為平常的整數加法,因為加數與被加數皆為正常的整數。

兩個八位組uv的除法定義如下,其中

v  0

:

u v

0

, if

u  0

_ [ _ [ ] _ [ ] 255]

OCT EXP OCT LOG uOCT LOG v

, otherwise

一元素(multiplicative identity)即代表整數一的八位組。另一個不為零的八位 組u,其乘法逆元素定義如下:

_ [255 _ [ ]]

OCT EXPOCT 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

KK

 

  

 

x = x

(3.1)

𝐾是決定一個來源區塊中含有多少來源訊號的值,因此傳送端及接收端都必須 知道𝐾的大小,如此傳送端及接收端都可以計算出𝐾− 𝐾值並加上填補訊號,

而不需多餘的溝通。

填補訊號可以視為延伸後的來源訊號,但它們不會是編碼訊號,也就是不 會被當作編碼訊號一起傳出,接收端則是藉由計算𝐾− 𝐾值來得知填補訊號 數,進而還原出原本的來源訊號。加上填補訊號的目的主要是讓編碼及解碼都 能更快速的進行,此外也能減少傳送端及接收端所需存放的資料量。

3.2.2 產生中間訊號

第二步驟則是利用𝐾個來源訊號,經過前置編碼產生

M

個中間訊號。

3.2.2.1 前置編碼矩陣

圖 3.2 為前置編碼矩陣。前置編碼矩陣

A

的大小為

MM

,其中

圖 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 [ BS ] ~ c [ W   U 1]

是 PI 訊號,但不是 HPDC 訊號的中間訊號。

4.

c [ MH ] ~ c [ M  1]

是既為 PI 訊號,亦為 HPDC 訊號的中間訊號。

3.2.3 產生編碼訊號

最後一個步驟為產生編碼訊號,利用在第二步驟所得到的中間訊號與 LT

編碼矩陣

G

LT(1,...,N)相乘求得,如式(3.3)所示。

G

LT(1,...,N)矩陣的大小為

NM

M

為中間訊號數,

N

則是由編碼率以及預計通道遺失率所決定。

(1,...,N)

e = G

LT

c

(3.3)

為了滿足有系統(systematic)的編碼特性,

G

LT(1,...,N)矩陣中的前

K

個列向量 與前置編碼矩陣的

G

LT(1,...,K')相同;其中,為了避免傳送編碼前所加入的填補訊

號(padding symbol),

G

LT(1,...,N)的第

K

K

個列向量不會加入編碼。最後可以得 到

N

個編碼訊號,其中包括

K

個來源訊號以及

NK

個修補訊號(repair

symbol)。

3.3 解碼器架構

解碼器架構與編碼器架構不同的地方在於前置編碼與 LT 編碼的順序互 換,整個流程如圖 3.3 所示。首先收到的訊號為

e

,依照編碼器與解碼器共同的 設定補上正確數量的填補訊號得到ˆe;接著將ˆe乘上

A ˆ

1得到中間訊號,如式 (3.4);其中,

ˆA

與原先的編碼矩陣不同的地方在於

G

LT(1,...,N),傳遞的過程中遺 失的訊號無法加入解碼的過程,因此遺失訊號所對應的列向量就會從

G

LT(1,...,N) 中移除。

ˆ ˆ

1

c = 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

矩陣的第一個列向量互換位置,

並將其中ㄧ個

1

所對應的行向量移至

V

矩陣的第一行,其餘的

1

則移至最後

r  1

行。接著利用高斯消去法,將第一行中除了第一個元素為

1

外,其餘皆化簡為

0

。上述的行列互換以及列除法不僅在矩陣

ˆA

執行,同時也會在

X

上作相同的

0

。上述的行列互換以及列除法不僅在矩陣

ˆA

執行,同時也會在

X

上作相同的

相關文件