Skip to content

Commit 14148ad

Browse files
author
Alex
committed
Extra complexity removed. Mex filed added.
1 parent 331d8b9 commit 14148ad

9 files changed

Lines changed: 30 additions & 34 deletions

File tree

config.m

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,30 @@
1414
Fading_Independent = 0; %if Fading_Channel = 1
1515
quasi = 0; % quasi channel
1616
fading_channel = 'TU120'; %custom matlab channel
17-
17+
%seed
1818
fix_seed = 1; %1:fix data, 0:random data
19-
if fix_seed
20-
rng(sum(100*clock));
21-
else
22-
rand('seed',123456);
23-
end
2419
%Simulation values
25-
fast_run = 1; %1:run of optimal-matlab code, 0:run of hardware-code (suboptimal f/g)
20+
fast_run = 1; %1:run of optimal-matlab code + mex-files, 0:run of hardware-code (suboptimal f/g)
2621
min_fer_errors = 100; %minimum frame errors to count
2722
min_codewords = 100; %minimum codewords to count
2823
NbitsPerSymbol = 1; %modulation parameter
2924
constDims = 1; %modulation parameter
3025
snrdb_values =EbNo_dB+10*log10(double(code_rate*NbitsPerSymbol*2/constDims));
3126
%% Parfor configuration
32-
FLAG_Enable_parpool=1; % 0: Disable, 1: Enable
27+
FLAG_Enable_parpool=0; % 0: Disable, 1: Enable
3328
parcore_nums = 4;
29+
%% Initializations
30+
%add mex-files
31+
if(fast_run == 1)
32+
addpath('./support/mex_files');
33+
end
34+
%initialize seed
35+
if fix_seed
36+
rng(sum(100*clock));
37+
else
38+
rand('seed',123456);
39+
end
40+
%initialize parcorenum
3441
if FLAG_Enable_parpool
3542
% determine the number of physical cores
3643
corenum = feature('numcores');
@@ -50,7 +57,7 @@
5057
end
5158
parallel_frames = 100*parcorenum;
5259
else
53-
parallel_frames = 10;
60+
parallel_frames = 100;
5461
end
5562
%% Variable Initializations
5663
bit_error_rate = zeros(length(n_values),length(snrdb_values));

main.m

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
K = N* code_rate; %Code keyword length
88
mat_file = [result_path 'polar_N' num2str(N) '_K' num2str(K) '_' timestamp '.mat'];
99
%Polar-code initializations
10-
[Fn,frozen_bits,partial_sum_adders, sc_functions, sc_2nd_indxs] = polar_initialization(N, K, capacity);
10+
[Fn,frozen_bits, frozen_indxs, non_frozen_indxs, partial_sum_adders, sc_functions, sc_2nd_indxs] = polar_initialization(N, K, capacity);
1111
fprintf("Polar Code %d/%d running:\n",N,K);
1212
%% SNR LOOP
1313
for i_index = 1:length(snrdb_values)
@@ -17,11 +17,11 @@
1717
while (fer_errors<min_fer_errors || codewords_tmp<min_codewords)
1818
bit_errors_parfor = zeros(1,parallel_frames);
1919
fer_errors_parfor = zeros(1,parallel_frames);
20-
% for frame = 1:parallel_frames
21-
parfor frame = 1:parallel_frames
20+
for frame = 1:parallel_frames
21+
% parfor frame = 1:parallel_frames
2222
inputs = rand(1,K)>0.5; %write random inputs
2323
%transform inputs
24-
inputs_to_encode = transform_inputs(inputs,frozen_bits,N);
24+
inputs_to_encode = transform_inputs(inputs,non_frozen_indxs,N);
2525
%encode
2626
encoded_inputs = encode(inputs_to_encode,Fn); %Reversed Polar Encoding
2727
%modulate
@@ -38,9 +38,9 @@
3838
%hardware-version (suboptimal-calculations of f/g)
3939
outputs = decode(llr,frozen_bits,partial_sum_adders,sc_functions,sc_2nd_indxs); %or decode2(llr,frozen_bits); for the other algorithm
4040
end
41+
final_outputs = outputs(non_frozen_indxs);%transform_outputs(outputs,frozen_bits,N);
4142
%Calculate temporary bit/frame errors
42-
final_outputs = transform_outputs(outputs,frozen_bits,N);
43-
temp_bit_errors = size(find(final_outputs ~= inputs),2);
43+
temp_bit_errors = sum(final_outputs ~= inputs);
4444
bit_errors_parfor(frame) = temp_bit_errors;
4545
fer_errors_parfor(frame) = (temp_bit_errors>0);
4646
end

support/mex_files/l_f.mexw64

65 KB
Binary file not shown.

support/mex_files/s_f.mexw64

35.5 KB
Binary file not shown.

support/polar_initialization.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
function [ Fn,frozen_bits,partial_sum_adders, sc_functions, sc_2nd_indxs] = polar_initialization( N, K, capacity )
1+
function [ Fn,frozen_bits, frozen_indxs, non_frozen_indxs, partial_sum_adders, sc_functions, sc_2nd_indxs] = polar_initialization( N, K, capacity )
22
%POLAR_INITIALIZATION Summary of this function goes here
33
% Detailed explanation goes here
44
Fn = fkronecker(N);
55
frozen_bits = initialize_frozen_bits(N,K,capacity); %0=frozen, 1=not_frozen
6+
frozen_indxs = find(frozen_bits == 0);
7+
non_frozen_indxs = find(frozen_bits == 1);
68
partial_sum_adders = partial_sums_initialize(N); %!!!!! NOT bit_reversed array -- %outputs(z,i,l) -- l stage ,bit Ui is added,z is the number of g adder
79
[sc_functions,sc_2nd_indxs] = sc_array_initialize(N);
810
end

support/s_f.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
end
1111
else
1212
if (mod(floor((j-1)/power(2,l-2)),2) == 0)
13-
output = xor(s_f(l-1,j,frozen_bits,estimated),s_f(l-1,j+power(2,l-2),frozen_bits,estimated));
13+
output = double(xor(s_f(l-1,j,frozen_bits,estimated),s_f(l-1,j+power(2,l-2),frozen_bits,estimated)));
1414
else
1515
output = s_f(l-1,j,frozen_bits,estimated);
1616
end

support/sc_array_initialize.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
function [sc_function,sc_2nd_indxs] = sc_array_initialize(bits)
22
%decoding initialization
3-
outputs = zeros(bits,log2(bits)+1,3);%outputs(i-1,l-1,dimension) // dimension= 1 values/dimension=2 if 0 then f else g/dimension=3 2nd input
3+
%sc_function:if 0 then f else g
4+
%sc_2nd_indxs: index of 2nd input
45
sc_function = zeros(bits,log2(bits)+1);
56
sc_2nd_indxs = zeros(bits,log2(bits)+1);
67
reverse_i = bitrevorder(1:1:bits);

support/transform_inputs.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
function outputs = transform_inputs(inputs,frozen_bits,N)
1+
function outputs = transform_inputs(inputs,non_frozen_indxs,N)
22
%takes Xi inputs,the position of frozen bits, and makes the outputs array
33
%inputs at not frozen positions, 0 at frozen positions
44
outputs = zeros(1,N);
5-
outputs(frozen_bits == 1) = inputs;
5+
outputs(non_frozen_indxs) = inputs;
66
% correct
77

support/transform_outputs.m

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)