rt60 = IR_stats(filename)
[rt60,drr] = IR_stats(filename)
[rt60,drr,cte] = IR_stats(filename)
[rt60,drr,cte,cfs] = IR_stats(filename)
[rt60,drr,cte,cfs,edt] = IR_stats(filename)
... = IR_stats(...,'parameter',value)
rt60 = IR_stats(filename) returns the reverberation time
(to -60 dB) using a method based on ISO 3382-1:2009.
The function uses reverse cumulative trapezoidal
integration to estimate the decay curve, and a linear
least-square fit to estimate the slope between 0 dB and
-60 dB. Estimates are taken in octave bands and the
overall figure is an average of the 500 Hz and 1 kHz
bands.
The function attempts to identify the direct impulse as
the peak of the squared impulse response.
filename should be the full path to a wave file or the
name of a wave file on the Matlab search path. The file
can have any number of channels, estimates (and plots)
will be returned for each channel.
[rt60,drr] = IR_stats(filename) returns the DRR for the
impulse. This is calculated in the following way:
DRR = 10 * log10( x(t0-c:t0+c)^2 / x(t0+c+1:end)^2 )
where x is the approximated integral of the impulse, t0
is the time of the direct impulse, and c=2.5ms [1].
[rt60,drr,cte] = IR_stats(filename) returns the
early-to-late index Cte for the impulse. This is
calculated in the following way:
Cte = 10 * log10( x(t0-c:t0+te)^2 / x(t0+te+1:end)^2 )
where x is the approximated integral of the impulse and
te is a point 50 ms after the direct impulse.
[rt60,drr,cte,cfs] = IR_stats(filename) returns the
octave-band centre frequencies used in the calculations.
[rt60,drr,cte,cfs,edt] = IR_stats(filename) returns the
early decay time (EDT). The slope of the decay curve is
determined from the fit between 0 and -10 dB. The decay
time is calculated from the slope as the time required
for a 60 dB decay.
... = IR_stats(...,'parameter',value) allows numerous
parameters to be specified. These parameters are:
'graph' : {true} | false
Controls whether decay curves are plotted.
Specifically, graphs are plotted of the impulse
response, decay curves, and linear least-square
fit(s) for each octave band and channel of the
wave file.
'te' : {0.05} | scalar
Specifies the early time limit (in seconds).
'spec' : {'mean'} | 'full'
Determines the nature of RT60 output. With
spec='mean' (default) the reported RT60 is the
mean of the 500 Hz and 1 kHz bands. With
spec='full', the function returns the RT60 as
calculated for each octave band returned in cfs.
'y_fit' : {[0 60]} | two-element vector
Specifies the decibel range over which the decay
curve should be evaluated. For example, 'y_fit'
may be [-5 -25] or [-5 -35] corresponding to the
RT20 and RT30 respectively.
'correction' : {0.0025} | scalar
Specifies the correction parameter c (in
seconds) given above for DRR and Cte
calculations. Values of up to 10 ms have been
suggested in the literature.
Octave-band filters are calculated according to ANSI
S1.1-1986 and IEC standards. Note that the OCTDSGN
function recommends centre frequencies fc in the range
fs/200 < fc < fs/5.
The author would like to thank Feifei Xiong for his
input on the correction parameter.
References
[1] Zahorik, P., 2002: 'Direct-to-reverberant energy
ratio sensitivity', The Journal of the Acoustical
Society of America, 112, 2110-2117. |