Room acoustics Solution



In Example 2.8, we discussed a digital recursive IIR reverberator, which is also known as “comb reverberator.” In this homework, you will try to implement an “allpass reverberator” which is introduced by Schroeder and Logan (1961) to prevent “coloration” of the input sound by the comb reverberator. The allpass reverberator can be modeled or implemented via the following recursive LCCDE.

y[n] ay[n D] ax[n] x[n D],

where all the symbols in the LCCDE share the same definitions in Example 2.8. With this LCCDE modeling, please try to answer the following questions.

  1. Derive the impulse response of this allpass reverberator and compare with the one derived in Eq. (2.102). Please use the MATLAB function filter() to compute and plot the impulse responses of the allpass and comb reverberators and to verify your derivation , where a = 0.7, and D = 5.

  1. Please comment whether this allpass reverberator can be potentially implemented in real time and under what condition of a and D this allpass reverberator is stable.

  1. Approximate the allpass reverberator as a FIR filter and implement it using the MATLAB function filter() (or conv()) with a = 0.7 and D = Fs where D is the delay in sampling interval given the delay = 0.1 sec. and sampling rate Fs (in Hz). Given the sound file Halleluyah.wav, you can load the file, play the sound and save the output sound by using the following MATLAB codes:

[x, Fs] = wavread(‘ Halleluyah.wav’); sound(x, Fs);

wavwrite(y,Fs, ‘ Halleluyah_FIRecho_Allpass.wav’);

where x is the input sound (a column vector), y is the output sound (a column vector, too), and Fs is the sampling rate in samples/sec (i.e., in Hz).

Please elaborate how you approximate the reverberator as a FIR filter. That is, elaborate how you determine the order of the FIR filter (i.e., the M in the general LCCDE in Eq. 2.94). Also plot x and y together as a function of time and check the changes in x done by your FIR filter. You may need to zoom in the plot to see the changes in details.

  1. Write your own MATLAB codes to implement the allpass reverberator using the provided recursive LCCDE with a and D being the same values used in (c). To


generate digital reverberation, we will use the same sound file in (c), and save your output sound as Halleluyah_IIRecho_Allpass.wav. You may verify your results using MATLAB function filter(). Note that you have to provide the initial condition (i.e., y[n] and x[n], n < 0) used in your implementation. Also plot x and y together as a function of time, check the changes in x done by your IIR filter, and comment the output differences between the two different implementations in

    1. and (d). Note that you may need to zoom in the plot to see the changes in details.

  1. Change the a in (d) to the values resulting in an unstable reverberator, and grasp the feeling about the output of an unstable reverberator sounds like, also with the sound file used in (d) as the system input.

  1. Change the initial condition (e.g., y[n] = x[n] = 1, n < 0, or y[n] and x[n] are random numbers (try MATLAB function rand()), n < 0. Note that you may try to scale y[n] or x[n] to the values close to your input) which you used in (d) and see how the initial condition affect the results. Plot the outputs with different initial condition together as a function of time and tell the difference, also with the sound file used in (c) as the system input and the a and D the same values used in (c).

  1. Following (f), verify whether the system output y[n] is equal to the zero-input response plus zero-state response.

  1. Implement the comb reverberator in Example 2.8 using the MATLAB function filter() and the same input sound file, a and D in (d) and save your output sound as Halleluyah_IIRecho_Comb.wav. Can you hear or see by plot any output differences between the two reverberator? Please comment on the differences via the magnitude responses of the two reverberators? Also from the magnitude responses, do you know why one is called “comb” reverberator and the other is called “allpass” reverberator? Note that the magnitude response is the magnitude

of the frequency response, i.e.,

Y (e j )

, whereis from – to + or

X (e j )

Y ( j2 F )

. Note that the frequency response can be calculated with the sample

X ( j2 F )

codes used in your homework #1, and you may need to plot the two magnitude responses together to see the difference.


  1. Please hand in your solution files to the LMS elearning system, including your word file of the detailed solutions, the associated Matlab codes, and all the related


materials. It would be nice that you can put your codes with comments side by side along with your answer in the word file.

2. Name your solution files “EE3660_HW2_StudentID.doc” and “EE3660_HW2_StudentID.m”, and archive them as a single zip file:

  1. The first line of your word or Matlab file should contain your name and some brief description, e.g., % EE 3660 王小明 u9612345 HW2 MM/DD/2017