Category Archives: Beam tracing

In this post, I'm going to examine a hypothetical small open plan office, and the optimal way to treat the space acoustically. Check out the publication related to some of the theory I'm going to base this on here. I'm going to make the example geometrically simple, so the result will be clear and somewhat intuitive.

The setup

Small open office setup

A hypothetical simplified small open plan office is shown in the picture to the left. The spheres and cubes represent the possible positions for the office workers.

I'll assume that sturdy office screens are placed air-tightly against the wall and floor, so that sound doesn't leak through the edges of the screens. I'll also ignore any sound diffracted over the screens.

Reflections

First degree reflections

The sturdy office screens isolate sounds very well; this means that sound doesn't travel directly from one position to another, but instead through diffraction (which I assume to be negligible) and reflections.

First and second degree reflections

First degree reflections are relatively easy to predict. Second degree reflections are already significantly harder to predict. Third degree reflections are very hard to predict without computer simulations. Third order reflections (and above) are often already far from intuitive.

The goal

I wish to hear as little as possible of my coworkers. The office screens already attenuate direct sound. But this is not enough. If I don't consider the other routes the sounds travel from one position to another, the screens will function as little more than visual barriers.

So what do I want to do? It turns out that early reflections are almost always the most important reflections to consider when one wishes to affect speech intelligibility. Another important factor is the background noise level, but I'll assume that the ventilation provides a decent amount of masking noise. Keep in mind that by early reflections I mean reflections arriving early on in time, without taking any notice of how complicated the path the reflection has traveled is.

I'll make the following goal: I want to get rid of the early reflections as effectively as possible, using a relatively small amount of absorbing material, such as acoustic panels. Let's assume that I can't place anything on the floor, as it would make cleaning (and walking around the room) too difficult. What is the optimal way to place the absorption?

The result

The result

The figure to the left shows the places where absorbing material should be placed, with dark blue representing the most important positions. There are two places where the placement of absorbing material is very central in this example; the ceiling above the office workers and the wall on the opposite side of them. In this simple case, the answer is fairly intuitive. For more complex situations, this is not always the case.

For the topic of this blog post, I made a simulation to demonstrate how the sound insulation properties of building facades can be thought of. Take note that there are some instabilities which I didn't resolve, so running the simulation for too long might jam up your browser. Click the simulation to start it, and again to stop it.

Once again, you'll have the best experience with Chrome.

The simulation

In the simulation, the sound source (represented by a red dot) will emit sound every once in a while. The sound is represented by the small colored dots in the simulation. The color of each dot represents the part of the facade the sound traveled through.

Each time the simulation restarts, the insulation properties of one of the colored parts of the facade is worse than the others. Take a look to see how this affects things.

Discussion

There are a multitude of things at play in the real world. When measuring the insulation properties of a facade, for example, the response of the room is taken into account by "correcting" the result (this involves, among other things, multiple measurement points and measurements of the reverberation in the room).

Predictive calculation methods used by consultants are usually statistical, which in practice leaves lots of details out of the situation. In most cases, though, a statistical approach is enough. The data available for doing the calculations is usually also limited, which makes the statistical approach a very viable option.

Something similar to the method presented here could in theory give better results in cases where the statistical approach isn't that viable of an option. I'm not sure about the simplification of sound traveling "straight through" the wall, though, as the situation is really more complicated than that (even though I know that some commercial software use this approach to model sound insulation).

I have been researching beam tracing for a project of mine for a while now. Beam tracing is a method for calculating reflection paths. I won't go into any details of how beam tracing works, as this is something you can find on google in case you're not familiar with it.

My first attempt at beam tracing was made in Python, about a year ago. I made an algorithm that worked in 3D, but it became exceedingly complicated as I worked on it (mostly related to occlusion and clipping). As it turned out, I was overcomplicating things. The paper "Accelerated beam tracing algorithm" by Laine et al. served as an excellent introduction into how basic beam tracing should be done: as simply as possible. To get a better understanding of the paper, I decided to try to implement some of the very basics in 2D using JavaScript.

The result

Click to place the source, the specular reflections are updated automatically as you move the mouse around. Note that reflections are only calculated up to a certain limit (theoretically there are an infinite amount of reflections).

Firstly, it should be noted that I only utilised the very basic ideas presented in the paper in my implementation (beam trees and accelerated ray tracing). I only wanted to spend a few days on this, which means that there are probably a lot of things which could (and should) be optimised. I spent most of the time pruning out bugs, which at times were very hard to find. I also pushed the MIT-licensed source code to Bitbucket, in the hopes that someone might think of something useful to do with 2D beam tracing in JavaScript!