極化碼小結(2)

Chapter2 極化碼的編碼算法

  極化碼的編碼問題主要包括兩個方面。less

  首先是生成矩陣的構造:性能

生成矩陣GN:

  先來看信道合併示意圖,下圖截自Arikan論文(之後再也不解釋,Arikan論文 特指論文《Channel polarization: A method for constructing capacity-achieving codes for symmetric binary-input memoryless channels》):學習

  請讀者留意這是fig.3,也即圖三。根據這張圖所表現的形式,咱們能夠概括出GN的表達式:測試

疑問:這個表達式如何獲得?它與上圖有什麼對應關係?編碼

  咱們來看等式右端第一部分:lua

  觀察RN前面的表達式,符號「」是一種矩陣運算,稱爲「克羅內克積」,詳細內容讀者可自行查閱維基百科詞條:克羅內克積-維基百科;「F」定義爲矩陣,F的定義又有何意義呢?咱們用一個二維向量來測試一下:,可見用輸入向量左乘F矩陣,就可以實現圖中第一步線性變換。當N>2時,因爲F只有二維,爲了完成運算,咱們經過克羅內克積的辦法在保持F矩陣屬性的同時擴展它的維度,使得它知足咱們的運算要求。因此RN前面的運算能夠與上圖中的線性變換對應起來。spa

  RN對應圖中的自身,這個不須要再說。設計

  觀察RN的右端,I2爲二維的單位矩陣,GN/2則體現了遞推、迭代的思想。用I2與GN進行克羅內克積,就是爲了實現生成矩陣的遞推和迭代。這部分對應了圖中最右端的操做。所以咱們能夠看到,Arikan給出的生成矩陣的定義式確實與上圖是徹底對應的。3d

  接下來,Arikan又po出了另外一張圖:

  這是fig.8,它與fig.3的不一樣之處在於,fig.3中先進行線性變換再進行置換操做,而fig.8中先進行置換操做再進行線性變換。根絕Arikan的說法,這兩個圖是全等的。fig.8對應的公式爲:,也就是說這兩個公式是等價的:

  那麼這一步是如何獲得的呢?如何證實這兩個圖是全等的呢?這裏有一份我之前證實時留下的手稿,具體的過程我沒有精力再排版打出來,看客若是對這個證實有興趣,不妨做爲參考。不過這些細節就算不了解,也不妨礙咱們對極化碼理論的學習。就像數學教科書的上的許多定理公式,更多時候重點在於如何去理解和應用。

  讓咱們回到Arikan的論文中,繼續看他是如何一步一步獲得GN的構造方法的。

  上面這個公式第一行咱們已經證實過了,從第一行到第二行的理論支持來自於克羅內克積的混合乘積性質:

  圖片來自克羅內克積-維基百科

  咱們繼續往下看:

  這個就很好理解了,直接迭代代入GN/2而後利用混合乘積性質的逆定理就能夠獲得了。重複上述操做,不斷進行迭代,最後咱們能夠獲得這樣一個式子:

  其中BN用來代替迭代所產生的式子:。BN能夠寫成遞推公式:

  獲得上面的公式以後,咱們很容易就能夠計算出BN並求出GN

  再來看信息位的選取:

信息位選取:

  經過上一節的介紹,咱們瞭解到了信道的極化現象,而且認識到正是信道極化現象催生了極化碼。如今,咱們就要利用這個現象來構造極化碼。根據咱們所設想的,經過在偏差率較低的信道(無噪信道)上傳輸有用信息,在偏差較高的信道(純噪信道)上傳輸信息量爲0的信息,咱們能夠實如今有噪信道下進行無噪傳輸。

  所以,如何挑選要傳輸信息的信道成爲了相當重要的事情。在表徵信道質量的參數向量P中,咱們稱傳輸有用信息的位爲信息位,傳輸無用信息的位爲凍結位。問題變成了如何求出這個參數向量P。只要咱們求得這個P,而後對它進行從小到大的排序,再根據碼率肯定要用到多少信息位,而後從排好序的P中挑選出性能最好的那部分,就能夠實現咱們的需求。

  Arikan的論文中這樣說道:「對於一個給定的B-DMC信道W,本論文對信道的兩個參數感興趣:一個是信道的對稱容量I(W):

  I(W)表明了等機率輸入下,經過信道W進行可靠信息傳輸的最大速率。第二個稱爲巴氏參數Z(W):

  巴氏參數表明了在一次經過W傳輸0或1時,最大似然判決錯誤機率的上限。顯然,Z(W)反映了信道的可靠度 。

  顯然,咱們能夠分別將這兩個參數做爲參數向量P,對於I(W),咱們選擇較大的I(W)做爲信息位;對於Z(W),咱們選擇較小的Z(W)做爲信息位。

  早期Arikan提出,當W爲BEC(二進制刪除信道)時,有,計算兩者中的任何一個均可以。Arikan論文中有Z(W)的遞推計算公式:

  其中第二個式子的不等號在W爲BEC取等,所以咱們能夠精確的計算巴氏參數,並且計算複雜度也較低,爲O(NlogN)。

  後來,Arikan給出了當W不爲BEC信道時的計算方法,他提出使用「Monte-Carlo算法」(蒙特卡羅法)來近似計算巴氏參數,然而,這個計算的複雜度因輸出符號集的指數型爆炸增加而變得不可能。

  還有一種方法也用來進行巴氏參數的估計——Density Evolution(密度進化),可是這個方法缺點在於計算複雜度仍是較高(爲O(n)),同時精確度也很差。

  目前咱們項目組所使用的信息位選擇採用的是tal-vardy所提出的算法。這種算法是Tal和Vardy於2013年發表在IEEE上的一篇21頁的論文中提出的,論文名爲《how to construct polar code》,感興趣的讀者能夠去了解一下。若是對英文閱讀感受到不舒服,讀者也能夠參考《極化碼編碼與譯碼算法研究》[王繼偉]在2.2.3節中對這種算法的較爲詳細的中文介紹。

  這種算法主要經過信道弱化和信道強化操做,將的輸出符號集進行合併,使其可以具備符合咱們須要長度的輸出符號集大小。另外,對於咱們常常用到的AWGN信道,經過高斯近似(GA)方法能夠在很是低的複雜度下在較高的精確度上選擇信息位。這裏列出兩篇發表在IEEE上的參考論文,有興趣的讀者能夠自行去了解,這裏再也不展開說了。

  【1】《Evaluation and Optimization of Gaussian Approximation for Polar Codes》.Jincheng Dai等.(2016.5)

  【2】《Construction and Block Error Rate Analysis of Polar Codes Over AWGN Channel Based on Gaussian Approximation》.Daolong Wu等.(2014.7)

   除此以外,還有一種辦法能夠提升極化碼的構造效率。那就是使用「design-SNR」。

  無論咱們採用什麼構造辦法,信息位的選取老是與SNR的取值密切相關。咱們在仿真極化碼性能的時候,每每會以SNR爲仿真圖的橫座標,以BER、FER爲縱座標,觀察曲線走向,經過對比曲線判斷優劣。可是每一次帶入新的SNR值,都要從新構造一個新的參數向量P,而後從新挑選信息位,這種傳統的構造方法咱們稱爲「point-by-point(逐點SNR)」。這種重複性的工做無疑增長了極化碼構造的時間複雜度。

  經過研究,咱們發現,對於一個特定的碼率,總存在一個完美的SNR,咱們稱之爲「design-SNR(設計SNR)」,咱們只須要代入這個SNR進行一次參數向量P的構造,而後將挑選好的信息位儲存起來。之後在這個碼率下,不論在哪一個SNR值下進行仿真,咱們只代入預存的這個信息位進行極化碼的構造。因爲信息位只構造了一次,時間複雜度獲得了顯著下降。

  根據仿真結果顯示,在碼長和碼塊較大的狀況下,design-SNR與point-by-point法契合的很是好,以下圖:

  獲得了生成矩陣,又構造了信息位。接下來只須要進行簡單的矩陣操做,再疊加上噪聲,就能夠實現極化碼的編碼。

相關文章
相關標籤/搜索