我需要使用单向数据通信实现 Reed Solomon FEC,因此我们决定使用 UDP。
我读到了 Reed Solomon 的文章,我从理论上理解了它是如何工作的,但我对在实践中使用它有一些疑问。
我在某处读到它用于检测位翻转或损坏的数据包并纠正错误,但如果 UDP 数据包损坏,它会立即被操作系统丢弃,所以我什至无法尝试使用 Reed 纠正数据包所罗门。
我可以“绕过”操作系统并仍然使用损坏的数据包并使用 Reed Solomon 自行更正吗?
另外,我的另一个问题是如何处理丢失的数据包 - 如果数据包很大,如何使用 Reed Solomon 来处理丢失的数据包?我只知道如何使用它,如果每个数据包都是 1 字节长(我基本上可以从这些字节构造一个多项式并找到丢失的一个,但如果数据包更长,我怎么能处理它?)
如果数据包的大小是固定的,则可以通过使用一组数据包的列下的 RS 代码来处理它们,将一组数据包视为矩阵,这类似于某些擦除代码的实现方式。
RS 编码某些固定大小的正确符号。硬盘驱动器通常使用 12 位符号。其他应用程序使用字节(8 位符号)。