Calculating window impedance from geometry for a whistle fipple

I’m trying to learn more about predicting whistle and flute frequencies using a transmission matrix model. My goal is to add an acoustic solver to a whistle editor I’m working on.

My current reference is Lefebvre’s thesis “Computational Acoustic Methods for the Design of Woodwind Instruments”.

I’m modeling a simple fipple and bore with no holes and comparing it with a reference instrument (whistle with holes taped over)

I’m trying to do this with just a single cylinder transfer matrix

[P_mouth; Z0*U_mouth] = T_cylinder * [P_foot; Z0*U_foot]

Using (1.3.1) for the equation and (1.3.3) for T_cylinder.

Then using (1.3.2) I take the radiation impedance for the foot vector

[P_foot; Z0*U_foot] = [Zr ; 1]

Multiply and compute a Z_bore = P_mouth/(U_mouth*Z0)

So then I just need to add an impedance for the fipple window Z_mouth, sweep it over frequencies near my target and watch when the imaginary part of Z_total rises across zero to get a predicted frequency.

For Z_mouth my understanding is that Lefebvre treats the embouchure as an extra cylinder length, which he measured. I can perfectly match my reference whistle this way, but it doesn’t actually predict anything from the geometry.

I’m considering printing a few fipples to explore and build a database of window length/width/height → eff_len . I’m sure that’s been done by folks here already and maybe there’s something published, although I haven’t found anything.

Another thing I’ve tried is treating it like a tone hole, with no upstream branch (1.3.14 without the first transfer matrix) which actually gets me within ~7 cents on my one data point. There’s a little squishiness in translating a rectangular window to an effective area and comparing the rectangular chimney to a cylinder but it feels promising.

I don’t know yet which method is going to be better as I start to add more sections and tone holes. Right now, I’m just predicting a single point.

Can anyone share more about these two approaches or if there are others?

I wouldn’t expect treating the window like a tonehole to work very well; the aerodynamics are just too different.

Your other option is experimentation, with as many data points as you can manage. I haven’t checked the literature in a long time, so it’s possible someone has published something of the sort, more likely on recorders than whistles.

A third option, which I’ve been tempted to try but never found the time to pursue, is computational fluid dynamics - mathematical modelling of the air flow. If you’re up for that, CFD Software | SimFlow CFD 2026 - Free Download Now! might be a place to start.

The tuning of a note depends on the air speed across the window. For your experimentation, you may want to review this thread: Blowing machine .

Another thread you may want to review: All whistles play out of tune .

Thank you Tunborough! That was a very helpful suggestion, I found this fantastic paper on recorder window impedance by Ernoult and Fabre who have run multiple FEM sweeps of the various window parameters, including even the labium angle which is an effect I’ve been very curious about. It’s also gives me some hints on how to set up the FEM analysis on my own geometry. This is very exciting! I’ll try to implement this and will report back.

The blowing rig thread is such a good read. You all are having so much fun, I think I’m gonna need to build one as well :slight_smile:

So my reference instrument right now plays around 593hz at some breath pressure right before the jump, based on your guess in “All whistles play out of tune”.

By that definition it’s slightly sharp, but it’s what I get both with Freeman’s fipple and a 3d print of this fipple.

Using Ernoult-Fabre rectangular bend equation with edge angle effect (e.q. 10 + 16 + 23) I get 577.3hz @ 20C which is definitely a reachable frequency with my reference whistle (barely), and it’s 16 cents off what I measured.

Then I read your comment about CO2 Temperature and Humidity, and started investigating my air properties.

I’m using Lefebvre’s air properties right now, which I’m guessing are dry air (I don’t have access to Keefe 1984). So I ran a similar bore in WWIDesigner and humidity going from 0-100% sharpens it by frequency 3hz, but increasing CO2 to 40kppm decreases it by 6hz. So a net -3hz isn’t what I’m missing, but it did make me consider the temperature I was using:

For fun, I blew on a thermometer and got 32C, at this temperature the equation predicts 588.8hz. It’s really easy to hit this frequency with a slightly softer blowing pressure, so it feels like a pretty good prediction to me.

So here are the factors I’m aware are not accounted for:

  • Humidity and CO2. I see three relevant references in the WWIDesigner bibliography I’ll check out.
  • A correct balance between breath and ambient air properties
  • My breath pressure and measuring error. This settles it, I need to build a blowing machine.
  • Inaccuracy of the model itself
  • Differences between recorders and whistle mouthpieces.

Am I missing anything? I’ll start working on toneholes now

I was able to run a pulse-response simulation in both OpenFoam (from SimFlow) and ElmerFEM (Helmholtz FEM) and compute impedance and air column resonance frequences at @20C. The OpenFoam simulation took 7 hours on my Macbook M2 using the rhoPimpleFoam solver (Navier Stokes, lossy, compressible). ElmerFEM took about 30 mins. Ernoult and Fabre mention using FreeFEM, which I’d also like to try next and compare, but I’m out of time for this weekend and I still have a lot of questions.

This was the mesh I used for both, I did no mesh refinement studies so it’s just a guess. After I post processed it I realized I made the window height a couple millimeters too tall, so it’s unfortunately not a direct comparison.

Pressure waves visualized from OpenFoam

I adjusted my TMM model to meet the new window height and ran it again at 20C and have compared the predicted frequencies below. The NS and ElmerFem results are air column resonance frequencies from the impulse, however, and I’m not yet sure if I can directly compare them to the TMM result.

mode ElmerFem OpenFoam TMM + Ernoult/Fabre
1 582.87 Hz 581.87 Hz 570.5
2 1170.34 Hz 1163.24 Hz 1151.2
3 1763.55 Hz 1752.17 Hz 1742.8
4 2355.04 Hz 2335.57 Hz 2344.2


(TMM results are using the lossy numbers)

I’ve had a lot of help from Claude in reading documentation and writing input files. I’m working beyond the edge of my understanding here, and I’m not presenting any of these results as actual solutions. This is a learning process for me, and I’d be very grateful for any feedback or insight that will help me understand what I’m doing.

The main questions I have for this week are:

  1. Are the TMM frequency predictions also air column resonance frequences? If so, why are they so different?
  2. Do I need a model for the jet before I can compare these results with real instruments? How do I do that for each of these models?