A C++ implementation for simulating the encoding and decoding of the variant of zipper codes, such as multi-chain tiled diagonal zipper codes (MC-TDZCs) and generalized integrated interleaved zipper (GII-zipper) codes, and simulating the anchor decoding (AD) for the zipper codes.
More details about zipper codes, MC-TDZCs, GII-zipper codes, and AD can be found in the following papers.
- Y. Sukmadji, U. Martínez-Peñas, and F. R. Kschischang, “Zipper codes,” J. Lightw. Technol., vol. 40, no. 19, pp. 6397-6407, Jul. 2022.
- X. Zhao, S. Zhao, and X. Ma, “A class of tiled diagonal zipper codes with multiple chains,” IEEE Trans. Commun., vol. 70, no. 8, pp. 5004-5017, Aug. 2022.
- X. Zhao, S. Zhao, and Z. Li, “Enhanced anchor decoder for staircase codes with hard reliability scores,” IEEE Commun. Lett., vol. 26, no. 12, pp. 2826-2830, Dec. 2022.
- X. Zhao, S. Zhao, Q. Huang and X. Ma, “The Generalized Integrated Interleaved Zipper Codes With Anchor Decoding,” IEEE Tran. Commun., vol. 71, no. 7, pp. 3792-3806, July 2023.
- C. Häger and H. Pfister, “Approaching miscorrection-free performance of product codes with anchor decoding,” IEEE Tran. Commun., vol. 66, no. 7, pp. 2797-2808, Jul. 2018.
The program simulates the variant of tiled diagonal zipper codes (TDZCs) with iterative bounded distance decoding (iBDD) or anchor decoding (AD) over the binary symmetric channel, where the size of 'tile' can be configured by the user.
The program can achieve the following simulations:
- TDZC with iBDD or AD
- MC-TDZC with iBDD or AD
- GII(4,3)-TDZC with AD
The program will run correctly under the following assumptions:
- Only BCH codes are used for all simulations
- The same interleaver map is used for each TDZC
- The same conponent code is used for each row of a TDZC
- The same buffer width for each TDZC, i.e., the same code length
- For the simulation of GII-zipper codes, only the case of the GII(4,3)-TDZC code does work
Some flexibilities are allowed:
- The code length and error correcting capacity of BCH code are allowed to be designed
- The decoding window size, the output size, and the 'tile' size are allowed to be configured by the user
If you want to get the program of other zipper schemes, like braided codes, or design the interleaver map of zipper codes, please refer to the program provided by the authors of zipper codes.
There are two configuration files:
GIISetting.txt
Zippersetting.txt
Make sure these two files are in the same directory as the source files.
If you want to simulate TDZC with iBDD, please configure GIISetting.txt and Zippersetting.txt.
In Zippersetting.txt
, make sure that:
- The flag of "Runing_anchor_decoding_option" must be set to 0.
- The number of "Anchor_decoding_threshold_value" must be consistent with the value of "Number_of_zipper_codes", where these values of "Anchor_decoding_threshold_value" will not affect the simulation results.
- The value of "Number_of_zipper_codes" must be same with the value of "Number_of_zippper_codes" in GIISetting.txt.
- The flag of "Multichain_couple" must be set to 0.
In GIISetting.txt
, make sure that:
- The value of "Number_of_zippper_codes" must be same with the value of "Number_of_zippper_codes" in Zippersetting.txt.
- The value of "Number_of_zippper_codes" must be same with the value of "Number_of_nested_interleaves".
-
$n < 2^q$ . -
$n$ is divisible by$w$ . - The number of value for "The_error_correcting_capability" must be
$v+1$ and the first value of "The_error_correcting_capability" must be 0. The remaining values represent the error correcting capabilities for different zipper codes.
If you want to simulate TDZC with AD, please configure GIISetting.txt and Zippersetting.txt.
In Zippersetting.txt
, make sure that:
- The flag of "Runing_anchor_decoding_option" must be set to 1.
- The number of "Anchor_decoding_threshold_value" must be consistent with the value of "Number_of_zipper_codes", where these values of "Anchor_decoding_threshold_value" will affect the simulation results.
Other configurations are similar to that of the cases of TDZC with iBDD.
If you want to simulate MC-TDZC with iBDD, please configure GIISetting.txt and Zippersetting.txt.
In Zippersetting.txt
, make sure that:
- The flag of "Runing_anchor_decoding_option" must be set to 0.
- The number of "Anchor_decoding_threshold_value" must be consistent with the value of "Number_of_zipper_codes", where these values of "Anchor_decoding_threshold_value" will not affect the simulation result.
- The value of "Number_of_zipper_codes" must be same with the value of "Number_of_zippper_codes" in GIISetting.txt.
- The flag of "Multichain_couple" must be set to 1.
In GIISetting.txt
, make sure that:
- The value of "Number_of_zippper_codes" must be same with the value of "Number_of_zippper_codes" in Zippersetting.txt.
- The value of "Number_of_zippper_codes" must be same with the value of "Number_of_nested_interleaves".
-
$n < 2^q$ . -
$n$ is divisible by$w$ . - The number of value for "The_error_correcting_capability" must be v+1 and the first value of "The_error_correcting_capability" must be 0. The remaining values represent the error correcting capabilities for different zipper codes.
If you want to simulate MC-TDZC with AD, please configure GIISetting.txt and Zippersetting.txt.
In Zippersetting.txt
, make sure that:
- The flag of "Runing_anchor_decoding_option" must be set to 1.
- The number of "Anchor_decoding_threshold_value" must be consistent with the value of "Number_of_zipper_codes", where these values of "Anchor_decoding_threshold_value" will affect the simulation results.
Other configurations are similar to that of the cases of MC-TDZC with iBDD.
If you want to simulate GII(4,3)-TDZC with AD, please configure GIISetting.txt and Zippersetting.txt.
In Zippersetting.txt
, make sure that:
- The flag of "Runing_anchor_decoding_option" must be set to 1.
- The number of "Anchor_decoding_threshold_value" must be consistent with the value of "Number_of_zipper_codes", where these values of "Anchor_decoding_threshold_value" will affect the simulation result.
In GIISetting.txt
, make sure that:
- The value of "Number_of_zippper_codes" must be same with the value of "Number_of_zippper_codes" in Zippersetting.txt.
-
$n < 2^q$ . -
$n$ is divisible by$w$ .
The codes in this repository are under the MIT license as specified by the LICENSE file.
If you find these codes helpful, please cite these papers:
- Y. Sukmadji, U. Martínez-Peñas, and F. R. Kschischang, “Zipper codes,” J. Lightw. Technol., vol. 40, no. 19, pp. 6397-6407, Jul. 2022.
- X. Zhao, S. Zhao, and X. Ma, “A class of tiled diagonal zipper codes with multiple chains,” IEEE Trans. Commun., vol. 70, no. 8, pp. 5004-5017, Aug. 2022.
- X. Zhao, S. Zhao, and Z. Li, “Enhanced anchor decoder for staircase codes with hard reliability scores,” IEEE Commun. Lett., pp. 1–1, 2022.
- X. Zhao, S. Zhao, Q. Huang and X. Ma, “The Generalized Integrated Interleaved Zipper Codes With Anchor Decoding,” IEEE Tran. Commun., vol. 71, no. 7, pp. 3792-3806, July 2023.
- C. Häger and H. Pfister, “Approaching miscorrection-free performance of product codes with anchor decoding,” IEEE Tran. Commun., vol. 66, no. 7, pp. 2797-2808, Jul. 2018.
If you have any questions and suggestions, please contact me at zhaoxw9@mail2.sysu.edu.cn.