Repetition coding over a slotted radio channel without collision detection

A minimal version would be:

  1. Divide time periods of L slots.
  2. For each message, transmit message in r random slots for over one or several periods
  3. In every slot where a party is not transmitting, it listens.
  4. A packet received successfully is accepted once; duplicate are ignored.

The packet should contain a random message identifier:

(message_id, payload)

The identifier is important because the receiver may successfully receive several copies of the same transmission.

What happens

For each copy:

The sender does not know which copies succeeded, so it always sends all r copies. There is no need for an acknowledgement.

Choosing the parameters

It helps to use two separate parameters:

Number of periods to use to transmit a message may be dependent on current slot usage (i.e. number of received messages) e.g. to keep slot usage at a suitable level. When received messages in a period increase sent messages are spread out over higher number of periods until maximum period is reached where transmit messages has to be dropped.

A receiver should deliver a given message_id only once, even if it receives multiple repetitions.

The main limitation remains that silence is ambiguous. A party cannot tell whether no one transmitted, several parties collided, or the intended transmitter was simply missed. But for a simple anonymous, probabilistic communication system, randomized repetition plus listening in all non-transmission slots is a sensible starting protocol.

Mesh extension would need

An rule is

  1. If message is new and hop nbr is below limit, increase hop nbr and add it to send queue