RT60 measurement went through seven releases in a single week, and the instructive part is not that the early versions were wrong. It is that every one of them was wrong in a way that looked entirely right. A reverberation time is a single number in seconds. It carries no obvious signature of being incorrect, which is exactly what makes it dangerous.
This is what it took to get one number we would stand behind, and why the RT60 tool in XSCACE Studio now refuses to answer more often than you might expect.
The maths was wrong, and the maths looked fine
The first fault was in the deconvolution itself: correlation against a reversed filter, which performs no compression at all. It produced an impulse response that looked like an impulse response and decayed like one. It was replaced with FFT-based regularised deconvolution. The same pass fixed an O(n²) implementation that froze the interface by running on the main thread, and a stride-related aliasing bug.

Noise does not add to a decay curve. It ends it.
The second fault is the one most likely to be sitting in other people's measurements right now. Ambient noise contaminates the Schroeder integral: the decay curve flattens as it descends into the noise floor, and the integration reads that flattening as reverberation that has not finished.
Reproduced synthetically, the scale of it is startling. A room with a true 0.5 s decay reads as follows:
| Signal-to-noise ratio | Reported RT60 | True RT60 |
|---|---|---|
| 30 dB | 2.6 s | 0.5 s |
| 20 dB | 10 s | 0.5 s |
| 20–35 dB | typical of a real laptop microphone | — |
A tenfold or twentyfold overstatement, from a measurement that produces no warning and no visible artefact. With noise-truncated Schroeder integration the same synthetic room reads 0.47 to 0.50 s at every signal-to-noise ratio down to 20 dB.
The reading that was not the room at all
Then a user reported 5.5 s in a normal room — a figure no domestic space produces. The debug export, a button added for exactly this kind of dispute, settled it: the impulse response dropped normally and then held a plateau at −18 to −25 dB for two full seconds.
That shape is not room decay. Room decay is continuous. A plateau is sustained energy arriving from somewhere in the playback chain.
The suspects fell one at a time. Not the microphone, which was a calibrated measurement unit. Not the harmonic extension processing, which was switched off. Not laptop speakers, because the system was a set of full-range speakers with a subwoofer, playing loudly. What remained was the transport — the same clock-synchronisation behaviour that the timing investigation would later prove independently, scattering sweep energy into a broadband floor lift.
What the tool does now
RT60 in XSCACE Studio follows ISO 3382-1 practice: Lundeby truncation, a sustained-submersion criterion rather than a simple backward scan, a minimum 12 dB fit span, and an r² ≥ 0.90 quality gate on the regression.
The consequence is that it declines to answer when the room and the signal cannot support a defensible number, and the failure message names the remedy — raise the level, or quieten the room. A measurement tool that returns a confident wrong number is worse than one that returns nothing, because the wrong number is the one that gets acted on.
Two lessons that generalise
Both of these cost real time, and neither is specific to reverberation:
- Synthetic validation must include realistic noise floors. Clean-signal tests passed every single broken version. A test that only exercises the ideal case certifies nothing about the field.
- A synthetic room impulse must contain a direct-path impulse. Pure decaying noise has no clear peak, so the fit-span gate fails legitimately and you spend a day chasing a bug that is not there.
The wider habit worth taking from this: build the export button before you think you need it. Two of the findings above were only settled because the raw capture could be pulled out and examined offline, against a reference implementation, away from the tool that produced it.
Why ISO 3382-1 rather than a simpler rule
It would be easy to fit a straight line to a decay curve and report the slope. The standard exists because that approach fails in specific, predictable ways, and each element of it earns its place. Lundeby truncation finds where the decay genuinely meets the noise floor instead of guessing a fixed window. A sustained-submersion criterion avoids stopping at the first sample that dips below threshold, which noise alone will produce. The 12 dB minimum fit span prevents a slope being extrapolated from a fragment too short to characterise anything.
The r² gate is the one that does the most work in practice. A decay that is genuinely exponential fits a straight line closely on a logarithmic axis. One that is contaminated — by noise, by a plateau, by a room with two distinct decay rates — does not. Requiring r² ≥ 0.90 is a cheap way of asking whether the thing being measured actually behaves like reverberation before reporting a reverberation time.
What this means when you are standing in the room
The practical guidance that falls out of all this is short:
- Measure louder than feels necessary. Signal-to-noise is the dominant error term, and it is the one entirely under your control on site.
- Turn things off. Air conditioning, fridges and traffic are broadband noise sources, and they inflate the reading rather than obscuring it — which means the number still arrives, looking plausible.
- Use a calibrated measurement microphone at the listening position, not the device's own microphone across the room.
- Treat a refusal as information. It is telling you the conditions cannot support the measurement, which is itself worth knowing before you specify treatment.
RT60 is one of eleven instruments in the XSCACE Studio calibration toolkit, alongside frequency response, distortion, transfer function and sub alignment. The timing architecture that eventually explained the plateau in this investigation is described separately in the account of measuring arrival time over wireless.
