我正在尝试在项目中使用Schifra Reed-Solomon 纠错代码库。我没有关于 Reed-Solomon 代码和 Galois 场如何工作的背景。我无法确定 16 位符号(字段描述符)的 generator_polynomial_index 的理想值。
我的代码适用于索引 0 和许多其他索引。我已经尝试了所有索引值。该代码适用于很多人(准确地说是 0-32724 和 32779-65485)但是
问题
- 什么是最理想的值?
- 如果我切换到另一个索引值(这也有效但不理想),会有什么变化?
我的其他发现:
field_descriptor = 符号大小(位/符号)
code_length(符号总数(数据符号+纠错码符号)) = 2^symbol_size - 1 (库只支持这个码长值)
generator_polynomial_root_count = fec_length(冗余或纠错符号数)
错误以符号而不是位来衡量,即特定符号中的 1 个不正确位被计为 1 个错误。但即使所有 16 位都不正确;它将计为 1 个错误(不是 16 个)。
可以纠正的最大错误和擦除数应遵循以下不等式:2*num_errors + num_erasures < fec_length
如果我在任何地方弄错了,请纠正我
const std::size_t field_descriptor = 16;
const std::size_t generator_polynomial_index = index;
const std::size_t generator_polynomial_root_count = 50;
/* Reed Solomon Code Parameters */
const std::size_t code_length = 65535;
const std::size_t fec_length = 50;
const std::size_t data_length = code_length - fec_length;
/* Instantiate Finite Field and Generator Polynomials */
const schifra::galois::field field(field_descriptor,
schifra::galois::primitive_polynomial_size14, schifra::galois::primitive_polynomial14);