Investigating port resonance absorbers and port geometries

It seems like there are two variables left to solve for (Port Length and NFR).
Yes, but NFR can be determined from port length and min/max diameter. So the formula can also be resolved for tuning, and length also influences NFR at the same time.

I am not yet sure if my mathematic skills allow integration of tuning correction values based on @augerpro 's and my tests. If not this will be another value to be approximated by iterations.

only considering radius and displacement in the STR-related computations results in a Dmax with a volumetric unit, e.g, something like "8.19 Liters"
I may have used sloppy or poor definitions, sorry:

STR = (port radius) / (air particle displacement)

Air particle displacement is a onedimensional length.

Particle displacement = (displacement volume) / (port exit surface)


As for the (Big) Initial Minimum STR, what are you considering for a good starting value?
2 or 2.5 would be a safe starting value, based on my tests.
Depending on the final length/diameter ratio the STR can be lowered to ~0.5 (for long ports).
 
Last edited:
Here is a variation of your port 240824-varNFR_calculator sheet, that requires only Enclosure Volume, Tuning frequency (without correction factor), and Max SPL and outputs a Length, Suggested Minimum Roundover, and Rfit (curve radius):

https://docs.google.com/spreadsheets/d/1abjU-SqfFSmDG6_kIpPa1t-n-zGDbRxpCxuRZiIncD4/edit?usp=sharing

It doesn't iterate, it doesn't attempt to solve for NFR, and it doesn't attempt to reach any optimum value. I'm not even sure if its computed values are consistent with your sheet 🙂

Feel free to take it as your own if you find it to be a useful starting point for your updated optimizer sheet. Obviously there is still a lot missing here, but I think I've reach a dead end, knowing what I know.

Side: I do wonder what the "Magic?" number represents. Do you know?

1738200365719.png
 
  • Thank You
  • Like
Reactions: Gaga and stv
Ah, just found that the magic number here is the end correction factor from the paper. I wonder if your correction adjustment might have a near-linear relationship with theirs (in which case a replacement value might be found), or if it is dependent on some of the other variables (in which case an equation for the curve needs to be approximated).
 
end correction factor from the paper.
Salvatti et al. just add the minimum diameter to the actual port length for "effective length".
Thanks for chiming in and posting the spreadsheet!
I'll have to go into the details but for a 110 dB 30 Hz tuned enclosure i find an opening diameter of 7.6 cm incredibly small. I will have a look over the weekend!
 
I may have used sloppy or poor definitions
It was my fault. I used FreeCAD's spreadsheet to make use of its unit safe computations, and I entered one of the units wrong. That resulted in a volumetric unit for Dmax 🤦.

Salvatti et al. just add the minimum diameter to the actual port length for "effective length".
Ah, yeah, I guess calling it "end correction" isn't accurate, as they don't have a constant for "end correction" that applied to the length, but it is instead a function of NFR and Dmin; so the 0.576 is more like an "area correction factor"?


I find an opening diameter of 7.6 cm incredibly small
You are likely correct here. I think at 41.11 liters, Dext of 7.6cm, NFR 0.3395, and ~14.8cm length it should tune to ~30 Hz (using your spreadsheet to check), but, yeah, turns out the SPL level isn't being utilized correctly in these calculations.

The calculations use Dmin = Dmax/1.5, so using NFR to compute Aeff like it is, and then using Aeff to derive the Length just doesn't work, as the 1.5 ratio is complete ignored at this point. Oops!

I think I understand what you are going for now (though still fuzzy on all the details): Frequency, Volume, Max SPL, and a starting STR can all be used together to derive Dmax, and then from there it is possible to derive the length without involving NFR at all. Then with DMin, DMax, and Length we can get Rfit, which gives us an initial NFR.

Once an initial NFR is derived we can start to reduce STR closer to an ideal value, while also checking that NFR remains in an ideal range. Does that sound about right?

Strouhal number (STR) is an established parameter of oscillating flow dynamics. In the case of loudspeaker ports it is the ratio between port exit radius and the respective peak air particle displacement (but not peak-peak!).
Additionally, I think I just glossed over your "but not peak-peak!" comment, in regards to the STR:SPL relationship. Is it accurate to say that an "optimal" port is optimized not for peak SPL (say, the SPL at which the THD is considered unacceptable), but closer to an ideal SPL (say, the peak SPL at normal/typical listening, or maybe +3db higher to leave some headroom)?
 
Additionally, I think I just glossed over your "but not peak-peak!" comment, in regards to the STR:SPL relationship. Is it accurate to say that an "optimal" port is optimized not for peak SPL (say, the SPL at which the THD is considered unacceptable), but closer to an ideal SPL (say, the peak SPL at normal/typical listening, or maybe +3db higher to leave some headroom)?
Hmm, since the lower the fundamental the wider its BW in perception if not in actuality; seems like we ideally need at least a low enough vent mach to handle THX's +20 dB dynamic headroom.
 
  • Like
Reactions: Kravchenko_Audio
Is it accurate to say that an "optimal" port is optimized not for peak SPL (say, the SPL at which the THD is considered unacceptable), but closer to an ideal SPL (say, the peak SPL at normal/typical listening, or maybe +3db higher to leave some headroom)?

In addition to GM's post:
It is certainly a personal preference/compromise question.
I would suggest to relate the desired max SPL to be reproduced by the port with low compression (and therefore without turbulent and annoying noise) to the max sensible displacement of a woofer and therefore the planned SPL capabilities of a speaker system.
It also depends on the location/orientation of the port (rear port turbulence is less audible), the music to be reproduced (masking eventual noises), the SPL (very loud music will mask noise).
For me a turbulent whistle and/or heavy compression at one single but important peak in a piece of music can ruin the whole experience.
 
Ah, +20db makes for some big honkin' ports! At least with the Dmax calculation I'm using (ChatGPT helped out here, so it's certainly not correct!).

I've tweaked my original spreadsheet to be iterative: https://docs.google.com/spreadsheets/d/1abjU-SqfFSmDG6_kIpPa1t-n-zGDbRxpCxuRZiIncD4/edit?usp=sharing

It uses Newton’s Method over a quadratic version of the Helmholtz formula to solve for (er, estimate) Length.
It doesn't "optimize" for anything, but instead, attempts to find the Length for a port with a Dmax that can handle the given SPL @ STR, when Dmin is Dmax/1.5.

Here is the (definitely not accurate!) "Named Function" (SOLVE_LENGTH) it uses:
Code:
=LET(
  pi, 3.14159265358979,
  w, 2 * pi * f,
  Dmin, Dmax / cr,
  DeltaD, Dmax - Dmin,
  Amin, (Dmin / 2) ^ 2 * pi,

  nfr, 4 * guess / (2 * (guess^2 / DeltaD) + 2 * DeltaD),
  Aeff, (1 + magic * nfr) * Amin,
  func, (Aeff * ss^2) / (w^2 * Vb) - guess,
  dfunc, (1 + magic * 4 / (2 * (guess^2 / DeltaD) + 2 * DeltaD)) * (ss^2 * Amin) / (w^2 * Vb) - 1,

  dfunc_safe, IF(ABS(dfunc) < 0.0000000001, SIGN(dfunc) * 0.0000000001, dfunc),
  new_guess, guess - (func / dfunc_safe),

  adjusted_guess, IF(new_guess < 0, MAX(0.01, guess * 0.5), new_guess),
 
  IF(ABS(guess) > 1000, "ERROR: Diverged",
     IF(ABS(func) < 0.0001, guess, SOLVE_LENGTH(adjusted_guess, magic, Dmax, cr, Vb, f, ss))
  )
)

Unfortunately, it doesn't really work very well, as it often runs out of allowed max Google Sheets iterations for finding a Length within tolerance (0.0001 meters) or diverges and can't find it's way back (which probably indicates a problem with my calculations). When it fails you have to manually update the STR or SPL values to find something that works, but if you have to do that then the port clearly isn't meeting the desired criteria!

Additionally, it only seems to get close to @stv's calculator sheet results, and I can't figure out why I can't get it to match exactly. It also doesn't attempt to compute the Length using the "stv corrected" frequency.

So if anyone has the Maths skills to fix the calculations, please do! I don't need credit or attribution (credit should go to @stv ), but please do share your knowledge!

I've also hacked together a parameterized FreeCAD model you can download here: https://drive.google.com/file/d/1fIWx7XeLinQFcpMK8J53jd5i7emDmsWg/view?usp=sharing

You can tweak the requisite Dmax, NFR, Length, Radius, and Roundover params, but also wall thickness, screw dimensions, screw count, and flange dimensions. If you print anything using this please do share some photos and feedback!

Note on the inner flare design: probably a waste of filament, but it seems like it might not be a horrible idea to make the transitions from one plane to the next smooth; so this design is a little smoother than just flipping the direction of the inner flange edge 180 degrees around a 3mm (wall thickness) radius.

1738786983566.png
1738787005702.png
 
Ah, +20db makes for some big honkin' ports!
Yeah, though in retrospect a bit misleading in that for THX this equates to 115 dB @ the listening position or 2/3 back if multiple rows, so would need differing specs based on distance that's falling @ 6 dB/doubling distance or just pick a max SPL based on lowest efficiency (sub)woofer @ 'x' distance and use multiple vents as required.
 
I am a FreeCAD idiot. 20 years ago I was reasonably adept at CAD but I got lazy and programs moved on. Too much of my work is covered under NDA's so I won't work with "cloud" based software. I like the idea of FreeCAD, so this is a great starting point for me I think. Anywhere that shows me how to get that modify parameters window? From reading a little I can export an STL for printing? If I understand this correctly?
 
I've also hacked together a parameterized FreeCAD model you can download here:
Thanks - great!
My own freecad model in post #646 was only very rudimentarily adaptable via sketch dimensions. So I appreciate your model very much!

Using freecad 0.21.2 (old - I know) I could not change parameters in the spreadsheet and recalculate the model, however.
Do I need the new freecad version?

Also, I strongly suggest to extend the internal roundover more than you drew in the freecad model. Have a look at my model, linked above.
 
  • Like
Reactions: Kravchenko_Audio
I hadn't used 3D CAD software, other than tinkering in SketchUp mostly using their drag and drop objects, until about 6 weeks ago. It's got a step leaning curve, but once you figure it how to navigate the 3D window, and how it "thinks", it's not so hard to do the basics.

The gist: you need a "Body" (blue steps icon) to create an object. You can add many bodies to a "Part" (Yellow steps icon), which is basically just a folder for storing other things, like bodies, spreadsheets, etc.

There are "workbenches" that enable certain tools. The ones I use most are Sketcher, Part design, and Spreadsheet.

Spreadsheet is where the parameters are located. To open the Port spreadsheet you just need to double click on it, it should be in the list of objects on the left side of the screen (it is by default for me, at least).

A Spreadsheet is like a slow and dumb version of Excel. It can't do recursion, so I tried implementing row-by-row iteration for the port calculations but it just became unusably slow.

The sketches in my Port model are nested within the operation that uses them, like Revolution and Pocket. A Sketch is a 2D outline you can later use to create new objects, remove from objects, create new coordinate planes, etc. Double click on a sketch to edit it.

You can export to many formats, including STL, by selecting all of the Bodies you want to export (in this Port file there is only 1 body), and then selecting File -> Export.

Pro tip: close the Start window, open the Port spreadsheet, then select Windows -> Tile , from the top menu bar to get a side by side view of the spreadsheet and 3D view at the same time.

If you manage to get proficient at FreeCAD and can figure out how to add a parameterized double helix extrusion to the outer walls of the radius, I think that'd be a great way to reduce overall wall thickness while adding some additional rigidity (to help reduce print times). I couldn't figure it out.

I'd also love to figure how to add a a golf ball dimple pattern to the port exit round-overs in a way that can be parameterized. I wasn't entirely satisfied with the testing methodology they used in the paper, so I'm curious if adding dimples to only the round-overs will help reduce vortex shedding.

Let me know if you have any other questions! And keep in mind that I'm new to FreeCAD myself, so the ways I've done things are likely not best practice.
 
  • Like
Reactions: Kravchenko_Audio
My own freecad model in post #646 was only very rudimentarily adaptable via sketch dimensions

Your model actually helped me understand how to use sketch + revolution to make objects with complex shapes. I had only used Revolutions to punch holes in things, prior to seeing it used in your model. So thanks for sharing it!

I could not change parameters in the spreadsheet and recalculate the model

Hm, I don't know. I'm on 1.0.0. So maybe things have changed enough and are now incompatible with older versions :-/

I strongly suggest to extend the internal roundover more than you drew in the freecad model

Ah, I don't know why I ignored that edge and instead focused on smoothing out the backside of the internal flange 🤦 . Increasing the roundover at this edge to 20% of Dmin (as suggested by the salvatti+al paper) will make the entire diameter of the port quite a bit larger, as the baffle hole size will have to be large enough to accommodate the larger internal flange, so the outer flange will also have to be extended.

Splitting the port into two pieces an option here. I think I'll give that a try soon. This should allow for a slightly smaller baffle hole and external flange diameter as well, which is nice aesthetically, but also for print times!


1738855981525.png


not worth the hassle, as far as I know and as salvatti+al tested
Perhaps, but they only tested adding bumps to the entirety of the port walls; I'm curious if keeping the walls smooth, but adding dimples to the roundover might be beneficial. It would also look kind of cool 😛!

From the Maximizing Performance from Loudspeaker Ports paper:

To test the hypothesis, we constructed five copies of the best performing port (NFR = 0.5) and then affixed precision glass beads of various sizes, ranging from 1 to 2.5 mm, to the inside port walls
 
Not sure of the best or proper ways to make FDM printed parts fit together, but here are screenshots of a 2-piece version of the port with the suggested large internal round over. It uses tongues and grooves with some little bumps on the tongues to make it snug (could go further and add recesses to the grooves for more of a snap fit). It would need a bunch of print+test+tweak cycles to get it working, of course, and even then, FDM tolerances from one print to another will probably be a constant headache.

Another way could be mating the two with threads, but tolerances are going to be even more of a problem there.

Embedding neodymium magnets could also work, but now printing is even more complicated and requires more than just a printer.

Ideas from those experienced with FDM printing (and locking mechanisms) would be very much appreciated!

p.s., @Kravchenko_Audio these renders are from an addon called Render Workbench using OSPray Studio as the rendering engine.


1738871420136.png

1738872225816.png
 
For fun: I managed to add golf ball-like dimples, but making them automatically adjust to the port dimensions would be very difficult :-( . I think it'd better looking if the dimples slowly tapered off both within the port, and on the face of the flange.

Also, golf balls dimples are very complex and highly optimized. The dimples have different sizes, spacing, and depths. Part of the reason is the geometry of a sphere doesn't allow for equally spaced equal-sized dimples, and the other reasons are drag and lift optimization. Just slapping some dimples onto a shape and expecting aerodynamic changes is not realistic.

Adding dimples to a radius around the internal of a cylinder like on a port does allow for equidistant and equal-sized dimples, but it isn't possible for them to be equidistant and equal-sized on the flange or inner port walls, as their geometries don't allow for it.

Fun fact: the United State Golf Association is considering making changes to the rules in order to limit the aerodynamics of golf balls!

1738944901715.png