您可以使用哪些技术在有损单向通道上编码数据?

时间:2009-08-05 06:20:32

标签: networking communication

想象一下,你有一个沟通渠道固有的有损和单向。也就是说,存在一些不可能消除的固有噪声,例如,随机位被切换。还想象它是一种方式 - 你不能请求重传。

但是你需要通过它发送数据。您可以使用哪些技术在该频道上发送数字文字

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

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

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

9 个答案:

答案 0 :(得分:9)

根据您未提供有关有损频道的一些细节,我建议您首先使用Gray code确保单位错误导致较小的差异(以满足您对减少损失的需求)有损传输),然后可能还用一些“无损”(== 尝试是无损;-)编码对结果流进行编码。

Reed-Solomon及其变体特别好,如果您的噪声事件容易发生在小突发(例如,单个字节内的几个比特错误),这应该与格雷编码很好地互操作(因为多比特)错误是Gray的“损失缓解”方面的杀手,旨在优雅地降低线路上的单比特错误。那是因为R-S本质上是一个块方案,从R-S的角度来看,一个块内的多个错误与其中的单个错误基本相同; - )。

如果许多错误都是erasures,那么RS特别棒! - 简而言之,擦除是一个很可能在传输过程中被破坏的符号,但是你知道它的关键事实遭到了破坏。物理层,取决于它的设计方式,通常可以提供有关该事实的提示,如果有一种方法可以告知更高层,那么这可能是至关重要的帮助。让我解释一下擦除......:

假设一个简化的例子,一个0被发送为-1伏的水平,一个1被发送为+1伏的水平(某些参考波),但是有噪声(物理噪声通常可以很好)建模,问任何有能力的通信工程师;-);取决于噪声模型,解码可能是任何-0.7 V和向下被认为是0位,任何+0.7 V及以上被认为是1位,中间的任何东西被认为是擦除,即,更高层被告知该位有可能在传输中被破坏,因此应予以忽视。 (我有时会把这个作为我的论文的一个例子,有时候抽象应该“泄漏” - 以一种受控和架构的方式:马尔泰利推论Spolsky的Law of Leaky Abstractions! - 。)。

具有任何给定冗余比的RS代码在纠正擦除(解码器被告知的错误)方面的效率大约是其两倍,因为它可以纠正其他方面未知的错误 - 也可以混合两个方面,纠正两者一些擦除和一些其他未知的错误。

作为樱桃的顶部,可以(合理地)轻松地设计和定制自定义RS代码,以便将未校正误差的概率降低到任何所需阈值θ以下,同时给出物理通道在擦除和未检测到的特征方面的精确模型错误(包括概率和突发性)。

我不会把整个领域称为“计算机技术”,实际上:当我毕业时(MSEE,30年前),我大多试图避免“CS”的东西支持芯片设计,系统设计,先进的无线电系统,& c - 但我教过这些东西(好吧,已经在实际工程领域使用的子集;-)非常好。

而且,只是为了确认事情在一代人中没有发生太大变化:我的女儿刚刚获得电信工程硕士学位(严格关注先进的无线电系统) - 她无法设计任何严肃的程序,算法或数据结构(尽管她在C和Java的强制性课程中做得很好,这些课程中没有CS深度,也没有其他课程 - 她的日常工作语言是 matlab ......! - ) - 然而她对信息和编码理论的了解比我以前学到的更多,而且之前任何博士水平的学习(她都留在博士学位,但还没有开始)。

所以,我声称这些领域比CS-y更具EE-y(当然边界总是模糊不清的 - 见证了这样一个事实,即在设计芯片几年之后,我最终成了一个或多或少的SW人意外,我的同时代人也是如此; - )。

答案 1 :(得分:4)

这个问题是coding theory的主题。

答案 2 :(得分:3)

可能一种比较有名的方法是使用Hamming code。它可能不是纠正大规模错误的最佳方法,但它的理解非常简单。

答案 3 :(得分:2)

答案 4 :(得分:2)

对于一般数据,Turbo CodesLow-density parity-checking codes,因为它们最接近香农限制 - 请参阅维基百科。

答案 5 :(得分:1)

您可以使用Reed-Solomon代码。

答案 6 :(得分:1)

另请参阅Sliding Window Protocol(由TCP使用)。

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

答案 7 :(得分:1)

正如Alex Martelli所说,世界上有很多编码理论,但Reed-Solomon代码绝对是一个甜蜜点。如果您确实想要构建某些内容,Jim Plank已写入nice tutorial on Reed-Solomon coding。 Plank拥有专业的编码兴趣,并拥有大量的实用专业知识来支持它。

答案 8 :(得分:0)

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