The gap between a UWB radio that ranges to a phone and a UWB radar that detects a sleeping child is entirely software. The hardware is close to identical. What changes is what you do with the channel impulse response, and that turns out to be a harder problem than most product plans allow for, for one reason that is rarely stated plainly: the chest displacement you are trying to measure from a heartbeat is around 0.08 mm, and the breathing displacement sitting on top of it is up to sixty times larger.

This article walks the UWB radar signal processing chain end to end. How the raw data is organised, how static clutter is removed, how the range bin holding the target is chosen, and then the part that separates working systems from demos, which is what happens when respiration harmonics land directly on top of the heart rate band.

It also makes one argument that cuts against most of the literature. For the automotive child presence case, you probably do not need heart rate at all, and chasing it is the most common way to burn a year.

What the radar actually hands you

An impulse radio UWB radar transmits a short pulse, typically around 2 ns across more than 500 MHz of bandwidth, and samples the returning echo. One sweep gives you a channel impulse response: amplitude against delay, where delay maps to distance. Sub-centimetre range resolution comes directly from that bandwidth.

One CIR on its own tells you almost nothing about a person. What matters is how it changes. The organising idea in all UWB radar signal processing is a two dimensional matrix with two independent time axes:

Fast time is the delay axis within a single pulse, measured in nanoseconds. It is range. A typical acquisition samples around 512 points across roughly 2.5 ns.

Slow time is the axis across successive sweeps, measured in seconds. It is motion. Slow-time sampling rates in published work sit around 27 Hz, comfortably above Nyquist for respiration under 0.7 Hz and cardiac activity under 3 Hz.

A breathing chest sits at a fixed range, so it occupies one region of the fast-time axis and oscillates along the slow-time axis. Everything in the signal chain follows from that split. Range problems are fast-time problems. Rate problems are slow-time problems. Confusing the two is the most common structural error in a first implementation.

Averaging happens before either. Acquiring and averaging multiple waveforms per reported sweep, 64 in the reference implementation described in this analysis of vital signs monitoring with IR-UWB radar, buys signal to noise ratio at the cost of slow-time sampling rate. That trade is the first tuning decision in the chain and it is usually made once and never revisited, which is a mistake.

decorative image

Clutter removal, or finding 0.08 mm inside a parked car

The raw CIR is dominated by things that are not the target. Reflections off the seat, the headliner, the door card, the dashboard, and the direct coupling between transmit and receive antennas all return far more energy than a breathing chest.

The standard first pass is two stage direct current removal:

Slow-time DC removal. Average all received waveforms and subtract that average from each one. Anything static across the observation window disappears. This is the single most effective step in the whole chain and it is three lines of code.

Fast-time DC removal. Subtract the mean across the fast-time samples to clear residual offset.

What survives is modulation caused by movement, which is what you wanted.

Static subtraction has a known failure mode, and it is the one that shows up in vehicles rather than in labs. It removes anything that does not change, which is correct, but it also degrades anything that changes slowly relative to your averaging window. Set the window too long and a very still occupant starts to look like background. Set it too short and slow environmental drift leaks through as false motion.

For clutter that moves, subtraction is not enough. Singular value decomposition and principal component analysis are the usual next step: decompose the slow-time matrix, discard the components carrying static and bulk motion energy, and reconstruct from what remains. The comprehensive survey of UWB radar signal processing on arXiv is a reasonable map of the method space here, covering background subtraction and anomaly detection for presence, and the filtering, signal separation and modelling stages used for vital signs.

The practical caution with SVD in a product is that component selection is a tuning parameter dressed up as mathematics. Which singular values you keep is a decision, it is scene dependent, and a threshold tuned on one vehicle interior does not transfer to another. Any UWB radar signal processing design that hard codes that choice will behave differently in a hatchback and an SUV.

Choosing the range bin

Every UWB radar signal processing chain has to answer one question before it can measure anything: where is the target. Once clutter is gone you still have a full range profile and most of it is empty. You need the fast-time index where the target actually sits.

The standard approach is to run spectral analysis across slow time at every range bin and select the bin where energy in the band of interest is greatest. In the reference work above, that is the delay where the spectral magnitude is maximised.

Two complications arrive in a cabin. First, a person is not a point. Chest, abdomen and head reflect from adjacent range bins with different displacement amplitudes, so the best bin for respiration is not necessarily the best bin for anything else, and the best bin moves when the occupant shifts. Second, multipath in a metal box is severe. A strong reflection off the opposite door can put a plausible looking copy of an actual target in a range bin where nobody is sitting.

Working implementations track the bin over time rather than choosing once, and weight adjacent bins rather than picking a single winner. For multiple occupants the problem becomes separation rather than selection, which is where blind source separation enters. Ceva’s in-cabin vital signs work uses measure-transformation-enhanced second-order blind identification to decompose the returns into independent respiratory and cardiac components, with fine range resolution doing the spatial part of the separation.

The harmonic problem, which is the actual problem

Here is where UWB radar signal processing stops being a filtering exercise.

Respiration and cardiac activity occupy neighbouring bands. Respiration runs roughly 0.2 to 0.7 Hz, which is 12 to 42 breaths per minute. Cardiac activity runs roughly 0.8 to 3 Hz, or 48 to 180 beats per minute. On a spectrum plot they look cleanly separated.

They are not, because of the amplitude difference.

SignalChest displacementFrequency bandRelative difficulty 
Respiration0.1 to 5 mm0.2 to 0.7 HzStraightforward
Cardiacaround 0.08 mm0.8 to 3 HzHard
Respiration 2nd harmonicScales with respiration0.4 to 1.4 HzLands in the cardiac band
Respiration 3rd and 4th harmonicsScales with respiration0.6 to 2.8 HzLands in the cardiac band
Intermodulation productsScales with bothScattered across the cardiac bandLands in the cardiac band

Breathing displacement is one to two orders of magnitude larger than cardiac displacement. Because the radar response to displacement is not perfectly linear, that large respiration signal generates harmonics at twice, three times and four times the breathing rate, and those harmonics fall squarely inside the cardiac band.

The quantitative result from the same analysis is the number worth memorising: for breath displacements greater than about 2.5 mm, the respiration harmonics have the same magnitude as the cardiac component. Not smaller. The same. At that point a peak picker looking for the largest thing in the cardiac band will confidently return a multiple of the breathing rate and call it a heart rate.

It gets worse. Intermodulation products between the two, for example minus twice the breathing rate plus the heart rate, can also rival the cardiac amplitude, and they do not sit at convenient integer multiples of anything. The pulse shape matters too: non-ideal pulses produce stronger even harmonics than an ideal Gaussian, so your analogue front end contributes to a problem that looks like a DSP problem.

This is why a demo built on a development kit, with a cooperative adult breathing shallowly at a fixed distance, can report a plausible heart rate and then fail completely on a sleeping child taking deep 5 mm breaths.

What actually works against the harmonics

Three families of countermeasure recur in UWB radar signal processing work that survives contact with field data.

MethodWhat it doesCostWhen to use 
MTI harmonic cancellerCascaded delay filters, transfer function (1 – e^-jwT)^K with T set to the breathing period, notching every multiple of the breathing rateLow, runs on an MCUAlways, once you have a reliable breathing rate
Chirp Z-transformHigher frequency resolution over a narrow band without more samplesModerateWhen peaks are close and you cannot extend the observation window
Higher-order harmonic peak selectionFinds peaks between 100 and 400 bpm above a 1.66 Hz high pass, then exploits the fact that cardiac harmonics are integer multiples to back out the fundamentalModerateWhen the fundamental is buried but its harmonics are not

The MTI canceller is the elegant one because it inverts the dependency. Rather than treating respiration as interference to be rejected blindly, it measures the breathing rate first, then places notches at exactly the multiples of it. You are using the easy measurement to clean up the hard one. Filter order sets notch steepness, so it is a straightforward knob.

Harmonic peak selection, described in this Sensors paper on higher-order harmonics, works from the opposite direction: instead of trusting the cardiac fundamental, it looks for the family of peaks that are integer multiples of each other and reconstructs the fundamental from the family. Reported mean absolute error against ECG is 1.32 bpm, which is respectable.

With all of this in place, published accuracy is good. The IR-UWB analysis reports heart rate errors of 1.4 per cent during moderate exercise, 2.4 per cent at rest, and 0.2 per cent through a 20 cm brick wall. Those numbers hold up, and they are also achieved by researchers tuning against a known subject in a controlled scene.

Occupancy is a different and much cheaper pipeline

It is worth separating two problems that get bundled together.

Occupancy detection asks whether anything alive is present. It needs energy or variance in the clutter-removed CIR across slow time, a threshold, and usually constant false alarm rate detection to set that threshold adaptively against the local noise floor. It does not need a rate, a range bin decision, or any harmonic handling. It runs on very little compute and it degrades gracefully.

Vital sign extraction asks at what rate. Everything above applies.

Most automotive requirements are closer to the first than teams assume, and a UWB radar signal processing architecture that treats occupancy as a cheap always-on layer and vital sign extraction as an expensive layer invoked on demand will use a fraction of the power of one that runs the full chain continuously.

The automotive shortcut nobody mentions

Now the argument that matters commercially, and it changes how much UWB radar signal processing you actually need to build. Euro NCAP’s child presence detection protocol requires direct sensing of a sign of life, defined as movement, respiration or heartbeat. Any one of the three clears the bar. It does not require a clinically accurate heart rate, and it does not require a heart rate at all.

Look at what the evidence says about which of those is reliable. A preclinical evaluation of IR-UWB radar vital sign monitoring measured both against reference instruments. Respiratory rate achieved a concordance correlation coefficient of 0.925 with mean bias under one breath per minute. Heart rate achieved 0.749, with limits of agreement running from minus 12.78 to plus 15.04 bpm.

Read that second range again. On individual measurements, in a clinical setting, with a cooperative still subject at a controlled 1.5 m, the heart rate could be wrong by fifteen beats per minute in either direction. Respiration is reliable. Cardiac is not, or at least not without significant additional work for a benefit the requirement does not ask for.

The engineering conclusion is straightforward and it saves a great deal of programme time. For child presence detection, build the respiration path properly, use occupancy and gross motion as the coarse layer beneath it, and treat cardiac extraction as a research track rather than a compliance dependency. The harmonic problem that dominates the academic literature is a problem you can decline to have.

Two caveats keep this honest. If the product roadmap includes driver wellness monitoring or occupant health features, cardiac comes back and the harmonic work is unavoidable, so know which product you are building. And a six year old at rest breathes around 18 breaths per minute, which is where the same clinical study found respiratory accuracy starting to degrade, so the easy path still has a boundary worth testing at.

What a vehicle cabin does to your signal chain

Every paper cited above was produced in a lab or a clinic. A parked car puts UWB radar signal processing in a different environment, and in some ways a kinder one.

Cabin conditionEffect on the signal chainMitigation 
Engine off, vehicle lockedNo vibration, no bulk occupant motion, no HVACThis is the easy case, and it is exactly when CPD runs
Rain or hail on the roof and panelsBroadband slow-time noise across all range binsCommon-mode rejection across bins, since it affects all of them
Thermal drift over a 20 minute windowSlow baseline movement that looks like very slow respirationHigh pass above the lowest credible respiration rate
Metal box multipathGhost targets in range bins with no occupantTrack bins over time, cross-check against known seat positions
A phone left in the cabinPeriodic vibration alerts can mimic motionClassification layer, frequency signature differs from respiration
Occupant partly outside the main lobeAmplitude collapse, not a rate errorAnchor placement, which is a mechanical decision not a DSP one

The pattern is that the parked car removes the hardest conditions from the literature. There is no walking, no gross motion, no posture change. The problems that replace them are environmental and geometric rather than physiological, and geometric problems are solved by anchor placement rather than by better algorithms. That is worth saying to any team planning to solve coverage gaps in software.

Compute and power, which set the actual ceiling

UWB radar signal processing does not run on a workstation in a shipped product. It runs on an automotive microcontroller, often alongside a digital key stack competing for the same cycles, inside a power budget that has to hold for 20 minutes after lock.

The published figure for UWB radar presence detection at several metres is under 10 mW, per Qorvo’s description of UWB radar sensing. That budget covers the radio. It does not cover an FFT per range bin per second.

The levers, in the order teams usually reach for them:

Duty cycle the acquisition. Vital sign extraction needs a continuous observation window of many seconds to resolve a rate, but it does not need to run continuously. Detect occupancy cheaply, then open a window.

Restrict the range bins. Full profile processing is wasteful when seat positions are known. Process the bins that can contain an occupant.

Choose spectral estimation to fit the silicon. A chirp Z-transform over a narrow band can be cheaper than a long FFT and gives better resolution where it matters.

Decide early where the ML layer runs. Classification that separates a child from a bag or a pet is valuable and it is also the piece most likely to blow the compute budget. Deciding that late is how programmes end up adding a processor.

The recurring failure is porting an algorithm validated in a scripting language onto an MCU and discovering the accuracy was carried by a numerical precision and a window length neither of which fits. Validate the fixed point implementation against the same data as the reference implementation, early.

Where needCode fits

needCode works on the embedded side of this: the UWB radar signal processing that runs on the target, not the prototype that runs on a laptop. That covers the CIR pipeline, clutter handling, band separation and rate estimation, the classification layer that distinguishes an occupant from an object, and fitting all of it into the compute and power budget a vehicle actually offers.

The relevant work sits across UWB engineering and child presence detection, which is the application most of this feeds. Teams evaluating whether UWB radar suits their sensing problem at all will get more from our free e-book on evaluating UWB radar for presence and gesture sensing, which compares it against cameras, PIR and 60 GHz radar rather than assuming the answer. If the sensor choice itself is still open, our comparison of UWB, 60 GHz radar and cameras covers that decision and reaches a conclusion that does not simply favour UWB.

Debugging a signal chain needs visibility into what the radio actually received rather than what your algorithm concluded, which is what needCode’s UWB protocol analyser provides with raw PHY capture. Talk to us if you have a pipeline that works on a development kit and not in a vehicle, which is the most common place this work stalls.

Frequently asked questions

Why is heart rate so much harder than breathing rate with UWB radar?

Amplitude. Breathing moves the chest by 0.1 to 5 mm while a heartbeat moves it by around 0.08 mm, so the cardiac signal is one to two orders of magnitude smaller. Worse, the large respiration signal generates harmonics at two, three and four times the breathing rate, and those land inside the cardiac band. Above roughly 2.5 mm of breath displacement the harmonics match the cardiac component in magnitude, so a naive peak search returns a multiple of the breathing rate instead.

Do I need heart rate detection for Euro NCAP child presence detection?

No. The protocol accepts movement, respiration or heartbeat as direct sensing, and any one of the three satisfies it. Respiration is substantially more reliable in published validation, so building the respiration path well and treating cardiac extraction as optional is the faster route to compliance. Reconsider only if the roadmap includes occupant wellness features that genuinely need a heart rate.

What sampling rate does UWB radar signal processing need?

Slow-time sampling around 27 Hz appears in published implementations, which is comfortably above Nyquist for respiration below 0.7 Hz and cardiac activity below 3 Hz. The more consequential choice is how many waveforms you average per reported sweep, since averaging buys signal to noise ratio and spends slow-time rate. That trade should be revisited against your actual noise floor rather than inherited from a reference design.

Can one UWB anchor cover several occupants?

Range resolution does part of the work, because occupants at different distances fall into different fast-time bins. Separating occupants at similar ranges needs blind source separation to decompose the returns into independent components. In practice this is limited more by anchor geometry than by algorithm quality, so treat it as a placement question first and a signal processing question second.

How much of this can run on an automotive MCU?

Occupancy detection runs comfortably on very little. Full vital sign extraction across every range bin continuously does not. The workable architecture is a cheap always-on occupancy layer that opens an observation window for rate extraction only when something is present, with range bin processing restricted to positions an occupant can occupy. Validate the fixed point implementation against the same data as your reference implementation early, because accuracy carried by floating point precision does not survive the port.