極化碼的matlab仿真(4)——SC譯碼(2)


================================================

首先自作多情的說一句——“抱歉!”

古語“有志者、事竟成”,是說有志向的人最終都能夠成事。想到這句話我很慚愧,我居然連這樣一件小事都無法堅持不懈的完成,這個系列的博客我一拖再拖,一個多月里竟然再沒有更新。雖然博客鮮有看客垂閱,但是這半途而廢的事實卻是明顯的。痛定思痛,我決定老老實實更完。算是亡羊補牢,做到有始有終吧。

================================================

---內容開始--

上一節,我們介紹了SC譯碼過程中的兩個解碼特例——u1和u2,通過這兩例解碼方案的介紹,我們對於利用Arikan遞推公式進行串行消除解碼的過程有了一個初步的認識,接下來我們的任務在於由特殊到一般,歸納出適用於所有解碼器節點的解碼方案,並給出相應的matlab代碼。

我們先來重新觀察蝶形解碼圖:

根究u1、u2的解碼經驗,我們可以將解碼過程作如下歸納:

① 判斷要解出的節點為上節點還是下節點,若為上節點則進行步驟②,否則進行步驟③;

② 根據解碼圖中前后節點的坐標關系,找到該節點所開啟的兩個節點,分別判斷這兩個節點是否被解出,如果未解出回到步驟①,否則直接利用上節點計算公式求得該節點似然值。

③ 判斷相應上節點是否解出,如果未解出,執行步驟②,否則執行步驟④計算指數項;

(根據我們多次提到的原則——左上節點和左下節點總是同時被解出,一般情況下在求解下節點的時候,相應的上節點已經解出。)

④ 我們先來復習一下什么是指數項

  如上圖為Arikan譯碼遞推公式。對於蝶形的左下節點的求解,在得到左上節點似然值的基礎上使用第二個公式。其中,指數項為

  【關於指數項計算的專業內容,讀者可參考論文《極化碼編碼與譯碼算法研究》...王繼偉...第3.3.1.3節】

  這個指數項在隨着迭代N-->N/2-->N/4-->...將發生變化。由於博主水平有限,無法很好的表述推導過程,這里偷個懶,直接將結論寫在下面。讀者如果對於結論的導出有更深入的需要,請移步上述論文相關章節。

  如上圖所示為n=3,N=8時的解碼圖,不同的是,我們給每一個節點提供了第三個標簽。(除去第一列和最后一列)將節點所在行數減一后轉化為長度為n的二進制數,自第二行開始將二進制數用斜杠 ‘ / ’ 加以分割,斜杠放置位置的規律顯然可見。經過這樣的處理以后,我們可以觀察一個非常明顯的現象,觀察每個斜杠后的比特,比特為0代表該節點為上節點,比特為1代表該節點為下節點。

  下面來關注指數項的求解。觀察斜杠前后的比特:

  • 為了求解指數項,自左向右,我們定義操作“1”為抽取向量中的偶數位,組成長度減半的新向量;定義操作“0”為分別抽取向量中的偶數位與奇數位組成兩個新向量,然后將它們按位異或,得到長度減半的新向量。(這部分會通過一個例子詳細說明,看不懂不要捉急=v=)
  • 為了確定解碼圖中的某個節點由哪個解碼器所啟動,自右向左,我們定義操作“1”為向左上尋找節點;定義操作“0”為向左尋找節點。(這里我們回顧一下上一節提到的前后節點之間的關系:

   設當前節點坐標為(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、本節,我們旨在解決如何求解解碼圖中的節點似然值。

  2、我們根據似然值計算遞推公式,將節點分為上節點和下節點,上節點可以直接求解,下節點需要計算指數項。

  3、通過判斷前后節點坐標關系以及定義“1”、“0”兩種位運算,我們實現了求解所需任意節點的指數項。

  4、通過似然判決以及統計比特誤碼率,我們得到了系統的仿真性能。

  關於極化碼,一些入門的論文如下:

  【1】Channel polarization: A method for constructing capacity-achieving codes for symmetric binary-input memoryless channels.作者 Erdal Arıkan。Arikan教授是極化碼的締造者,這篇論文發表在IEEE上,也是第一篇對極化碼及相關理論進行系統而詳盡闡明的權威論文。

  【2】極化碼編碼與譯碼算法研究.作者 王繼偉。對於很多人來說,英文文獻閱讀起來比較吃力,好在一些質量較高的中文文獻中對極化碼有非常詳盡的介紹,其內容之豐富,足以作為研究Arikan論文的有力輔助。

  【3】極化碼的譯碼算法研究及其應用.作者 張亮。這是一篇博士學位論文,內容充實詳盡、專業嚴謹,文末對於極化碼存在的一些問題進行了分析和展望,很有啟發性。

  這些文章在知網、萬方等數據庫中均可獲取,在極化碼的研究論文中,這三篇只是滄海一粟,還有很多國內外學者的文章值得借鑒,不再啰嗦列舉。

  這是本系列的最后一篇文章。開始時雄心壯志,結束卻時草草收筆,未免有些遺憾。在撰寫博文的過程中,我發現了很多之前沒有注意到的問題,收獲不可謂不碩大。論語雲,“溫故而知新”,誠不我欺!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM