我有许多微控制器可以通过广播媒体进行通信(在本例中为IR)。每个节点都希望定期向所有其他节点公布其存在,但由于它是广播媒体,同时发送的两个节点将产生冲突,并且两条消息都不会正确传输。
为了使事情进一步复杂化,当节点收到无效消息时,可靠地确定这是由于碰撞还是由于背景噪声或弱信号而不可行。此外,虽然节点可见性通常是自反的(看到B意味着B可以看到A),但通常情况是并非所有节点都可以看到所有其他节点。
暂时不考虑外部干扰,似乎合理的方法是创建时隙,每个节点在每个时隙中传输一个小的(并且在节点之间理想相似)概率。如果有n个节点以概率p进行传输,则不会传输任何消息(1-p) n ;正好一条消息将被传输n * p *(1 - p) n-1 的时间,剩余的时间将发生冲突。当n个节点中的每个节点发送1 / n次时,发生成功冲突的最大发生率,这导致相当稳定的38%成功传输和24%冲突;随着节点数量的增加,这个值只会略有变化。
鉴于此,似乎我们可以观察到成功传输和/或碰撞的速度,并调整我们自己的传输速率以试图强制它们达到预期值。我不确定的是,实现这一目标的最佳反馈机制是,每个人都有类似的概率。这也没有考虑外部干扰,这将导致我们在注定的努力中不断降低传输速率,以避免不存在的冲突。
什么是最优算法 - 要么是对上述方法的改进,要么是完全不同的方法 - 最大化每个节点在没有冲突的情况下可以接收的公告消息的比例?
答案 0 :(得分:1)
你想要的实际上是一个无线网状网络,它本身就是一个完整的研究领域。除此之外,确认消息是一个好主意。如果数据包开销是一个问题,您可以使用公告本身捎带它们。它们允许通过观察有多少邻居应答来区分冲突和背景噪声,并通过等待(大多数)邻居确认每次传输(停止走走)来允许基本速率限制。如果控制器非常灵活,这当然会变得更加复杂。
在整个网络上保持相同的更新速率将是非常困难的(并且可能不是可取的),因为传输质量在不同的区域和时间点可能会有很大差异。