我所理解的Reed solomon 算法

在数据传输过程中难免会遇到部分数据丢失或者受到干扰而出错,因此利用算法来恢复错误的数据,reed Solomon(简称RS)便是其中的一种常用的算法。

RS算法是以牺牲带宽为代价的,编码过程中会产生一定量的冗余数据。这种增加冗余数据来获得有效数据的方法在我们日常生活中其实经常会使用。举个很简单的例子,比如我们把重要资料保存在电脑硬盘里,但是现在电脑病毒非常厉害,为了防止资料丢失,通常都会把重要数据刻录成光盘,当硬盘数据丢失的时候我们可以用光盘里的来恢复。但是光盘有时候也不保险,容易损坏,于是我们就多备份几张,刻录同样的数据,这样我们就不会担心数据丢失了。我们增加了数据的可靠性,但是另外一个方面来说,我们却增加了存储的容量,牺牲了很多光盘。从某种意义上来说,备份其实是一种增加数据可靠性的方法,但还不能算真正意义上的纠错方法。

还有一种我们比较熟悉的用在数据传输上的方法——奇偶校验。记录一组数据的“1”(或“0”)的个数,如果有奇个“1”,则最后标记一个“1”,如果有偶数个“1”则标记“0”。这样接收方根据最后一个bit就可以确定传输的数据是否出错,如果有错误就可以要求重发。这是最简单的校验方法,但是还不足以纠错。奇偶校验,如果将一组数据进行行列多次分组编码多次校验就可以具有一定能力的纠错功能,但是还是太弱,不适于现代通信的要求。数学理论不断发展,于是RS之类的算法出现了。


一个简单的整数数学算式:

Z=XY+A

这里我们进行移位得到:

Z-A=XY

可以知道 Z-A 一定可以被 Y 整除,其商是 X ,同样 Z-A 也能被 X 整除,商为 Y RS 算法也用到了这个简单原理。对于给定的一个数 Y 和商 X ,只要我们求得其余数 A ,然后构造出 Z-A ,这就完成了编码。将 Z-A 传输,接收方得到的数如果能被 X 整除,而且商也落在我们预期的范围内,那么我们就可以说这次传输没有错误。当然如果我们在整数范围内来做这样的算法也仅仅能侦察出错误来,还不能成为真正意义上的纠错。 RS 算法不同,他将所有的运算归结到有限域中,即通常说的珈罗华域。充分利用了有限域的封闭性。而且我们也不是直接求出商是多少,而是间接地解出错误发生的位置和值。有了这些信息,我们就可以实现纠错了。

转载于:https://www.cnblogs.com/med-dandelion/p/4532301.html

你可能感兴趣的:(我所理解的Reed solomon 算法)