C++ 里德-所罗门纠错码Schifra库中生成器多项式索引的理想值是多少?
我正在尝试在项目中使用。我没有关于Reed Solomon代码和Galois field如何工作的背景。我很难计算16位符号(字段描述符)的生成器多项式索引的理想值 我的代码适用于索引0和许多其他文件。我已经尝试了索引的所有值。该代码适用于很多情况(精确地说是0-32724和32779-65485),但 问题C++ 里德-所罗门纠错码Schifra库中生成器多项式索引的理想值是多少?,c++,error-correction,reed-solomon,C++,Error Correction,Reed Solomon,我正在尝试在项目中使用。我没有关于Reed Solomon代码和Galois field如何工作的背景。我很难计算16位符号(字段描述符)的生成器多项式索引的理想值 我的代码适用于索引0和许多其他文件。我已经尝试了索引的所有值。该代码适用于很多情况(精确地说是0-32724和32779-65485),但 问题 最理想的价值是什么 如果我切换到另一个索引值(该值也可以工作,但并不理想),会发生什么变化 我的其他发现: 字段\描述符=符号大小(位/符号) 代码长度(符号总数(数据符号+纠错代码符号
- 字段\描述符=符号大小(位/符号)
- 代码长度(符号总数(数据符号+纠错代码符号))=2^符号大小-1(库仅支持此代码长度值)
- 生成器\u多项式\u根\u计数=fec\u长度(冗余或纠错符号数)
- 错误以符号而非位来测量,即特定符号中的1个不正确位计为1个错误。但即使所有16位都不正确;它将计为1个错误(不是16个)
- 可纠正的最大错误数和擦除数应符合以下不等式:2*num_错误+num_擦除数
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);
生成器多项式指数的理想值是多少
可能没有“理想”值
我必须查看github代码以确定生成器字段索引是生成器多项式的第一个连续根的日志
通常索引为0(第一个连续根==1)或1(第一个连续根==Alpha(字段原语))。选择index=1用于“狭义”代码。它稍微简化了Forney算法。链接到wiki文章,其中“c”表示第一个连续根的日志(它将根列为a^c,a^(c+1),…):
为什么要使用狭义代码:
对于硬件,可以通过使用自倒数生成器多项式来减少唯一系数的数量,其中选择第一个连续根,以便生成器多项式的形式为:1x^n+ax^(n-1)+bx2^(n-2)+……+b x^2+a x+1。对于GF(2^16)中的32个根,第一个连续根是alpha^((65536-32)/2)=alpha^32752,最后一个连续根是alpha^32783。注意,这仅适用于二进制字段GF(2^n),而不适用于非二进制字段,如GF(929)(929是素数)。这个问题显示了一个不包括32752的索引范围;如果32752不适用于此库,则是由于库中的某些限制,而不是使用Reed-Solomon纠错算法
除了这3种情况,index=0、1或自倒数生成器多项式,我不知道有什么理由选择不同的索引。索引的选择不太可能对尝试解码超出正常限制产生任何影响
可纠正的最大错误数和擦除数应符合以下不等式:2*num_错误+num_擦除数
2*num_errors + num_erasures <= fec_length
2*num\u错误+num\u擦除