首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于向快速CPU发送的慢CPU的纠错码

用于向快速CPU发送的慢CPU的纠错码
EN

Stack Overflow用户
提问于 2009-12-09 20:02:07
回答 3查看 1.2K关注 0票数 9

我正在寻找一个前向纠错代码,这是相对容易/快速的编码在一个微控制器;解码将在PC上完成,因此它可以更复杂。

我对纠错码不太了解,除了简单的汉明码外,它们似乎都比我能处理的复杂得多。

有什么建议吗?

编辑:我要把事情说得简短些,接受卡尔的回答.我想有两件事我没提过:

(1)我不需要严格的纠错,它只是对我有利,我认为可能有一些错误纠正算法,这是一个合理的好处,以最小的成本。Hamming代码可能是合适的,即使它们看起来对我的编码应用程序来说也太昂贵了。

(2)与纠错本身相比,更大的优点是能够正确地将错误后的数据包重新同步。(如果我在很长一段时间里失去了同步,那就不好了)所以我认为保持简单会更好。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-09 20:11:38

纠错码的问题是,它们会让你从一位或两位错误中恢复过来,但通常不会发现或修补主要的损坏。

因此,我的建议是将数据流分成块(1KB、10 KB、……1MB),并计算每个块的校验和。然后,当数据到达另一个CPU时,您可以确定它是否正确,如果不正确,则请求重新传输该块。因此,接收计算机要么确认并等待下一个块,要么拒绝确认并期待重新发送。

是的,我们正在这里实现TCP/IP的子集。但是这个协议之所以如此成功是有原因的:它是有效的!

作为校验和,我建议CRC-32。它需要一个表格(我认为) 256位32位数字和一些相当容易的计算(数组索引,或和异或,大部分),所以它是相当容易的“哑”CPU计算。

票数 3
EN

Stack Overflow用户

发布于 2009-12-10 06:13:33

我还没搞清楚你能负担多少开销。在您的评论中,您说一个16位的错误检测/校正代码是正确的,但是您没有指定要将它附加到多大的块上。要有意义,您可能应该将允许的开销表示为百分比。64位数据的16位纠错与一千字节数据的16位错误校正有很大的不同。

如果您可以负担15-20%的开销,您可能可以使用卷积码和Viterbi解码器。这是高度不对称的-卷积编码器是相当简单的(基本上是一个移位寄存器,输出抽头导致异或的)。一个非常大的寄存器可能使用一个16位寄存器和大约六个异或。

幸运的是,你有一台任务更重的计算机来处理解码,因为维特比解码器可能是一个可怕的野兽。特别是当您使用更大的编码器来减少开销时,解码器的大小就会爆炸。解码器的大小相对于代码组的大小是指数的。

提到了Turbo码。它们可以更好地利用可用带宽,而不是使用Viterbi译码器的卷积码--但它们使用的编码器要复杂得多--至少有两个特定类型的卷积编码器(递归系统卷积编码器)。因此,它们似乎也不符合您的规范。

票数 4
EN

Stack Overflow用户

发布于 2013-01-07 23:07:55

我建议使用一种基于数据包的前向纠错形式。如果您必须发送6个等长的数据包,那么将每个数据包发送到足够的信息,以标识为“包1/ 6”、"2 of 6“等,同时再发送一个数据包,其第一个有效负载字节是数据包1-6的第一个有效载荷字节的xor,其第二个有效负载字节是数据包1-6的第二个字节的xor。接收七个数据包中任何六个数据包的代码将能够重建丢失的数据包。作为一种轻微的增强,使用一个“奇偶”包来表示“偶数”包,另一个用于“奇数”包。如果这样做,系统将能够从不超过数据包的任何突发错误中恢复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1876451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档