5

想象一下,您有一个固有的有损且单向的通信渠道。也就是说,有一些无法消除的固有噪声会导致随机比特被切换。还可以想象这是一种方式 - 您不能请求重新传输。

但是无论如何,您都需要通过它发送数据。您可以使用哪些技术通过该通道发送数字文本?

  1. 是否可以对数字进行编码,以便即使使用随机位旋转它们仍然可以被解释为接近原始值(有损传输)?

  2. 有没有办法以无损方式发送一串字符(比如ASCII)?

这只是为了好玩。我知道您可以使用摩尔斯电码或任何非常低频的二进制通信。我知道奇偶校验位和校验和来检测错误和重试。我知道您不妨使用模拟信号。我只是好奇是否有任何有趣的计算机科学技术可以通过有损通道发送这些东西。

4

9 回答 9

9

根据您未提供的有关有损信道的一些详细信息,我建议首先使用格雷码以确保单位错误会导致小的差异(以满足您在有损传输中减轻损失的愿望),然后可能还使用一些“无损”(==尝试无损;-)编码对结果流进行编码。

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 人,并且我的许多同时代人也是如此;-)。

于 2009-08-09T17:37:08.190 回答
4

这个问题是编码理论的主题。

于 2009-08-05T08:40:29.880 回答
3

可能比较知名的方法之一是使用汉明码。这可能不是大规模纠正错误的最佳方法,但它非常容易理解。

于 2009-08-05T06:44:52.673 回答
2
于 2009-08-05T06:22:48.443 回答
2

适用于一般数据的Turbo 码低密度奇偶校验码,因为它们最接近香农极限 - 请参阅 wikipedia 。

于 2009-08-12T21:19:11.263 回答
1

正如 Alex Martelli 所说,世界上有很多编码理论,但 Reed-Solomon 码绝对是最佳选择。如果你真的想构建一些东西,Jim Plank写了一篇关于 Reed-Solomon 编码的很好的教程。Plank 对编码有着专业的兴趣,并拥有大量的实践专业知识来支持它。

于 2009-08-15T03:30:32.347 回答
1

您可以使用Reed-Solomon代码。

于 2009-08-05T06:36:46.073 回答
1

另请参阅滑动窗口协议(由 TCP 使用)。

尽管这包括处理重新排序或完全丢失的数据包,但这不是您的问题定义的一部分。

于 2009-08-05T06:43:55.123 回答
0

我会寻求其中的一些建议,然后多次发送相同的数据。因此,您可以希望在流中的不同点引入不同的错误,并且您可以更容易地推断出所需的数字。

于 2009-08-15T03:07:45.287 回答