开始
项目地址: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 = 8
N = 2^n
(int) k
含义: 信息序列长度
类型: 整数型
(float) rate
含义: 编码速率
类型: 浮点数型
代码:
R = k/N
(int) crc_length
含义: CRC 编码长度
类型: 整数型
(int[]) gen
含义: 卷积编码冲激响应序列
类型: 整数二值型向量,元素取值为
代码:
gen = [1,0,1]
(int[][]) F_N
含义: 极化核(kernel)
类型: 整数二值型矩阵,矩阵中的元素取值为
代码:
F_N = [1 0;1 1]
衍生变量
(int) conv_length
含义: 卷积长度,是向量 gen
的长度
类型: 整数型
代码:
conv_length = length(gen)
(int[][]) G_N
含义::生成矩阵(Generation Matrix)F_N
根据 N
进行
类型: 整数二值型矩阵,矩阵中的元素取值为
代码:
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
含义: 预编码矩阵,由卷积冲激序列 gen
的上三角 Toeplitz 矩阵得到。
类型: 整数二值型矩阵,矩阵中的元素取值为
代码:
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 信道近似法构造(巴氏参数近似法)
在信道极化的过程中,关于巴氏参数,以下公式成立:
其中第一个式子当且仅当信道为 BEC 信道时取等号,尽管我们的仿真是在 AWGN 信道下的仿真,但是我们可以将 AWGN 信道近似地看成是 BEC 信道,因此我们可以通过这两条递归关系来得出各个子信道的巴氏参数。
get_BEC_ZWi.m
:
输入为:
- 码长
N
- 原始信道的巴氏参数
ZW
输出为:
各个子信道的巴氏参数 ZWi
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