Polar SC的C語言實現之編碼篇

Part 1.Polar SC簡介

       極化碼(Polar Code)是一種前向錯誤更正的編碼方式,作爲目前唯一能被嚴格證明可以達到香農極限的方案,它被中國華爲的5G方案主推,並在2016年的國際無線電標準化機構3GPP第87次會議與美國LDPC、法國Turbo 2.0方案的競爭中勝出。極化碼有多種譯碼方式,本文講的正是極化碼家族中譯碼方式最簡單的一個——SC。譯碼之前,咱先講編碼,極化碼譯碼方式挺多,但編碼方式就一種,算法以及程序實現遠比譯碼簡單。現在開始講解吧。

Part 2.編碼原理

First:編碼圖解析

       萬事開頭難,咱先上圖。

 

試問此圖怎麼看?答案只有兩個字——“異或”,異或運算,即圖中的“工”字形上的 “⊕”符號,被“工”字形符號連接的左端兩個單元,就是“異或”的主體,經過異或運算後的結果就是“工”字形符號右端上方的單元,而“工”字形符號右端下方的單元值等於左下方的值。在此,異或運算的對象只有0與1這兩個數字,原則是:1與0(0與1)異或結果爲1,1與1、0與0異或結果均爲0。我們也可以理解爲:1和0這兩個數字,相同則爲0,不同則爲1。(如下面兩圖所示)

同理,可得下圖結果:

Second:固定比特與信息比特

我們傳輸的信息會以0和1這兩種二進制比特形式,按照不同的順序進行排列,這也在一定程度上形成了信息的多樣性。那麼,比特的排列有什麼規則呢?

打個比方,我們的總碼長爲1024,那麼其中信息比特與固定比特各佔512位。信息比特就是我們要傳輸的信息,可以是0,亦可爲1;而固定比特本身不傳遞信息,固定比特值均爲0。碼長也是有講究的,一般而言,碼長是2的平方數,比如2、4、16等等。固定比特與信息比特的排序是按照克羅內克積生成的,此數學問題咱不解釋,我們以1024碼長爲例,排列順序直接上圖:

至此,我們的編碼原理講解完畢。

Part 3.代碼實戰

程序要求:寫16碼長的編碼程序,程序只編碼一次。輸出界面顯示內容:原碼序列和編碼後序列。

資料:16碼長的固定比特與信息比特排序表(固定比特用0表示,信息比特用1表示)

                   0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1

思路:

1.信息傳入:在固定比特位的原b固然爲0,而每個信息位的原比特可能是0或1,我們就用種子隨機數進行模擬(種子隨機數要加上頭文件:#include<time.h>以及#include<stdlib.h>),計算機會以時間爲變量產生隨機數,而要得到0或1的隨機數,我們就可以使用“%2”取餘數的方式,比如隨機產生的數爲99,其餘數爲1,隨機產生的數爲100,其餘數爲0。這樣我們就可以模擬各種不同的信息傳入。注意:數組元素以第0位爲首位。

頭文件、宏定義與全局變量部分:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
const int N=16; 
const int n=5;
int A[N][n];
int CBR[N]={0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1};//數組CBR裝有16位固定比特集

main函數信息傳入部分:

srand((unsigned)time(NULL));
//設定種子隨機數,使隨機數隨時間改變 
int Vi,e,sum=0,s=0;
for(Vi=0;Vi<N;Vi++)
{if(CBR[Vi])A[Vi][0]=rand()%2; 
//CBR數組中非0的元素是信息比特位,在對應行產生0或1的隨機數 
else A[Vi][0]=0;
//固定比特位仍然爲0 
}

2.編碼:我們以二維數組的進行編寫(一維數組的算法將在SC控制行與L算法中講解),按照編碼原則,使用三重循環控制行和列的計算。

int h=N,y1,o;
for(y1=0;y1<n-1;y1++)
{
	for(o=0;o<N;o=o+(2*N)/h)
	{for(e=o;e<o+N/h;e++)
	{A[e][y1+1]=A[e][y1]^A[e+N/h][y1]?1:0;
	//^即爲異或運算符號 
	 A[e+N/h][y1+1]=A[e+N/h][y1];
	}
	}
	h/=2;
}

        3.輸出:

printf("原碼序列:\n");
for(y1=0;y1<N;y1++)printf("%d ",A[y1][0]);
printf("\n");
printf("編碼結果:\n");
for(y1=0;y1<N;y1++)printf("%d ",A[y1][n-1]);
return 0;
}

4.界面顯示

 

最後,感謝大家的耐心觀看,如有錯誤,歡迎指正。編碼之後的下一個步驟便是調製、加噪聲,我接下來會繼續介紹,歡迎關注。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章