关于里德-所罗门码Reed-Solomon算法,有牛人吗?求解释

kiss2 2016-09-14 03:05:41
I mentioned above that Reed-Solomon messages can be XOR'ed: if we have two different Reed-Solomon encoded blocks b1 and b2 corresponding to messages m1 and m2, b1 ⊕ b2 is also a Reed-Solomon encoded block; it corresponds to the message m1 ⊕ m2. (In the notation of the previous post, this happens because Reed-Solomon blocks correspond 1:1 with multiples of g(x). Since b1 and b2 are multiples of g(x), their sum is a multiple of g(x) too.) This property means that we can build up a valid Reed-Solomon block from other Reed-Solomon blocks. In particular, we can construct the sequence of blocks b0, b1, b2, ..., where bi is the block whose data bits are all zeros except for bit i and whose error correction bits are then set to correspond to a valid Reed-Solomon block. That set is a basis for the entire vector space of valid Reed-Solomon blocks. Here is the basis matrix for the space of blocks with 2 data bytes and 2 checksum bytes:




(没有填写的部分都代表比特位为0。灰色部分就是我们可以自己完全控制的比特部分,白色部分则是尾随后面的纠错冗余码。由上面的异或特性我们知道,我们可以将编完码的结果和上面的这组基进行异或,而不改变其他的控制位,并且保持冗余码的更新。)

Q:这里没有填写的部分、灰色部分、白色部分分别是指哪部分?将所罗门编码分散算法又是怎么实现的?

The missing entries are zeros. The gray columns highlight the pixels we have complete control over: there is only one row with a 1 for each of those pixels. Each time we want to change such a pixel, we can XOR our current data with its row to change that pixel, not change any of the other controlled pixels, and keep the error correction bits up to date.

So what, you say. We're still just twiddling data bits. The canvas is the same.

But wait, there's more! The basis we had above lets us change individual data pixels, but we can XOR rows together to create other basis matrices that trade data bits for error correction bits. No matter what, we're not going to increase our flexibility—the number of pixels we have direct control over cannot increase—but we can redistribute that flexibility throughout the image, at the same time smearing the uncooperative noise pixels evenly all over the canvas. This is the same procedure as Gauss-Jordan elimination, the way you turn a matrix into row-reduced echelon form.

This matrix shows the result of trying to assert control over alternating pixels (the gray columns):




The matrix illustrates an important point about this trick: it's not completely general. The data bits are linearly independent, but there are dependencies between the error correction bits that mean we often can't have every pixel we ask for. In this example, the last four pixels we tried to get were unavailable: our manipulations of the rows to isolate the first four error correction bits zeroed out the last four that we wanted.

In practice, a good approach is to create a list of all the pixels in the Reed-Solomon block sorted by how useful it would be to be able to set that pixel. (Pixels from high-contrast regions of the image are less important than pixels from low-contrast regions.) Then, we can consider each pixel in turn, and if the basis matrix allows it, isolate that pixel. If not, no big deal, we move on to the next pixel.



上面的说的所罗门码可以被XOR,是不是这样理解,
data1=数据1,ecc1=所罗门编码1
data2=数据2,ecc2=所罗门编码2

data1 xor data2等于ecc1 xor ecc2,是这样吗?
然后他上面说是将所罗门编码分散,又是怎么算法,看的不是很明白?

...全文
1078 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2016-09-14
  • 打赏
  • 举报
回复
算法需要静下心反复体会的...
赵4老师 2016-09-14
  • 打赏
  • 举报
回复
kiss2 2016-09-14
  • 打赏
  • 举报
回复
The missing entries are zeros. The gray columns highlight the pixels we have complete control over: there is only one row with a 1 for each of those pixels. Each time we want to change such a pixel, we can XOR our current data with its row to change that pixel, not change any of the other controlled pixels, and keep the error correction bits up to date. 特别是这句we can XOR our current data with its row to change that pixel, not change any of the other controlled pixels, and keep the error correction bits up to date,是什么意思?我们可以将当前数据和当前行进行XOR吗?第一幅图左边的黑色1和右边的灰色1分别是什么?
winrar 64位 破解版,最新v5.00 烈火简体中文版,此版是64bit破解版,安装完后直接注册成功 5.00新版本的winrar比起上一版本软件性能有了非常大的提升,压缩文件的加压速度平均提高了30%,同时更贴近win7系统,在windows7系统的任务栏中就能查看压缩解压进度。 WinRAR 特性: 完全支持 RAR 和 ZIP 2.0 压缩文件; 高度成熟的原创压缩算法; 对于文本、声音、图像和 32-位和 64-位 Intel 可执行程序压缩的特殊优化算法; 外壳界面 包括 拖放 和 向导; 命令行界面 ; 非 RAR 压缩文件 (7Z、ACE、ARJ、BZ2 、CAB、GZ、ISO、JAR、LZH、TAR、 UUE、Z) 管理; 固实 压缩,比常规方法更能够提升压缩率 10% - 50%,尤其是在压缩大量的小文件,类似的文件时; 多卷压缩文件 ; 使用默认的或是选择的自解压模块创建 自解压 文件 (也可用于分卷); 恢复 物理受损的压缩文件; 恢复卷 允许重建多卷压缩丢失的卷。 支持 Unicode 文件名; 其它服务性的功能,例如 文件加密、 压缩文件注释 、错误日志等。 经过长达数月的测试,WinRAR 5.0终于发布了正式版。WinRAR 5.0采用了全新的压缩格式,算法也有较大变化,优化了性能和细节。 WinRAR 5.0主要新变化: 1.新的RAR 5.0压缩文件格式。你可以在压缩对话框中使用"RAR 5.0"选项或命令行中使用-ma开关创建RAR 5.0压缩文件。 2. RAR 5.0压缩算法的改变: a) 64位WinRAR中最大的压缩字典增加到1GB。32位WinRAR版本创建压缩文件时可以使用256MB的字典。32位和64位版本都可以解压任何字典大小的压缩文件,包括1GB的; b) RAR 5.0的默认字典大小是32MB,结果就是比RAR 4.x的4MB更高的压缩率和较慢的速度。你可以在压缩对话框选择中使用“字典大小”选项或-md开关修改此值; 3. RAR 5.0压缩文件格式的改变: a)文件时间存储为协调世界时(UTC),替代以前的本地时间,这让文件在不同的时区内的交流更直观; b)文件名和压缩文件注释使用UTF-8编。 4. RAR 5.0恢复记录基于里德-所罗门( Reed-Solomon )错误纠正。 5. "测试"命令验证RAR 5.0恢复记录的有效性。 6. RAR 5.0加密算法的改变。 7. RAR 5.0压缩文件可以使用256位的BLAKE2sp哈希代替32位的CRC32作为文件校验和。 8.删除的功能: a)身份验证功能的可靠性达不到所需的级别,功能被移除; b) RAR 5.0压缩文件由于总是添加压缩文件结束块,所以不支持开关-en(不添加“压缩文件结束”块)。 9. "设置密"命令和"字典大小"选项被移动到压缩对话框的“常规”页面。 10.你可以在压缩对话框的“高级”对话框中使用“把符号链接保存为链接”来保存并恢复NTFS符号链接和分析点为链接,它们的内容没有被压缩。 11.添加对XZ压缩文件格式的解压支持。 12. RAR 5.0压缩文件格式中恢复卷处理的更改。 13. RAR和ZIP压缩文件中的最大路径长度增加到2048个字符。 14.如果命令行RAR检测到用户输入了错误的密,它会返回退出11。 15. 'v'和'l'命令在行的末尾显示压缩的文件名,不是和以前一样显示在前面。 16.现在WinRAR和控制台RAR中类似于'rar a arcname @filelist'命令中的文件列表的默认字符集为ANSI。 17. WinRAR内部查看器能检测并显示UTF-8和UTF-16小端字节序编的文件。 18. UTF-16小端字节序编被用于RAR和WinRAR日志文件rar.log中,所以Unicode文件名能在日志文件中正确存储。 19.命令行'r' (修复)命令可以有一个附加的目标路径\参数来定义修复好的压缩文件的目标文件夹。

64,632

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧