Skip to content

开始

项目地址:https://github.com/barryu9/PAC-Codes-Matlab

该项目是对 PAC 码的编译码进行 Matlab 实现。本文档将对 Matlab 代码进行详细地解释。

项目文件夹结构

  • simulation.m
  • Codes
    • smax.m
    • paccode.m
    • m_func.m
    • get_next_state.m
    • generate_CS.m
    • find_sMaxPos.m
    • ffs.m
    • List Decoder Functions
      • get_llr_layer.m

      • get_GN.m

      • get_bit_layer.m

      • conv_trans.m

      • conv_1bit_trans.m

      • calc_PM.m

    • Constructions
      • get_BEC_ZWi.m
      • GA Functions
        • phi_inverse.m

        • phi.m

        • get_subchannel_capacity.m

        • get_PCi_vector.m

        • GA.m

        • derivative_phi.m

        • capacity_binary_AWGN.m

        • accurate_phi.m

      • CRC
        • get_crc_objective.m

        • crc_generator_matrix.m

全局变量表

原始设定变量

(int) N

含义: 编码长度 N=2n,其中 n=1,2,

类型: 整数型

代码:

matlab
n = 8
N = 2^n

(int) k

含义: 信息序列长度 k,其中 0<kN

类型: 整数型


(float) rate

含义: 编码速率 R=k/N,由于 0<kN,因此 0<R1

类型: 浮点数型

代码:

matlab
R = k/N

(int) crc_length

含义: CRC 编码长度 kc,一般取值为 0,2,4,8,16

类型: 整数型


(int[]) gen

含义: 卷积编码冲激响应序列 c=(c0,c1,,cm)

类型: 整数二值型向量,元素取值为 01

代码:

matlab
gen = [1,0,1]

(int[][]) F_N

含义: 极化核(kernel)FN,Arikan 的极化码极化核为

FN=[1011]

类型: 整数二值型矩阵,矩阵中的元素取值为 01

代码:

matlab
F_N = [1 0;1 1]

衍生变量

(int) conv_length

含义: 卷积长度,是向量 c gen 的长度

类型: 整数型

代码:

matlab
conv_length = length(gen)

(int[][]) G_N

含义::生成矩阵(Generation Matrix)GN,由 FN F_N 根据 N N 进行 log2(N) 次 Kroneck 积得到

类型: 整数二值型矩阵,矩阵中的元素取值为 01

代码:

matlab
function G_N = get_G_N(F_N,N)

	G_N = zeros(N, N);
	
	G_N(1 : 2, 1 : 2) = F_N;
	
	for i = 2 : log2(N)
	
		G_N(1 : 2^i, 1 : 2^i) = kron(G_N(1 : 2^(i - 1), 1 : 2^(i - 1)), F_N);
	
	end

(int[][]) T

含义: 预编码矩阵,由卷积冲激序列 c gen 的上三角 Toeplitz 矩阵得到。

类型: 整数二值型矩阵,矩阵中的元素取值为 01

代码:

matlab
gen_zero_padding = [gen, zeros(1, N - conv_depth)]; %对gen进行补零

T = triu(toeplitz(gen_zero_padding)); %upper-triangular Toeplitz matrix

(int[]) lambda_offset

可以根据 code_length 得到


(int[]) llr_layer_vec

可以根据 code_length 得到


(int[]) bit_layer_vec

可以根据 code_length 得到


编码

构造

BEC 信道近似法构造(巴氏参数近似法)

在信道极化的过程中,关于巴氏参数,以下公式成立:

Z(W2N(2i1))2Z(WN(i))[Z(WN(i))]2Z(W2N(2i))=[Z(WN(i))]2

其中第一个式子当且仅当信道为 BEC 信道时取等号,尽管我们的仿真是在 AWGN 信道下的仿真,但是我们可以将 AWGN 信道近似地看成是 BEC 信道,因此我们可以通过这两条递归关系来得出各个子信道的巴氏参数。

get_BEC_ZWi.m :

输入为:

  1. 码长 N
  2. 原始信道的巴氏参数 ZW

输出为:

各个子信道的巴氏参数 ZWi

matlab
function ZWi = get_BEC_ZWi(N, ZW)

	ZWi = zeros(N, 1);
	
	ZWi(1) = ZW;
	
	m = 1;
	
	while (m <= N/2)
	
		for k = 1:m
		
			Z_tmp = ZWi(k);
			
			ZWi(k) = 2 * Z_tmp - Z_tmp^2; %use upper bound
			
			ZWi(k+m) = Z_tmp^2;
		
		end
	
	m = m * 2;

end