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.
Predict the reading, then compare it with the measurement.
Python 3 in your browser (JupyterLite)
Python · no installOpen 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.
Steps
Step 1
- Do
- In the JupyterLite notebook, run the Step 1 cell to freeze waveform and target assumptions.
- You will see
- Input: execute notebook step 1 with the record’s unchanged fixture, seed, and parameters. Observed: bandwidth=600 MHz; chirp=60 us; carrier=60 GHz Observed: samples/chirp=128; sample_rate=2.133 MHz Observed: targets=7.5 m and 15.0 m; no RF hardware
- Why it matters
- Expected: STEP 1 complete from this deterministic notebook step. Interpretation: For a linear chirp, slope equals bandwidth divided by chirp duration. Action: Freeze waveform and target assumptions. Boundary: this local fixture is not a live device, network, or site measurement.

Step 1 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 2
- Do
- In the JupyterLite notebook, run the Step 2 cell (run_step(2)) to calculate delays and beat frequencies.
- You will see
- Input: execute notebook step 2 with the record’s unchanged fixture, seed, and parameters. Observed: 7.5 50.035 500.346 Observed: 15.0 100.069 1000.692 Observed: Expected delay and beat
- Why it matters
- Expected: STEP 2 complete from this deterministic notebook step. Interpretation: A target at range R creates an approximate round-trip delay of 2R/c. Action: Calculate delays and beat frequencies. Boundary: this local fixture is not a live device, network, or site measurement.

Step 2 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 3
- Do
- In the JupyterLite notebook, run the Step 3 cell (run_step(3)) to generate one mixed beat signal.
- You will see
- Input: execute notebook step 3 with the record’s unchanged fixture, seed, and parameters. Observed: dt=468.750 ns Observed: 0 1.65000 Observed: 1 -0.54077
- Why it matters
- Expected: STEP 3 complete from this deterministic notebook step. Interpretation: Mixing transmit and receive signals produces a beat frequency linked to delay and range. Action: Generate one mixed beat signal. Boundary: this local fixture is not a live device, network, or site measurement.

Step 3 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 4
- Do
- In the JupyterLite notebook, run the Step 4 cell (run_step(4)) to perform a range DFT.
- You will see
- Input: execute notebook step 4 with the record’s unchanged fixture, seed, and parameters. Observed: 7.50 7.49 0.005 Observed: 15.00 14.99 0.010 Observed: Rectangular-window DFT; no calibration correction.
- Why it matters
- Expected: STEP 4 complete from this deterministic notebook step. Interpretation: Samples within one chirp form range bins. Action: Run a range DFT. Boundary: this local fixture is not a live device, network, or site measurement.

Step 4 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 5
- Do
- In the JupyterLite notebook, run the Step 5 cell (run_step(5)) to compare phase across chirps.
- You will see
- Input: execute notebook step 5 with the record’s unchanged fixture, seed, and parameters. Observed: 1 -1.25 -500.3 Observed: 2 2.50 1000.7 Observed: Slow-time Doppler fixture
- Why it matters
- Expected: STEP 5 complete from this deterministic notebook step. Interpretation: Doppler resolution improves with a longer coherent observation, while frame rate and target change limit how long samples remain comparable. Action: Compare phase across chirps. Boundary: this local fixture is not a live device, network, or site measurement.

Step 5 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 6
- Do
- In the JupyterLite notebook, run the Step 6 cell (run_step(6)) to change bandwidth and chirp time.
- You will see
- Input: execute notebook step 6 with the record’s unchanged fixture, seed, and parameters. Observed: 300 60 0.500 31.98 Observed: 600 60 0.250 15.99 Observed: 600 120 0.250 15.99
- Why it matters
- Expected: STEP 6 complete from this deterministic notebook step. Interpretation: Ideal range resolution is approximately c divided by twice the swept bandwidth, so more bandwidth separates closer reflectors. Action: Change bandwidth and chirp time. Boundary: this local fixture is not a live device, network, or site measurement.

Step 6 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab) Step 7
- Do
- In the JupyterLite notebook, run the Step 7 cell (run_step(7)) to write a bounded result card.
- You will see
- Input: execute notebook step 7 with the record’s unchanged fixture, seed, and parameters. Observed: target1_error=0.005 m Observed: target2_error=0.010 m Observed: ideal_range_resolution=0.250 m
- Why it matters
- Expected: STEP 7 complete from this deterministic notebook step. Interpretation: Synthetic chirps verify maths and code, not mmWave hardware, antennas, or a deployed scene. Action: Write a bounded result card. Boundary: this local fixture is not a live device, network, or site measurement.

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.
What mainly improves ideal FMCW range resolution?
Return to the chapter’s knowledge checkWhich sample dimension supplies Doppler evidence?
Return to the chapter’s knowledge check
Return to FMCW mmWave Radar: Range, Doppler, and Angle · Browse Labs