Module 2/5 · Weeks 4–6 · 27 h

C2 links, telemetry and video

UAT 207 Communication and Data Network Systems

About 85 minDraft, awaiting reviewLast updated 28 September 2026

Lesson

By the end of this module you will be able to

  1. Compute telemetry bandwidth from MAVLink message sizes and rates
  2. Compare the demand with the SiK radio air rate and the effect of ECC
  3. Compute Shannon capacity from SNR and assess the margin of a video link
  4. Distinguish the roles of C2, telemetry and mission data

Prerequisites: UAT 207 Module 1 · UAT 104 Module 4 (MAVLink 2 frame structure)

Why this matters

A drone link carries three kinds of data with different needs. C2 carries commands that must arrive reliably and quickly; telemetry carries status that must arrive steadily; and mission data, such as video, needs high bandwidth but tolerates some loss. Send telemetry faster than the radio can carry and important messages are delayed or lost; give the video link no margin and the picture freezes as the drone flies out.

Telemetry bandwidth budget

Each MAVLink 2 message has a payload of its type’s size plus a 10-byte header and a 2-byte CRC (MAVLink serialization guide). Multiply by its rate and sum over all types to get the bandwidth needed.

SiK telemetry radios, common with ArduPilot, default to AIR_SPEED 64 kbps. The guide says enabling ECC halves the supported data rate, and ECC is no longer recommended. The radio must also share time with uplink data from the station, so it should not run close to its full rate.

Example 1 How much bandwidth telemetry uses

Payload sizes are the full sizes of each message in MAVLink 2; rates are set by the team.

MSGS = {                                  # name: (payload bytes, times per second)
    "HEARTBEAT": (9, 1),
    "SYS_STATUS": (43, 2),
    "ATTITUDE": (28, 10),
    "GLOBAL_POSITION_INT": (28, 5),
    "VFR_HUD": (20, 4),
    "GPS_RAW_INT": (52, 2),
    "RC_CHANNELS": (42, 2),
}
OVERHEAD = 12                              # 10-byte header + 2-byte CRC (unsigned)

def total_kbps(msgs):
    return sum((size + OVERHEAD) * 8 * hz for size, hz in msgs.values()) / 1000

base = total_kbps(MSGS)
for air, label in ((64, "AIR_SPEED 64"), (32, "ECC on (half)")):
    print(f"{label:<14}: telemetry {base:.2f} kbit/s uses {base / air:.0%} of the air rate")
fast = dict(MSGS, ATTITUDE=(28, 50), GLOBAL_POSITION_INT=(28, 25))
print(f"attitude 50 Hz + position 25 Hz: {total_kbps(fast):.2f} kbit/s = {total_kbps(fast) / 64:.0%} of 64 kbit/s")
AIR_SPEED 64  : telemetry 8.76 kbit/s uses 14% of the air rate
ECC on (half) : telemetry 8.76 kbit/s uses 27% of the air rate
attitude 50 Hz + position 25 Hz: 27.96 kbit/s = 44% of 64 kbit/s

The normal settings use less than a sixth of the air rate, but raising ATTITUDE and position rates for detailed plots uses almost half, and with ECC on as well it would take about 87% of the remaining 32 kbps. Raise rates only when needed, such as during tuning, then lower them again.

A horizontal stacked bar of coloured segments, one per MAVLink message, totalling about 8.76 kilobits per second. A gold dashed vertical line at 32 labelled ECC on 32 and a pink dashed line at 64 labelled AIR_SPEED 64. Horizontal axis 0 to 70 kilobits per second
Figure 1 Telemetry bandwidth budget against SiK air rate

Shannon (1948) proved that a channel of bandwidth and signal-to-noise ratio SNR can carry at most : a theoretical upper bound that real systems always fall short of. SNR falls with distance through free-space loss, and capacity falls with it. Thermal noise is dBm/Hz plus plus the receiver’s noise figure.

Example 2 Capacity of a 2.4 GHz video link against distance

Assume 20 dBm transmit power, 2 dBi antennas at both ends, 20 MHz bandwidth, a 6 dB noise figure, 8 Mbit/s video and a required margin of two.

import math

PT_DBM, GAINS_DB, B_HZ, NF_DB, F_HZ = 20.0, 4.0, 20e6, 6.0, 2.44e9
VIDEO_MBPS, MARGIN = 8.0, 2.0
noise = -174 + 10 * math.log10(B_HZ) + NF_DB
print(f"noise floor {noise:.1f} dBm")
for d_km in (1, 2, 5, 8, 10):
    fspl = 20 * math.log10(d_km * 1000) + 20 * math.log10(F_HZ) - 147.55
    snr_db = PT_DBM + GAINS_DB - fspl - noise
    cap = B_HZ * math.log2(1 + 10 ** (snr_db / 10)) / 1e6
    ok = "ok" if cap >= VIDEO_MBPS * MARGIN else "not enough"
    print(f"{d_km:>2} km: SNR {snr_db:5.1f} dB, Shannon limit {cap:6.1f} Mbit/s -> {ok}")
noise floor -95.0 dBm
 1 km: SNR  18.8 dB, Shannon limit  125.2 Mbit/s -> ok
 2 km: SNR  12.8 dB, Shannon limit   86.3 Mbit/s -> ok
 5 km: SNR   4.8 dB, Shannon limit   40.2 Mbit/s -> ok
 8 km: SNR   0.7 dB, Shannon limit   22.5 Mbit/s -> ok
10 km: SNR  -1.2 dB, Shannon limit   16.3 Mbit/s -> ok

Even the theoretical bound falls from over a hundred megabits at 1 km to near the required line at 10 km. A real system achieving about half the bound or less runs into trouble much sooner. Fixes include adapting video bitrate automatically to link quality, using directional antennas, or keeping video on a separate link from C2, whose performance RTCA DO-362 specifies separately.

Graph of Shannon capacity in megabits per second against distance from 0 to 10 kilometres. A blue curve falls steeply from about 160 at short range to about 16 at 10 kilometres. A pink dashed horizontal line at 16 labelled video 8 megabits times 2
Figure 2 Shannon capacity against distance for a 2.4 GHz video link

Module lab

Lab: bandwidth budget and link quality

  1. Read the real message rates from the GCS or SITL and enter them into the code from Example 1.
  2. Read the lab’s SiK radio settings (AIR_SPEED, ECC) and compute the share used.
  3. Raise the ATTITUDE rate in SITL and see whether other messages slow down.
  4. Use Example 2 with the specifications of the lab’s video link to find where problems are expected to start.
  5. Record RSSI and video bitrate while flying out in a straight line and compare with the calculation.

Common mistakes

Watch out

  • Raising every telemetry rate without considering bandwidth.
  • Forgetting headers and uplink data.
  • Treating Shannon capacity as the achievable rate.
  • Sending video and C2 on one link without priorities.
  • Mismatched radio settings at the two ends.

Summary

  • Telemetry bandwidth = sum of (payload + header) × 8 × rate.
  • SiK radios default to 64 kbps, and ECC halves the rate.
  • Shannon capacity is an upper bound that falls with SNR; real systems achieve less.
  • Separate the needs of C2, telemetry and video, and give each its own margin.

Check your understanding

  1. A 28-byte payload sent at 10 Hz in unsigned MAVLink 2 uses how much bandwidth?
  2. With SiK AIR_SPEED 64 kbps and ECC on, about how much data is supported?
  3. With B = 10 MHz and SNR = 15 (not dB), what is the Shannon capacity?
  4. What is the thermal noise in 1 MHz of bandwidth (NF 0 dB)?
  5. Why separate the video link from C2?
Answers
  1. bit/s
  2. About 32 kbps.
  3. Mbit/s
  4. dBm
  5. Video uses a lot of bandwidth and tolerates loss, while C2 must arrive reliably; separating them keeps video from competing with commands.

Key formulas

Telemetry bandwidth
Shannon capacity
Thermal noise power

Key references

  1. ArduPilot Dev Team. SiK radio – advanced configuration. ArduPilot Copter documentation. link
  2. MAVLink Development Team. Packet serialization. MAVLink developer guide. link
  3. Shannon, C. E. (1948). A mathematical theory of communication. Bell System Technical Journal, 27(3), 379–423; 27(4), 623–656. link
  4. RTCA. (2016). Command and control (C2) data link minimum operational performance standards (MOPS) (terrestrial) (DO-362). link
  5. Kurose, J. F., & Ross, K. W. (2025). Computer networking: A top-down approach (9th ed.). Pearson. link

Further reading

Study the assigned knowledge units in advance, review media and take the module quiz

In class / field

Lab or field practice from worksheets with a safety checklist

Learning evidence: Checked worksheets and quiz results

Module quiz

This is a formative self-check, not a graded exam

Knowledge domain: Communications, networks and IoT · Law, safety and risk