Author Archives: Kai

Predicting the absorption coefficient of micro-perforated plates

Aluminium Honeycomb perforated panel

Aluminium Honeycomb perforated panel

I was playing around with the topic of this blog post on my laptop in the train a while ago (while reading the paper "Predicting the absorption of open weave textiles and micro-perforated membranes backed by an air space" by Kang et al), and thought it might make a good topic for a blog post.

Micro-perforated plates

What are micro-perforated plates/membranes? I'll just quote Wikipedia's concise explanation: a thin [...] plate, made from one of several different materials, with small holes [...] in it. An MPP offers an alternative to traditional sound absorbers made from porous materials.

The basic idea is this: because the holes are so tiny, sound gets absorbed while passing through the holes due to friction. A nice example of micro-perforated plates are transparent membranes, which you can see through while they still offer sound absorbing qualities.

Designing micro-perforated panels

I wrote up some equations from the paper in JavaScript. The equations give the absorption coefficients for normal incident sound and a diffuse sound field. Note that the following equations are only meant for designing flat, micro-perforated plates with a relatively small closed air space behind them. Also, I take no responsibility for any errors in the calculations, although I noticed that the calculations did seem to agree with the plots in the paper.

This is currently for non-metallic substances only (as given by the paper), let me know if someone out there wants me to implement metallic membranes as well (or equations given by some other paper)!

If you're at a loss as to what to try, you can try the following values: hole width: 0.3 mm, hole spacing: 3.3 mm, cavity depth: 0.1 m, mass: 0.19 kg/m2, thickness: 0.17 mm.

Synthesizing thunder using JavaScript

Have you ever considered what actually causes the sound of thunder? The past summer brought with it a few thunder storms, which got me thinking about a topic I find very fascinating and cool: simulating thunder!

The simulation

Note that the simulation can be quite heavy for more complex lightning strikes (some are even unrealistically complex) and for longer distances from the strike. Calculating the result can take quite a bit of time, depending on your computer. A sample frequency of 22 kHz is used and the simulation is monaural. The lightning consists of a single discharge between the cloud and the ground.

If the simulation appears to jam up, please reload the page. Once again, I recommend Chrome for the simulation. Take a look at the source code here - sorry, I was somewhat lazy with the commenting of the code!

What is lightning?

Let's use the definition of lightning given by google:

The occurrence of a natural electrical discharge of very short duration and high voltage between a cloud and the ground or within a cloud, accompanied by a bright flash and typically also thunder.

I believe the geometry of the lightning channel becomes clearer when one considers the part of the following video starting at 1 min 15 s:

Note that the person in the video talks about the lightning consisting of "roughly 50 yard segments". These segments, referred to as the tortuosity of the lightning channel, are usually between 5 and 70 meters long [Rakov et al. 2003].

In our case, let's simplify the lightning as consisting of pretty much straight lines, with a random length of 5 to 70 meters. The lines zig-zag constantly, with a random variation of about 16 degrees between each line. Also, we'll need to add a small statistical deviation in the vertical direction.

Here is an example of what this looks like (calculated in 3D, and projected to 2D):

Lightning channels generated using a simple algorithm

Lightning channels generated using a simple algorithm loosely based on the statistics given by Rakov et al.

What causes thunder?

Ok, so what causes the sound of the lightning? Let's consider what happens when the discharge happens. We very quickly warm up a channel of air (the orange area in the cut plane image below). As the temperature in the channel rapidly rises to ~24000K [Orville, 1968], the pressure of the air in the channel rises enormously (to about 10^6 Pa). This pushes the the air outwards at speeds exceeding the speed of sound, causing a shock wave expanding at roughly 3000 m/s [Few, 1986].

The shockwave caused by lightning

The shockwave caused by lightning

After this, the air in the channel quickly cools down. The pressure behind the rapidly expanding shock wave will momentarily drop below atmospheric pressure due to the inertia of the outwards traveling air mass. The shock wave will travel some distance (the "relaxation radius"), after which it will dissipate, leaving behind what is called the weak shock wave. This weak shock wave can now be plotted as a function of pressure:

Weak shock wave [Brode, 1955]

Weak shock wave [Brode, 1955]

Never mind the scales for now (y-axis represents atmospheric pressure), but note this: the pressure wave will propagate towards you from the lightning so that the "sharp" part of it will reach you first.

What is thunder?

Ok, so now we now that the really hot lightning channel causes a traveling pressure wave. We also know that changes in pressure equals sound. So what we're hearing is the pressure waves caused by the rapidly heating air in the lightning channel.

But what causes the rumbling sound? Why does the thunder keep on rumbling for many seconds? What makes a close lightning strike sound (sort of) like a clap, while a distant strike can only be heard as rumble?

Here are some of the reasons:

1. The size of the lightning is huge

Sounds from different parts of the lightning will arrive at different times

Sounds from different parts of the lightning will arrive at different times

Consider a lightning strike some distance from you, as in the image above. If you measure the distance to each part of the lightning, you will see that the distance can vary by miles/kilometres! Considering that sound only travels at about 340 m/s (1,125 ft/s), there will be multiple seconds between when the sound from the nearest part of the lightning strike arrives at your position, as compared to the sounds form the more distant parts.

The situation can also be thought of according to Huygens' principle, which states that any source can be thought of as a series of spherical sources (kind of like in the image above). This is how the simulation, presented at the beginning of this post, works. The lightning is divided into multiple small segments, each modeled as a separate spherical sound source.

2. Sound attenuates by distance

It is, perhaps, obvious that more distant sound sources are quieter. But, additionally, it should be noted that higher frequencies attenuate much faster! Thus, when sound travels a distance, it gets "muffled" by air. Wolfram alpha is a great resource for this, it calculates this attenuation according to ISO 9613-1:1993. This causes distant sounds to "rumble" while the closest sounds are sharp and discernible.

3. Other stuff

There are loads of things at play in real life (for example atmospheric diffraction, which is the reason for the thunder sometimes being completely inaudible even when the lightning strike is clearly visible). If you're interested in learning more about the topic, I found the following books useful:

  • Vladimir Rakov & Martin Uman - Lightning, physics and effects
  • Geophysics study committee - Earth's electrical environment
  • Hans Volland - Handbook of Atmospheric Electrodynamics, Volume 2

4. Future ideas

It would be really cool to make the simulation in stereo, so that the sounds from the lightning channel are panned to their respective position  (or even using head related transfer functions!). If someone else is up for the task and has some knowledge of acoustics and DSP, feel free to contact me! 🙂

Simulating cymatics

Due to popular demand I put the source for the script I used here up to github:

I was browsing around youtube when I stumbled upon this nice video on Chladni patterns (there are quite a few there). Here's the video, it's apparently part of some demonstration for students:


Sound propagates in solids, similarly as to how it does in air. If we were to slow down the plate in the video above, we would see it vibrating at the frequency of the sound you can hear being played (check another post of mine).

Just as is the case in air, standing waves can form in solids. In solids, the details are quite different, but the basic principle holds. When a standing wave forms, there are locations where the amplitudes of the vibrations have their maximum values, and locations where the amplitudes of the vibrations are very close to zero.

Here's a gif with exaggerated deformations to illustrate how the circular pattern you can see in the beginning of the video forms:

Chladni pattern formation

Chladni pattern formation

Imagine placing a lot of small particles on the surface in the image. The particles would be tossed around, until they finally find a resting place close to the red circle. This is how all of the patterns are formed, but the way the plate vibrates varies with frequency.

Simulating cymatics

The experiment setup is very clearly defined; a rectangular steel plate is clamped in the middle. This makes for a perfect case to test out some finite element analysis of plate structures!

I used steel as the material of choice for the simulation and Reissner-Mindlin bilinear plate elements, with a lumped mass matrix. I programmed the simulation using Python. By tweaking around with the material properties and dimensions, I managed to roughly match the frequencies to the experiment from the first video. I think it's really cool how the simulation matches the patterns you can see in the video (up until a point where it's apparent that there are some asymmetries in the setup).

I made a gif out of the video too, just for the hell of it.

You might have noticed that there are a whole lot of patterns there, which aren't visible in the video. The standing waves which create the patterns form much more strongly when the frequency is closer to the modal frequencies of the plate (when the plate resonates). The following plot roughly shows these resonant frequencies. The y-axis doesn't really mean anything significant here, so just pay attention to the peaks. Also, damping hasn't been taking into account here, making the peaks unrealistically sharp. When the excitation frequency is close to one of those peaks, Chladni patterns should be clearly visible.



The frequencies these patterns form on depends completely on the material properties and dimensions of the plate, if we assume that the basic setup is the same (a rectangular plate is clamped at the middle). There are a lot of structures which can be analysed in a similar way (albeit with a more complex analysis for applicable results): floors, windows, doors, the list goes on and on. In this case, the results were very consistent with the video as the physical problem was very clearly defined.

A tool for solving 2D structural systems

If you're not that into structural mechanics, feel free to just look at the pictures :-). This post is about a tool that will enable you to calculate how structural systems behave in two dimensions. In the (hopefully not that distant) future, I'll enable dynamic calculations.

Deformed pin-jointed truss

Deformed pin-jointed truss

I haven't shared anything in a while, so I thought I write a status update on this cool (at least I think it is cool!) tool I've been working during the last few months, along with other projects. It's based on an old idea, which I thought I'd finally realize properly. The tool is able to do finite element analysis of simple structural systems in 2D. There are quite a few things I'm planning to do differently as compared to the tools out there. For example, the tool will be able to solve symbolic problems (at least simple ones) along with numerical ones.

I was thinking of making a very early beta version of the tool available along with this post, but (as is very often the case) things have taken a bit longer than expected, and other projects have been taking up my time (stay tuned for updates related to at least some of these!). So the very-early-beta release still needs some tweaking. Also, I'm not quite sure about liability issues with releasing a not-so-perfectly working version of a tool such as this. We'll see.


Some theory:

  • I've currently implemented basic functionality for solving structural systems consisting of beams (with axial and/or moment loads according to my previous post)
  • A linear elastic problem (static) is solved

The logic has been implemented in such a way that it should be relatively straightforward to extend the functionality to problems involving small amplitude (linear) vibrations, for examining vibrating systems in 2D. I'm really looking forward to getting to play around with that phase of the project. But, first things first, I've got to get static problems working properly and without any glitches.


Here are some examples of simple linear static beam structures the tool is currently able to give the correct symbolic answer to. Some background:

  • The cases have been done using a nifty GUI, which I'm quite happy with
  • L is half of the width of the figures (often the length of the beam)
  • The magnitude of the force is F
  • All cross sectional properties are given by E, I and A
    • Except for the blue bars, which have a cross sectional area of 2\sqrt{2}A
    • The connections are assumed to align with the neutral axis
  • A hollow node represents a hinged connection
  • A filled node represents a stiff connection
  • The positive x-axis points towards the right
  • The positive y-axis points downwards

The nodes are numbered from the left to the right, so just count them from the left if you want to validate the results. There are quite a few analytical formulas available for these situations if you try searching online.

Case 1

Case 1, \left[\begin{smallmatrix}{}x_2\\y_2\\\theta_2\end{smallmatrix}\right]=\left[\begin{smallmatrix}{}0\\\frac{F L^{3}}{192 E I}\\0\end{smallmatrix}\right]

Case 2

Case 2, \left[\begin{smallmatrix}{}\theta_1\\a_3\\\theta_3\\x_2\\y_2\\\theta_2\end{smallmatrix}\right]=\left[\begin{smallmatrix}{}\frac{F L^{2}}{16 E I}\\0\\- \frac{F L^{2}}{16 E I}\\0\\\frac{F L^{3}}{48 E I}\\0\end{smallmatrix}\right]

Case 3

Case 3, \left[\begin{smallmatrix}{}x_2\\y_2\\\theta_2\end{smallmatrix}\right]=\left[\begin{smallmatrix}{}0\\\frac{F L^{3}}{3 E I}\\\frac{F L^{2}}{2 E I}\end{smallmatrix}\right]

Case 4

Case 4, \left[\begin{smallmatrix}{x_3}\\{y_3}\end{smallmatrix}\right]=\left[\begin{smallmatrix}{}- \frac{F L}{3 A E}\\- \frac{2 F L}{3 A E}\end{smallmatrix}\right]

Case 5

Case 5, a_3=\frac{\sqrt{2} F L}{A E} (positive to the left)

The future

The results coincide with solutions such as these, which means that everything is working properly (woohoo)!

So far, the GUI has been the most demanding part of the project. There's still a lot to be done. Static calculations might be something the average structural engineer finds even more useful than dynamic calculations, so those are currently my top priority. Still, the really cool stuff (in my opinion) will be possible once you'll be able to investigate dynamic systems, which is helpful for both acoustical/vibration consultants and structural engineers alike!

Deformed beams

Deformed beams