FMCW physics and axes#
This tutorial states the conventions used by FMCW, Sampler, and the derived
properties on Radar. The v1 implementation assumes a linear sawtooth chirp.
Transmitted and received phase#
During the ramp, instantaneous transmit frequency is
where \(f_0\) is startFrequency in hertz and \(S\) is slope in hertz per
second. Ignoring constant phase, the complex transmit signal is
A target at range \(R\) introduces round-trip delay \(\tau=2R/c\). After dechirping, the dominant stationary-target beat frequency is
Motion also contributes Doppler. The narrowband approximation \(f_D=2v_r/\lambda\) is used for the slow-time velocity axis. Range-Doppler coupling is not corrected automatically in v1 and should be considered for long, fast chirps or high velocities.
Sampled bandwidth and range#
If \(N_s\) samples are acquired at rate \(f_s\), capture duration and sampled chirp bandwidth are
The physical range resolution is
For an \(N_R\)-point range FFT, bin spacing is
These are equal only when \(N_R=N_s\). Zero padding reduces bin spacing but does not resolve two targets inside the waveform’s physical resolution.
With complex sampling, v1 reports
For real sampling, the usable one-sided beat bandwidth is \(f_s/2\), so the model halves this limit. Front-end analogue bandwidth may impose a smaller practical limit and belongs in capture-profile validation.
Slow time and velocity#
Let \(T_\mathrm{slow}\) be the interval between two decoded samples for the same virtual channel. It depends on MIMO:
SIMO: one chirp interval;
TDM: one complete TX emission cycle;
BPM: one two-code block;
DDM: one configured code period.
For \(N_D\) decoded slow-time samples,
If the Doppler FFT has \(N_V\) bins, its displayed spacing is \(\lambda/(2N_VT_\mathrm{slow})\). The shifted velocity axis is centred at zero.
Model check#
print(f"sampled bandwidth: {radar.sampledBandwidth / 1e9:.3f} GHz")
print(f"range resolution: {radar.rangeResolution:.3f} m")
print(f"range bin: {radar.rangeBinSize:.3f} m")
print(f"velocity bin: {radar.velocityBinSize:.3f} m/s")
The model rejects an ADC capture whose adcStartTime + captureDuration extends
past rampEndTime. This catches a common unit or profile mismatch before an axis
is generated.