================================================算法
首先自做多情的說一句——「抱歉!」數據庫
古語「有志者、事竟成」,是說有志向的人最終都可以成事。想到這句話我很慚愧,我竟然連這樣一件小事都沒法堅持不懈的完成,這個系列的博客我一拖再拖,一個多月里居然再沒有更新。雖然博客鮮有看客垂閱,可是這半途而廢的事實倒是明顯的。痛定思痛,我決定老老實實更完。算是亡羊補牢,作到善始善終吧。less
================================================性能
---內容開始--編碼
上一節,咱們介紹了SC譯碼過程當中的兩個解碼特例——u1和u2,經過這兩例解碼方案的介紹,咱們對於利用Arikan遞推公式進行串行消除解碼的過程有了一個初步的認識,接下來咱們的任務在於由特殊到通常,概括出適用於全部解碼器節點的解碼方案,並給出相應的matlab代碼。3d
咱們先來從新觀察蝶形解碼圖:code
根究u一、u2的解碼經驗,咱們能夠將解碼過程做以下概括:blog
① 判斷要解出的節點爲上節點仍是下節點,若爲上節點則進行步驟②,不然進行步驟③;ci
② 根據解碼圖中先後節點的座標關係,找到該節點所開啓的兩個節點,分別判斷這兩個節點是否被解出,若是未解出回到步驟①,不然直接利用上節點計算公式求得該節點似然值。input
③ 判斷相應上節點是否解出,若是未解出,執行步驟②,不然執行步驟④計算指數項;
(根據咱們屢次提到的原則——左上節點和左下節點老是同時被解出,通常狀況下在求解下節點的時候,相應的上節點已經解出。)
④ 咱們先來複習一下什麼是指數項
如上圖爲Arikan譯碼遞推公式。對於蝶形的左下節點的求解,在獲得左上節點似然值的基礎上使用第二個公式。其中,指數項爲。
【關於指數項計算的專業內容,讀者可參考論文《極化碼編碼與譯碼算法研究》...王繼偉...第3.3.1.3節】
這個指數項在隨着迭代N-->N/2-->N/4-->...將發生變化。因爲博主水平有限,沒法很好的表述推導過程,這裏偷個懶,直接將結論寫在下面。讀者若是對於結論的導出有更深刻的須要,請移步上述論文相關章節。
如上圖所示爲n=3,N=8時的解碼圖,不一樣的是,咱們給每個節點提供了第三個標籤。(除去第一列和最後一列)將節點所在行數減一後轉化爲長度爲n的二進制數,自第二行開始將二進制數用斜槓 ‘ / ’ 加以分割,斜槓放置位置的規律顯然可見。通過這樣的處理之後,咱們能夠觀察一個很是明顯的現象,觀察每一個斜槓後的比特,比特爲0表明該節點爲上節點,比特爲1表明該節點爲下節點。
下面來關注指數項的求解。觀察斜槓先後的比特:
設當前節點座標爲(i,j),若當前節點未左上蝶形,則這個節點開啓的兩個節點的座標爲(i,j+1)和(i+N/2j,j+1)。若爲左下節點,則這兩個節點開啓的兩個節點座標爲(i,j+1)和(i-N/2j,j+1))
所以,利用反推的道理,對於所求解的節點 (i,j) ,從斜槓處開始,自右向左,遇到比特「0」則向左尋找一位 (i,j-1),遇到比特「1」則向左上尋找 (i-N/2j,j-1)。
下面,咱們以節點26爲例詳細說一下。該節點的三個標籤分別爲「26」,,「10/1」。第一個標籤指代該節點的求解順序,第二個標籤描述該節點的似然值經過計算獲得,其中即爲指數項。經過第三個標籤,咱們能夠知道爲何指數項是。觀察「10/1」,斜槓前有兩位「10」。首先,咱們來判斷,節點26由哪個節點所開啓,自右向左,第一位遇到「0」,往左移動一位;第二位遇到「1」,往左上尋找。最後發現找到的是節點21,觀察發現此時已經解出的解碼器爲。獲得這一信息後,咱們來求解指數項,自左向右,第一位遇到「1」,抽取偶數位組成向量(u2,u4);第二位遇到「0」,抽取奇數位——u2,偶數位——u4,按位異或——。
對於解碼器中全部的節點,在以上辦法的指導下,經過座標變換和少許的位運算,便可在必要狀況下求解相應節點的指數項。
求得指數項以後返回文章最開始的流程之中,咱們能夠依次求解出解碼圖中全部節點的似然值,最後對解碼器進行似然判決(包含硬判決與軟判決)。
判決後所獲得的比特流即爲原比特流在極化碼系統下仿真獲得的結果,經過逐位比對,統計傳輸先後的比特差別,咱們能夠獲得一系列的誤碼指標來表徵系統性能。
咱們來回顧一下本節中的重點:
一、本節,咱們旨在解決如何求解解碼圖中的節點似然值。
二、咱們根據似然值計算遞推公式,將節點分爲上節點和下節點,上節點能夠直接求解,下節點須要計算指數項。
三、經過判斷先後節點座標關係以及定義「1」、「0」兩種位運算,咱們實現了求解所需任意節點的指數項。
四、經過似然判決以及統計比特誤碼率,咱們獲得了系統的仿真性能。
關於極化碼,一些入門的論文以下:
【1】Channel polarization: A method for constructing capacity-achieving codes for symmetric binary-input memoryless channels.做者 Erdal Arıkan。Arikan教授是極化碼的締造者,這篇論文發表在IEEE上,也是第一篇對極化碼及相關理論進行系統而詳盡闡明的權威論文。
【2】極化碼編碼與譯碼算法研究.做者 王繼偉。對於不少人來講,英文文獻閱讀起來比較吃力,好在一些質量較高的中文文獻中對極化碼有很是詳盡的介紹,其內容之豐富,足以做爲研究Arikan論文的有力輔助。
【3】極化碼的譯碼算法研究及其應用.做者 張亮。這是一篇博士學位論文,內容充實詳盡、專業嚴謹,文末對於極化碼存在的一些問題進行了分析和展望,頗有啓發性。
這些文章在知網、萬方等數據庫中都可獲取,在極化碼的研究論文中,這三篇只是滄海一粟,還有不少國內外學者的文章值得借鑑,再也不囉嗦列舉。
這是本系列的最後一篇文章。開始時雄心壯志,結束卻時草草收筆,未免有些遺憾。在撰寫博文的過程當中,我發現了不少以前沒有注意到的問題,收穫不可謂不碩大。論語云,「溫故而知新」,誠不我欺!