8. Room Acoustics:  Reverberation Times

Reverberation Time

The "Reverberation Time" of a room is defined as the time required for the Sound Intensity Level in the room to diminish by 60 dB after the source of the sound is extinguished.   In an ideal room,  the graphical relationship between intensity(in dB) and time(sec) is linear,  and the reverberation time of the room can be calculated from the slope of the intensity vs. time graph during the decay.  For example, if the slope of the graph is  -20 dB/sec,  then the decay time is 60 dB/(20 dB/sec) = 3.0 sec.   This decay time can be extrapolated even if the actual drop in intensity is less than 60 dB during the decay of the sound.

A "dry" room has a very short reverberation time, a "wet" room has a very long reverberation time.   The ideal reverberation time for a room depends on what the acoustic purpose of the room is, and also on the size of the room.   An auditorium for lectrures and spoken word should be on the dry side;  a room for organ recitals should be more towards the wet end of the range of acceptable reverberation times.

There are many ways to measure the reverberation time of a room.  One way is to create a sharp transient sound by clapping one's hands, whacking two boards together, firing a gun(not recommended), etc.  Another way is to play a constant white noise through a speaker in the room and then to turn off the source of sound.  In either method, one records the decay of the sound and uses the data to find the reverberation time

To some extent, the reverberation time of a room is frequency dependent,  so there may be several different reverberation times for a room.  These different times can be found by filling the room with white noise that is confined to a relatively narrow range of frequencies.   Typically, "1/3 Octave frequency bands" are used.   If an octave refers to a doubling in frequency, the 1/3 of an octave refers to a frequency multiplier of 1.33.  A 1/3 octave frequency band around a center frequency of f means all frequencies from 5/6 f to 7/6 f are equally represented.  For example,  a 1/3 octave frequency band centered at 500 Hz contains frequencies between 417 Hz and 583 Hz.

Walter Sabine, a Harvard physicist, in the early 20th century worked out an empirical formula for the reverberation time of a room, based on the idea that when sound waves hit a wall, a certain proportion of the energy in the sound will be absorbed by the wall and the remainder of the energy will reflect back into the room.   The reverberation time depends on this proportion, and upon the number of times the sound waves reflect off the walls, which depends on the size of the room.   Sabine's formula incorporates the absorbance of the walls, the size of the walls and the volume of the room.  According to Sabine's Formula, the reverberation time is given by:

(Subscript[T, R]) =  (0.16 s/m) (V/(Subscript[S, e])) 

where

(Subscript[T, R]) is the reverberation time(s).
V is the volume of the room((m^3))

      
\(TraditionalForm\`S\_e\ is\ the\ effective\ surface\ area\ of\ the\ room\ \((m\^2)\)\)	

The "effective area" depends on the actual surface area of the room muliplied by an absorbtivity factor.  A room whose walls absorb 100% of the incident sound has an effective surface area equal to the actual surface area.  A room with walls that reflect 100% of the incident sound has an effective surface area of zero (and therefore an infinite reverberation time because there is no absorption mechanism for the sound to decay.)

In general, each surface (wall, floor, ceiling..) has a different absorptivity, α, and so the effective surface area is found by computing

(Subscript[S, e])= (Subscript[α, 1])(Subscript[S, 1])+ (Subscript[α, 2])(Subscript[S, 2])+ (Subscript[α, 3])(Subscript[S, 3])+ (Subscript[α, 4])(Subscript[S, 4])+.......

where each piece of the surface (Subscript[S, i]), has an absorption coefficient, \(TraditionalForm\`α\_i, \ 
      which\ is\ some\ number\ between\ 0\ and\ 1.0\ \ that\ depends\ on\ the\ material\ that\ the\ surface\ is\ covered\ with, \ 
      and\ can\ be\ found\ from\ the\ right\ \(\(tables\)\(.\)\)\)

This tutorial will teach you how to acquire a decay sound and find the reverberation time.   White noise sound files are provided for you to make your own reverb time determinations of room.  Sound files of decaying signals are also provided for you to analyze.



Instructions:  This Notebook is a tutorial in using various parts of Mathematica.  You should work through the examples in this notebook and then download the accompanying Mathematica notebook that contains a set of Homework exercises that you should complete and submit as homework.  You don't need to submit this notebook, but you do need to submit the accompanying one.

Use ReadSoundFile to acquire an aiff file

<< Miscellaneous`Audio`

Directory[]

SetDirectory[""]

didg = 
        ReadSoundfile["bdig1.aiff", 
          PrintHeader -> True];

Now that we have loaded the sound data into Mathematica, we have a list of samples that are proportional to the pressure deviation of the sound wave at the microphone as a function of time.  In order to find the reverberation time, we need to extract the samples where the decay is happening and  calculate the average intensity of the sound as a function of time during the decay.

fs is the sampling frequency

fs = 22050

tb is the starting time for analysis of the decaying signal

tb =  .5

tend is the ending time of the decaying signal

tend = 3

nb is the sample number of the sample that was recorded at tb

nb = tb fs

nend is the sample number of the sample that was recorded at tend

nend =  tend fs

This next step makes a list of the average of the squares of the pressures for 2048 samples (about 1/10 second) every 1024 samples

samples = 
        Table[Apply[Plus, Take[didg, {n, 2047 + n}]^2]/2048, {n, nb, nend, 
            1024}];

here are the times of the beginning sample of each of the averages above.

times = Table[t, {t, nb, nend, 1024}]/fs;

The plot below converts the intensity at each time to a decibel level an plots the dB values against time.

ListPlot[Transpose[{times, 10  Log[10, samples]}], 
      PlotJoined -> True]