-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathpolar_encoding_calculate.m
More file actions
37 lines (24 loc) · 887 Bytes
/
Copy pathpolar_encoding_calculate.m
File metadata and controls
37 lines (24 loc) · 887 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function [q_info_list, q_pc_list, G] = polar_encoding_calculate(E, N, K, n_pc, n_wm_pc)
% n_pc: number of parity check bit
load polar_sequence
q_list = polar_sequence(polar_sequence < N);
q_info_list = info_list_calculate(E, K, n_pc, q_list, N);
n = log2(N);
G = 1;
for index = 1:n
G = kron(G, [1 0; 1 1]);
end
row_weights = sum(G, 2);
q_info_size = length(q_info_list);
q_tilt_list = q_info_list(n_pc+1:q_info_size); % |q_info_size - n_pc| most reliable indices in q_info_list
row_weights_valid = row_weights(q_tilt_list+1);
min_row_weights = min(row_weights_valid);
if n_wm_pc == 1
q_pc_list_part = q_info_list(1:(n_pc-1));
wm_pc_index = find(row_weights_valid == min_row_weights, 1, 'last');
wm_pc_entry = q_tilt_list(wm_pc_index);
q_pc_list = [q_pc_list_part; wm_pc_entry];
else % n_wm_pc == 0
q_pc_list = q_info_list(1:n_pc);
end
end