Skip to content

Recover range and velocity from synthetic FMCW chirps

Generate synthetic FMCW beat signals and recover known range and radial velocity while reporting resolution and ambiguity.

Radio Remi: I want you to predict the result, inspect each intermediate value, and keep the final claim inside the evidence., your practice guide

Radio Remi: I want you to predict the result, inspect each intermediate value, and keep the final claim inside the evidence.
Predict the reading, then compare it with the measurement.

Python 3 in your browser (JupyterLite)

Python · no install

Generate synthetic FMCW beat signals and recover known range and radial velocity while reporting resolution and ambiguity.

Tier 2 · Web · paste-in setup · No account

Version tested: Python 3.12.7 / Pyodide 0.27.6 in JupyterLite 0.6.4; Chromium 148.0.7778.96; captureSource playwright:jupyterlite. Date: 2026-09-10.

Open the notebook in your browser and run each Python cell; no install or account is needed.

Three ways to run: use JupyterLite here with no install; run main.py locally from the downloadable lab folder; or open the same notebook in Google Colab.

Open in your browser (new tab)

Steps

Screens captured against Python 3 in your browser (JupyterLite) Python 3.12.7 / Pyodide 0.27.6 in JupyterLite 0.6.4; Chromium 148.0.7778.96; captureSource playwright:jupyterlite on 2026-09-10; the tool may have moved on — the text steps are the contract.

  1. 1 Step 1

    Do
    Freeze waveform and target assumptions.
    You will see
    Bandwidth, chirp time, carrier, sample count, and two known targets are printed.
    Why it matters
    For a linear chirp, slope equals bandwidth divided by chirp duration.
    JupyterLite step 1 for Recover range and velocity from synthetic FMCW chirps, showing the printed evidence for this step.
    Step 1 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  2. 2 Step 2

    Do
    Calculate delays and beat frequencies.
    You will see
    Each target's delay and expected beat frequency appear with units.
    Why it matters
    A target at range R creates an approximate round-trip delay of 2R/c.
    JupyterLite step 2 for Recover range and velocity from synthetic FMCW chirps, showing the printed evidence for this step.
    Step 2 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  3. 3 Step 3

    Do
    Generate one mixed beat signal.
    You will see
    The first eight real samples and their time spacing are printed.
    Why it matters
    Mixing transmit and receive signals produces a beat frequency linked to delay and range.
    JupyterLite step 3 for Recover range and velocity from synthetic FMCW chirps, showing the printed evidence for this step.
    Step 3 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  4. 4 Step 4

    Do
    Run a range DFT.
    You will see
    The two strongest bins recover target ranges with absolute error.
    Why it matters
    Samples within one chirp form range bins.
    JupyterLite step 4 for Recover range and velocity from synthetic FMCW chirps, showing the printed evidence for this step.
    Step 4 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  5. 5 Step 5

    Do
    Compare phase across chirps.
    You will see
    A slow-time DFT reports radial-velocity bins for both targets.
    Why it matters
    Doppler resolution improves with a longer coherent observation, while frame rate and target change limit how long samples remain comparable.
    JupyterLite step 5 for Recover range and velocity from synthetic FMCW chirps, showing the printed evidence for this step.
    Step 5 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  6. 6 Step 6

    Do
    Change bandwidth and chirp time.
    You will see
    The table shows range resolution and unambiguous-range changes.
    Why it matters
    Ideal range resolution is approximately c divided by twice the swept bandwidth, so more bandwidth separates closer reflectors.
    JupyterLite step 6 for Recover range and velocity from synthetic FMCW chirps, showing the printed evidence for this step.
    Step 6 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  7. 7 Step 7

    Do
    Write a bounded result card.
    You will see
    The final card lists recovered errors and missing hardware evidence.
    Why it matters
    Synthetic chirps verify maths and code, not mmWave hardware, antennas, or a deployed scene.
    JupyterLite step 7 for Recover range and velocity from synthetic FMCW chirps, showing the printed evidence for this step.
    Step 7 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)

Chapter checks

These questions refer to the chapter’s examples. Use the return links to review their answers.

  1. What mainly improves ideal FMCW range resolution?

    Return to the chapter’s knowledge check
  2. Which sample dimension supplies Doppler evidence?

    Return to the chapter’s knowledge check

Caution

The supplied data and simulation verify the calculation path only. Reopen the prepared notebook if screens change, and validate any field claim with measured hardware and site evidence.

Return to FMCW mmWave Radar: Range, Doppler, and Angle · Browse Labs