## Multiprocessor Drum Synthesis.

Introduction.

For this exercise, you will simulate the 2D wave equation on a square mesh in realtime to produce drum-like sounds.

Procedure:

Read Study Notes on Numerical Solutions of the Wave Equation with the Finite Difference Method. The main result you will need to simulate is equation 2.18. A matlab program gives a sequential version of the algorithm and plots the Fourier modes of the drum. Another version is tuned to middle C (261 Hz). You can see in the figure below that the simulated sound spectrum (blue) matches the theoretical drum modes (red) up to about mode 8 or 9 (see Physical modeling with a 2D waveguide mesh for details) .

Modifying the boundary conditions, damping, wave speed, drum size, and distrubution of input energy can modifiy the sound of the simulation from drum-like, to chime-like, to gong-like or bell-like. You can modify the program further to include frequency-dependent damping and other effects. This version simluates a long, thin bar struck at one end.

You will probably want to read

for ideas on parallelization.

Student examples running on FPGA:

• 2008: Matt Meister and Cathy Chen wav file.
• 2008: Parker Evans and Jordan Crittenden wav1, wav2

Assignment
1. Build a realtime drum simulator which produces sound from the audio interface.
2. The simulator should solve the 2d wave equation to produce selectable effects. A minimum of two buttons on the DE2 should produce different timbers.
3. Part of your grade will be determined by how many nodes you can simulate in realtime. The grade will be based on the product of ``` (number of wave equation nodes)*(audio sample frequency)```. Each node simulated will require around 10 additions/multiplications. You may be able to use clever shifting schemes to avoid multiplys. Thus the computation rate will be about
` 10*(number of wave equation nodes)*(audio sample frequency)` . For a minimal 10x10 grid at 44 kHz, you will need `1000x44000=44x106` operations/second. For a more accurate 20x20 grid you will need ~`200x106` operations/sec. Clearly some parallel processing will be necessary.
4. You can use fine-grained parallelism or course-grained multiprocessors. You can use NiosIIs or not, as you wish.
5. Record the audio output back into matlab to show that your simulation matches drum modes (under the correct boundary conditions, etc).