丢包纠错码 (UDP)

2024-03-01

我不知道要寻找什么,因为我从“纠错代码”中得到的只是与您不知道错误位置的情况相关的内容。因此,这些代码比我需要的要复杂得多,而且效率低下。

在下文中,请注意位等于数据包(因为只有整个数据包可能会丢失,因此位类比非常适合)。

是否有 ECC 考虑到您已经知道的内容k-位丢失,只为您提供一种重建数据流的方法k地方?另外,ECC 添加的位应该是独立的(最好)。这样,如果数据的ECC部分发生丢包,它仍然可以重建一些原始数据(并不总是会有k个错误,大多数情况下不会有。所以ECC对自己的容错很重要添加了 ECC 位)。

在我看来,这是一个很大的区别。对于一个缺失的位,这很简单,我可以只使用一个异或位。但我不够聪明,无法将其推广到 n 位。

再说一遍,我有一个流n-位,我知道直到k位丢失了(我真的知道哪些位丢失了,并且它们丢失了,损坏是不可能的)。现在我需要一个编解码器,可以在尽可能少地添加到数据流的开销的情况下重建它们。我梦想着拥有(n+k)要纠正的位k随机位错误n位流:)。最重要的是,理想情况下,如果其中任何一个kECC 位添加到n位数据流被损坏,就像说c的位k位被损坏,那么它仍然应该能够重建(k-c)位错误在n比特流。

请注意 ofc,尽管 xD,我事先并不知道错误位置。

Example:

我能想到的一种算法是这样的。要防止错误的 n 位数据流。

令 p 为 n 的最小相对素数。然后通过 i = (p * j) mod n 迭代数据流,通过递增 j,对通过选择每个偶数 j 的位获得的子流进行异或。该子流有 n/2 个元素。迭代后,我们获得了 n/2 个元素的奇偶校验。我们可以用同样的方法得到另一半的奇偶性(取奇数j)。

这使得 2 位丢失的错误减少了 50%。

好的一面是我们现在可以任意变得更好。只需取下一个更高的相对素数并再次执行相同的操作即可。现在我们的错误率是 25%。基本上,每次添加两个额外的奇偶校验位,我们就可以将错误机会减少一半。


你需要一个erasure代码(不是错误检测代码)。错误检测由链路层和传输层负责。由于您正在尝试减少 UDP 数据包丢失,因此您已经知道哪些部分丢失了——丢失的数据包丢失了。

字节(或位)级别上不存在擦除或错误,至少不存在任何合理的可能性(至少有两个底层协议,有时是三个,每个层都有一个校验和,以确保这一点) 。你either接收完整、完整的数据报,或者你不。从来没有介于两者之间的任何事情。

柯西里德所罗门码是您可以考虑的一类算法,这些变换k一定长度的数据块k+m块,并且最多允许恢复给定的原始数据m删除。这种算法的一个特例是parity,编码和解码都是简单的异或运算,并且m=1。这正是 Raid-5 中使用的算法,在上面的评论中提到过。

一言以蔽之,你想要longhair https://github.com/catid/longhair.

作为替代方案,如果您有大量数据要传输给多方,并且您想要更花哨,则可以考虑喷泉代码。这些更复杂(因此更慢)且位效率较低,但它们允许您创建任意数量的数据包,其中any k将重建 k 长度的原始消息。如果您能够向许多都需要一大组数据但不一定同时开始下载的客户端进行多播,那么您可以节省大量带宽。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

丢包纠错码 (UDP) 的相关文章

  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 当我单击 C# 中的“取消”按钮时重定向到新页面(Web 部分)

    Cancel button tc new TableCell btnCancel new Button btnCancel Text Cancel btnCancel Click new EventHandler btnCanel Clic
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • std::bind 重载解析

    下面的代码工作正常 include
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式

随机推荐

  • 在纸上以精确尺寸打印 MATLAB 绘图

    我有一个绘图需要以精确的尺寸打印在纸上 因为它是按比例绘制的 并且可以从纸上测量一些东西 最简单 是否可能 的方法是什么 EDIT create some plot and make axis fill entire figure plot
  • 如何在 Visual C# 中制作 Windows 95 风格的按钮?

    我正在编写一个程序 我只是好奇如何放置看起来像 Windows 95 中的按钮 source aos co za http www aos co za 98 win95servertypes gif 我正在使用带有 Winforms 的 V
  • 可编码:不符合“可解码”协议

    无法弄清楚为什么我的课程不符合 Codable 请注意 就我而言 我不需要实现这些方法encode and decode public class LCLAdvantagePlusJackpotCache Codable public le
  • 遍历 javascript 承诺树

    我是 javascript 承诺的新手 并尝试解决后续问题 有一个树 其节点的结构如下 node id children node 通过调用接收一个节点 getNode id 其中 getNode 返回一个 JavaScript Promi
  • 学习 C#、ASP.NET 3.5 - 我应该按什么顺序学习/跳过什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 C 和 ASP net 有很多内容 我应该从哪里开始 我不应该关注什么 我应该先学Winform然后再学WPF吗 Webforms Silver
  • 删除 DOM 警告 PHP

    我有这个代码 strhtml file get contents 05001400300320100033100 html dochtml new DOMDocument dochtml gt loadHTML strhtml elm do
  • 使用 GSON 将 Map 转换为 JSON?

    嘿伙计们 我很好奇是否可以使用 GSON 将 Map 转换为 JSON 反之亦然 我放入的对象已经使用 GSON 从 JSON 转换为对象 我正在使用的对象如下所示 public class Locations private List
  • 使用 EntityObjects 进行 Ajax 绑定的 Telerik MVC Grid 出现循环引用异常

    我已经使用 Telerik MVC Grid 有一段时间了 这是一个很好的控件 但是 与使用网格和 Ajax 绑定到从实体框架创建和返回的对象相关的一件烦人的事情不断出现 实体对象具有循环引用 当您返回IEnumerable
  • RecyclerView 具有固定的第一行作为标题

    我想创建一个具有固定第一行的回收器视图 该视图应充当标题 另外 如何防止它与其他行元素一起滚动 不要将固定标头放入RecyclerView 包裹住RecyclerView in a vertical LinearLayout 其上方有固定标
  • 是否“self.propery = [[SomeClass alloc] init];”内存泄漏?

    用 Objective C 编写安全吗 self propery SomeClass alloc init 代替 SomeClass tmp SomeClass alloc init self property tmp tmp releas
  • TortoiseSVN 无法打开 ra_local 会话到 URL win XP

    我试图在 Windows XP 机器上通过 svnTortoise 使用 svn 只有我 只是想在家里做这件事 我在我的笔记本电脑上安装了乌龟 一切都很好 然后我来到我的桌面并安装了svnTortoise并尝试了它 但这次我得到了这些错误
  • 在 RabbitMQ 主题交换中路由与模式不匹配的消息

    两个队列绑定到具有以下路由键的主题交换 队列 A 与路由键模式匹配绑定 foo队列 B 与路由键模式匹配绑定 bar 我想向此交换添加第三个队列 该队列接收的消息都不是foo消息也不bar消息 如果我用一个绑定这个队列 路由密钥 我自然会得
  • Airflow - 跳过未来的任务实例而不更改 dag 文件

    我有一个 DAG abc 计划在每天上午 7 点 美国中部标准时间 运行 并且该 DAG 中有任务 xyz 由于某种原因 我不想为明天的实例运行任务 xyz 之一 如何跳过该特定任务实例 我不想对代码进行任何更改 因为我无权访问 Prod
  • 未加载用于在 Visual Studio 2012 中调试自定义项目的符号文件

    我在 Visual Studio 2012 中有一个大型解决方案 其中包含可执行文件和类库项目 调试应用程序时 不会命中某一特定类库项目中的断点 我看了看调试 gt 窗口 gt 模块窗口检查该项目的符号状态 它说 找不到或打开 PDB 文件
  • 我是否需要对使用 NewIntArray 创建的数组调用 ReleaseIntArrayElements?

    我有一个本机方法可以对位图进行一些工作 在该方法内部 我通过方法调用获取图像数据 该方法调用将数据写入jintArray我用它创建的参数NewIntArray jintArray pixels env gt NewIntArray widt
  • Grafana 条形宽度太小

    我想知道如何在直方图中获得更大的条形宽度 例如条形图 This is the graph how it looks rigth now And this is the corresponding query in flux 在 Grafan
  • Ninject.Web.PageBase 仍然导致对注入依赖项的空引用

    我有一个使用 Ninject 2 0 的 ASP NET 3 5 WebForms 应用程序 但是 尝试使用 Ninject Web 扩展来提供对 System Web UI Page 的注入 即使我切换到使用服务定位器来提供引用 使用 N
  • H2索引名称唯一性

    我对 h2 数据库中索引名称的唯一性有一个小问题 使用 mysql mariadb 可以同时为表 A 和表 B 定义名为 X 的索引 对于 h2 数据库这是不可能的 因为每个数据库的索引名称应该是唯一的 这对我来说是一个问题 因为我有一个基
  • 如何安排本地 Azure DevOps 构建每 5 分钟运行一次?

    不用管理由 我有一个案例 需要每 5 分钟运行一次构建 本地安装不支持 YAML 中的计划 那么 我们该怎么做呢 我可能可以使用 REST Api 但这很糟糕 因为我似乎要么创建一个一次性脚本 要么创建一个用于非常简单类型的计划的脚本 似乎
  • 丢包纠错码 (UDP)

    我不知道要寻找什么 因为我从 纠错代码 中得到的只是与您不知道错误位置的情况相关的内容 因此 这些代码比我需要的要复杂得多 而且效率低下 在下文中 请注意位等于数据包 因为只有整个数据包可能会丢失 因此位类比非常适合 是否有 ECC 考虑到