我继承了一个PHP项目,它可以真正,真正受益于一种前向纠错形式,因为它涉及(可能)用户输入一个无限可变长度的base64编码字符串。该字符串目前被分成6个字符的组,以便于人们在处理之前将其转换回来,但是由于将人类引入等式中,错误可以并且仍然会发生。
短字符串或那些复制粘贴的字符串通常都可以。手动类型冗长的异常值是可以看到真正好处的地方。
我已经确定Reed Solomon是最有可能实现这一目标的候选人(但我很高兴能够指出那些具有更多实践经验的人更合适的FEC)。
有没有人知道我可以在这个PHP应用程序中使用的开源RS编码器和解码器?我找到了几个我可以从QRCode库中解决的编码器,但解码器似乎是神话般的。我当然可以选择多个C实现并重新编写它们(我是程序员而不是数学专家,因此从头开始写一个可能超出我的意思)。
目前的数据看起来像这样(仅代表,可能无效的base64!):
fD48Sa 483CDf 18ACDx UYh5jS PQXNT
我要么在分割后对每个块应用RS编码(延长每个块,我接受并且从项目的角度来看是可接受的),或者在字符串被拆分之前应用它从我对RS的理解然而,这将是更复杂的选项,因为字符串不是固定长度。
在提出FEC理念的'eureka'时刻之后我希望能够找到的东西可以让我这样做:
// messy encode pseudocode for demonstration purposes
$data = "Once upon a time in a land far far away";
$encoded = base64_encode($data);
$split = chunk_split($encoded, 6, ' ');
foreach($split as $chunk) {
$rsEncoded .= rsEncode($chunk) . " ";
}
然后在输入时使用类似的rsDecode()。
任何提示赞赏...
答案 0 :(得分:0)
我可能误解了你的问题,但它听起来并不是一个很好的用于前向纠错的用例。
当编码发生时已知消息正确时,前向纠错非常有用。在解码过程中可以克服此点之后引入的错误。但是,从您正在描述的工作流程中,听起来好像您想要在用户输入后对进行编码,这对于检测到其转录中的任何错误来说已经太迟了。
您可能实际上正在描述接收Reed Solomon代码块,让用户输入其数据,并使用来自接收到的代码块的检查符号来分析其数据。如果输入数据和接收到的代码块之间不同的符号数小于RS代码的Singleton界限,这确实可以让您纠正'用户对您首先收到的消息的输入。不过,我不确定为什么这会有用。
那就是说,我认为在PHP中使用PHP启动RS并运行的最简单方法是call a Python implementation。
Wikiversity有一个记录良好的Python编码器/解码器here,以及同一实现here的进一步通用版本。我最近在编写自己的C ++实现时发现这些资源都非常有用。