根据您未提供的有关有损信道的一些详细信息,我建议首先使用格雷码以确保单位错误会导致小的差异(以满足您在有损传输中减轻损失的愿望),然后可能还使用一些“无损”(==尝试无损;-)编码对结果流进行编码。
Reed-Solomon及其变体特别好,如果您的噪声事件容易以小突发形式发生(例如,单个字节内的几个位错误),它应该与格雷编码很好地互操作(因为多位错误是Gray 的“损失缓解”方面,旨在优雅地降低线路上的单位错误)。这是因为 RS 本质上是一种块方案,从 RS 的角度来看,一个块中的多个错误基本上与其中的单个错误相同;-)。
如果许多错误都是擦除,则 RS 特别棒——简单地说,擦除是一个很可能在传输中被破坏的符号,但你确实知道它已经被破坏的关键事实。物理层,取决于它的设计方式,通常可以暗示这一事实,如果有办法让它通知更高层,那将是至关重要的帮助。让我解释一下擦除...:
举个简单的例子,0 以 -1 伏特的电平发送,1 以 +1 伏特的电平发送(参考一些参考波),但是有噪声(物理噪声通常可以很好地建模,问任何称职的通信工程师;-);根据噪声模型,解码可能是任何 -0.7 V 及以下都被认为是 0 位,任何 +0.7 V 及以上都被认为是 1 位,介于两者之间的任何东西都被认为是擦除,即告诉更高层有问题的位可能在传输中被破坏,因此应该被忽略。(我有时将此作为我的论文的一个例子,即有时抽象应该“泄漏”——以一种受控和结构化的方式:Martelli 对 Spolsky 的泄漏抽象定律的推论!-)。
具有任何给定冗余率的 RS 码在纠正擦除(解码器被告知的错误)方面的效率大约是纠正其他未知错误的两倍——也可以混合这两个方面,纠正一些擦除和一些其他未知的错误。
最重要的是,可以(相当容易地)设计和定制定制 RS 代码,以将未纠正错误的概率降低到任何所需阈值 θ 以下,给定物理信道特性的精确模型,包括擦除和未检测到的错误(包括概率和突发性)。
实际上,我不会将这整个领域称为“计算机科学”:当我毕业时(MSEE,30 年前),我主要是试图避免“CS”的东西,转而支持芯片设计、系统设计、高级无线电系统等——但我被教得很好(嗯,已经在实际工程使用范围内的子集;-)很好。
而且,只是为了确认事情在一代人中没有太大变化:我的女儿刚刚获得了电信工程的硕士学位(严格专注于先进的无线电系统)——她几乎不能设计任何严肃的程序、算法,或数据结构(尽管她在 C 和 Java 的必修课程中表现得很好,但在这些课程中绝对没有 CS 深度,在她的其他课程中也没有——她的日常工作语言是matlab ......!-)——然而她对信息和编码理论的了解比我以往任何时候都多,而且那是在任何博士水平研究之前(她正在攻读博士学位,但还没有开始)。
所以,我声称这些领域比 CS-y 更 EE-y(当然界限是模糊的——见证一个事实,在几年设计芯片后,我或多或少偶然地最终成为了一名 SW 人,并且我的许多同时代人也是如此;-)。