Repetition coding over a slotted radio channel without collision detection
A minimal version would be:
- Divide time periods of L slots.
- For each message, transmit message in r random slots for over one or several periods
- In every slot where a party is not transmitting, it listens.
- 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:
- No other party transmits in that slot → the copy is received;
- Two or more parties transmit → collision, and the copy is lost;
- The receiver transmits in that slot → it cannot receive that 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:
- L: number of slots available in an epoch;
- r: number of repetitions per message.
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
- message id - to avoid sending same message twice or indefinitely
- hop nbr - to avoid same message is transmitted indefinite distance
An rule is
- If message is new and hop nbr is below limit, increase hop nbr and add it to send queue