diff --git a/src/thesis/chapters/4_decoding_under_dems.tex b/src/thesis/chapters/4_decoding_under_dems.tex index 3ea5021..be8d3f4 100644 --- a/src/thesis/chapters/4_decoding_under_dems.tex +++ b/src/thesis/chapters/4_decoding_under_dems.tex @@ -1167,7 +1167,13 @@ reimplementation in Rust to achieve higher simulation speeds due to the compiled nature of the language. We reimplemented both the window splitting and the decoders themselves. -% Simulation setup +% Global experimental setup +% - Code +% - # SE rounds +% - Noise model +% - Per-round LER as figure of merit +% - Detector definition +% - # simulated error frames We chose to carry out our simulations on \ac{bb} codes, as they have recently emerged as particularly promising candidates for practical @@ -1194,13 +1200,60 @@ generated by simulating at least $200$ logical error events. \subsection{Belief Propagation} \label{subsec:Belief Propagation} -% Intro +% Local experimental setup +% - BP variant -We begin our investigation by using \ac{bp} with no further +We began our investigation by using \ac{bp} with no further modifications as the inner decoder. We chose the min-sum variant of \ac{bp} due to its low computational complexity. -% Whole decoding as a lower bound on the error rate +% [Thread] Get impression for max gain +% - More global = better -> Compare windowed vs. whole + +% [Description] Figure 4.8 +% - Parameters +% - # BP iterations +% - W,F +% - Physical error rates +% - Windowed (cold start) vs whole decoding +% - (?) Semilog y axis +% - Figure description +% - TODO: + +% [Interpretation] Figure 4.8 +% - Larger window -> better, because more global decoding +% - Diminishing returns as the window becomes larger +% - As expected, whole works best + +% [Thread] First comparison with warm start +% - Compare performance of warm start to cold start + +% [Description] Figure 4.9 +% - Parameters +% - # BP iterations +% - W,F +% - Physical error rates +% - Warm vs cold start +% - Figure description +% - TODO: + +% [Interpretation] Figure 4.9 +% - Generally better performance with warm start, as expected +% - It is surprising that warm start performs better than whole + +% [Thread] Warm start is better than whole due to more effective iterations + +% [Description] Figure 4.10 +% - Parameters +% - # BP iterations +% - W,F +% - Physical error rates +% - Warm vs cold start +% - Figure description +% - TODO: + +% [Interpretation] Figure 4.10 +% - We initially wanted to gain an impression for the performance gain we could expect from a modification to the sliding-window decoding procedure. @@ -1529,6 +1582,15 @@ though the process is less global. \addlegendentryexpanded{$W = \W$} } + + \addplot+[mark=*, solid, mark options={fill=black}, black] + table[ + col sep=comma, x=max_iter, + y=LER_per_round, + ] + {res/sim/max_iter/SyndromeMinSumDecoder/p_0.0025/LERs.csv}; + + \addlegendentry{Whole} \end{axis} \end{tikzpicture} diff --git a/src/thesis/copy_sim_results.sh b/src/thesis/copy_sim_results.sh index 9ef4986..08dd805 100755 --- a/src/thesis/copy_sim_results.sh +++ b/src/thesis/copy_sim_results.sh @@ -129,6 +129,24 @@ sp="/-\|" # done # done +# Copy whole BP over max iter. results + +echo -e "\rCopying whole over max_iter simulation results..." +echo -n ' ' +for decoder in "SyndromeMinSumDecoder"; do + for p in 0.001 0.0025 0.004; do + SRC_PATH="${BASE_PATH}+rust_exp=max_iter_bp,decoder.class_name=${decoder},simulation.phy_err_rate=${p}/" + LATEST_RESULTS_DIR=$(ls -t ${SRC_PATH} | head -1) + SRC_FILE="${SRC_PATH}/${LATEST_RESULTS_DIR}/LERs.csv" + DEST_DIR="res/sim/max_iter/${decoder}/p_${p}/" + mkdir -p ${DEST_DIR} + DEST_FILE="${DEST_DIR}/LERs.csv" + cp ${SRC_FILE} ${DEST_FILE} + post_process_LERs ${DEST_FILE} + printf "\b${sp:i++%${#sp}:1}" + done +done + # # Copy BPGD decimation passing # # echo -e "\rCopying BPGD param exploration results..." @@ -151,20 +169,20 @@ sp="/-\|" # Copy BPGD with decimation info passing over max iter. results -echo -e "\rCopying BPGD over max. iter. results..." -echo -n ' ' -for pass_soft_info in "True" "False"; do - for F in 1 2 3; do - for W in 3 4 5; do - SRC_PATH="${BASE_PATH}+rust_exp=max_iter_bpgd_pass_channel,decoder.class_name=WindowingSyndromeSpaGdDecoder,decoder.pass_soft_info=${pass_soft_info},simulation.phy_err_rate=0.0025,system.F=${F},system.W=${W}/" - LATEST_RESULTS_DIR=$(ls -t ${SRC_PATH} | head -1) - SRC_FILE="${SRC_PATH}/${LATEST_RESULTS_DIR}/LERs.csv" - DEST_DIR="res/sim/max_iter/WindowingSyndromeSpaGdDecoderPassDecimation/p_0.0025/pass_soft_info_${pass_soft_info}/F_${F}/W_${W}" - mkdir -p ${DEST_DIR} - DEST_FILE="${DEST_DIR}/LERs.csv" - cp ${SRC_FILE} ${DEST_FILE} - post_process_LERs ${DEST_FILE} - printf "\b${sp:i++%${#sp}:1}" - done - done -done +# echo -e "\rCopying BPGD over max. iter. results..." +# echo -n ' ' +# for pass_soft_info in "True" "False"; do +# for F in 1 2 3; do +# for W in 3 4 5; do +# SRC_PATH="${BASE_PATH}+rust_exp=max_iter_bpgd_pass_channel,decoder.class_name=WindowingSyndromeSpaGdDecoder,decoder.pass_soft_info=${pass_soft_info},simulation.phy_err_rate=0.0025,system.F=${F},system.W=${W}/" +# LATEST_RESULTS_DIR=$(ls -t ${SRC_PATH} | head -1) +# SRC_FILE="${SRC_PATH}/${LATEST_RESULTS_DIR}/LERs.csv" +# DEST_DIR="res/sim/max_iter/WindowingSyndromeSpaGdDecoderPassDecimation/p_0.0025/pass_soft_info_${pass_soft_info}/F_${F}/W_${W}" +# mkdir -p ${DEST_DIR} +# DEST_FILE="${DEST_DIR}/LERs.csv" +# cp ${SRC_FILE} ${DEST_FILE} +# post_process_LERs ${DEST_FILE} +# printf "\b${sp:i++%${#sp}:1}" +# done +# done +# done diff --git a/src/thesis/res/sim/max_iter/SyndromeMinSumDecoder/p_0.001/LERs.csv b/src/thesis/res/sim/max_iter/SyndromeMinSumDecoder/p_0.001/LERs.csv new file mode 100644 index 0000000..7fc2e33 --- /dev/null +++ b/src/thesis/res/sim/max_iter/SyndromeMinSumDecoder/p_0.001/LERs.csv @@ -0,0 +1,8 @@ +max_iter,num_trials,LER,LER_per_round,num_errors +32,10528,0.0354293313069908,0.0030015014232951387,372.99999999999915 +128,68422,0.0029230364502645,0.00024391332035389457,199.99999999999764 +256,100000,0.00184,0.00015346279666106355,184.0 +512,100000,0.00122,0.00010172355962756452,122.0 +1024,100000,0.00084,7.002696447200307e-05,84.0 +2048,100000,0.00052,4.33436645435048e-05,51.99999999999999 +4096,100000,0.00042,3.5006739308451884e-05,42.0 diff --git a/src/thesis/res/sim/max_iter/SyndromeMinSumDecoder/p_0.0025/LERs.csv b/src/thesis/res/sim/max_iter/SyndromeMinSumDecoder/p_0.0025/LERs.csv new file mode 100644 index 0000000..4df7411 --- /dev/null +++ b/src/thesis/res/sim/max_iter/SyndromeMinSumDecoder/p_0.0025/LERs.csv @@ -0,0 +1,8 @@ +max_iter,num_trials,LER,LER_per_round,num_errors +32,5264,0.3575227963525836,0.03619728900635699,1882.0 +128,5264,0.1118920972644376,0.00983977212107956,588.9999999999995 +256,5264,0.0818768996960486,0.007093372523371166,430.99999999999983 +512,5264,0.0645896656534954,0.005548714177492475,339.9999999999998 +1024,5264,0.0524316109422492,0.004477957765848362,275.9999999999998 +2048,5264,0.0442629179331307,0.0037655941776483237,233.0 +4096,10528,0.0361892097264437,0.0030669771276242708,380.99999999999926 diff --git a/src/thesis/res/sim/max_iter/SyndromeMinSumDecoder/p_0.004/LERs.csv b/src/thesis/res/sim/max_iter/SyndromeMinSumDecoder/p_0.004/LERs.csv new file mode 100644 index 0000000..2cab544 --- /dev/null +++ b/src/thesis/res/sim/max_iter/SyndromeMinSumDecoder/p_0.004/LERs.csv @@ -0,0 +1,8 @@ +max_iter,num_trials,LER,LER_per_round,num_errors +32,5264,0.8651215805471124,0.15375677320993897,4554.0 +128,5264,0.5987841945288754,0.0732807818579091,3152.0000000000005 +256,5264,0.5184270516717325,0.05907464062706547,2729.0 +512,5264,0.4591565349544073,0.04992921073125611,2417.0 +1024,5264,0.4209726443768997,0.04451268995716784,2216.0 +2048,5264,0.3865881458966565,0.03990837706831185,2035.0 +4096,5264,0.3563829787234042,0.036054914686007855,1875.9999999999995