如何避免无线通信中的干扰?

电器工程 无线的 干涉
2022-01-10 07:45:28

我正在研究无线通信系统。我们使用了大约 10 对发射器和接收器。我们使用 atmega16 微控制器通过 USART 端口进行编码和解码。

现在我们可以在接收端发送和接收数据,但是有一个主要问题,当我们发现 2 个发送器数据同时到来时。由于干扰,接收器无法接收。

假设一个发送器发送“SENDA”,同时另一个发送器发送“GETTS”,此时接收器无法接收到正确的数据。由于所有的发射器和接收器都工作在同一个频率上,所以这种干扰正在发生。我该如何解决这个问题?

4个回答

开发可行的射频通信协议往往是一项棘手但具有教育意义的工作。除了已经说过的内容之外,还有几点需要考虑:

  1. 在某些无线电硬件上,收听信号需要很大的功率。对于许多(即使不是大多数)小型无线电,收听一秒钟将比传输一毫秒花费更多的能量;在某些收音机上,听一毫秒可能比传输一毫秒需要更多的能量。如果电流消耗不是问题,连续收听间歇收听简单得多;但是,如果电流消耗是一个问题,则可能需要间歇性地收听。在您设法使用连续侦听协议进行某些事情之前,这可能不是一个好主意。
  2. Listen-before-transmit 可能是“礼貌的”,但它对 RF 的用处远不及以太网电缆等。以太网信令的设计不仅使在传输之前侦听的设备通常可以避免冲突,而且还设计为实际上保证了传输与另一个设备的传输发生冲突的设备会注意到。射频传输不提供这样的承诺。完全有可能当 P 想要向 Q 传输时,其他一些与 Q 比到 P 更近的设备 X 将传输足够大的声音以防止 Q 听到 P 的传输,但又不足以让 P 注意到。P 知道 Q 可能没有收到他的传输的唯一方法是 P 不会听到 Q 的响应。
  3. 重要的是要注意共识问题——RF 比有线信号更重要。如果 P 向 Q 发送消息,Q 可能会听到 P 的传输并发送确认,但由于各种原因,P 不会听到该确认。因此,有必要非常小心地将重传与“新”传输区分开来。

    如果一个人试图通过在不需要接收器时关闭接收器来节省能量,那么共识问题可能会特别令人烦恼。假设两个 P 和 Q 应该每 10 秒通信一次,所以它们通电并且 P 向 Q 发送一个数据包。Q 收到数据包,发送他的确认,然后——知道 P 在将近 10 秒内不会发送任何内容,然后关闭电源。如果 P 没有得到 Q 的确认,他会重传;然而,由于 Q 睡着了,他不会听到 P 的重传。从 Q 的角度来看,这无关紧要(他已经收到了他的数据),但这意味着无论 P 重试多少次,他都无法知道 Q 得到了他的数据包(至少直到下一次约十秒)。

  4. 完全有可能出现这样一种情况,即节点 Q 将能够接收来自 P 的传输,但 P 将无法接收来自 Q 的传输。在这种情况下可能无法进行有用的通信,但至少应该努力避免做任何令人讨厌的事情(比如让 P 每秒无休止地重试传输数百次重试)

如前所述,可行的射频通信协议往往是一项棘手的工作。不过,我希望您可能会从经验中学到很多东西。

如果您没有为此使用标准协议,那么您将不得不设计和实现一个,例如一个简单的示例:

  • 在传输之前,节点应该监听以检查通道是否空闲
  • 如果在发送消息后没有收到确认,节点应该等待一个随机的时间段,然后再试一次,达到最大重试次数

所以发生的情况是,您首先尝试通过先收听来避免“干扰”,然后如果仍然发生干扰,您会通过接收节点缺乏确认来检测到这一点,然后在随机延迟后重试 - 两个干扰发射器将使用不同的随机延迟,最大限度地减少第二次碰撞的机会。

这里有两个常见的选项

1) 实施先听后说 (LBT) 算法,该算法在开始自己的传输之前检查是否正在进行传输,如果是,则回退一段时间。周期应该包含一个固定长度和一个随机长度,这样它们就不会在同一周期内全部后退。许多标准无线电协议都包含此程序,请参阅 ETSI EN 300-220-1。

2) 实施一个信标系统,其中传输从信标开始计时。每个发射器都有自己的时隙。您通常会使用设备中的序列号来确定它们的插槽,并有一个系统来确定谁发送信标。由于这依赖于具有不同插槽的所有发射器,因此让用户唯一标识所有发射器并不是一个好主意,除非您对此有可靠的程序。

正如我从评论等中了解到的那样,电源不是问题,但通信速度是问题。所以,这是我对协议的建议。

给所有节点编号,0..n-1。让每个节点知道它是哪个数字。节点 0 将成为主节点。

每 15 毫秒,节点 0 发送一条消息:“0HELO”。
1ms 后,节点 1 发送一条消息:“1DATA”。
1ms 后,节点 2 发送一条消息:“2NICE”。
1ms 后,节点 3 发送一条消息:“3”。(本节点无话可说)
1ms 后,节点 4 发送消息:“2CATS”。
...
1 毫秒后,节点 9 发送一条消息:“9MICE”。
然后有5ms的停顿。

节点总是在它们正确的时隙中发送它们的消息,即使它们无话可说。这样您就可以保证 66Hz 的通信速率,没有冲突。