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.It seems like there are two variables left to solve for (Port Length and NFR).
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.
I may have used sloppy or poor definitions, sorry: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"
STR = (port radius) / (air particle displacement)
Air particle displacement is a onedimensional length.
Particle displacement = (displacement volume) / (port exit surface)
2 or 2.5 would be a safe starting value, based on my tests.As for the (Big) Initial Minimum STR, what are you considering for a good starting value?
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
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?
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?
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).
Salvatti et al. just add the minimum diameter to the actual port length for "effective length".end correction factor from the paper.
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!
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 🤦.I may have used sloppy or poor definitions
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"?Salvatti et al. just add the minimum diameter to the actual port length for "effective length".
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.I find an opening diameter of 7.6 cm incredibly small
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?
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)?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!).
A realization I think I just had. If we have Dmin, Dmax, and Length then we can compute the Radius (and NFR).
To compute radius given the length of a chord (Lact) and arc height:
neat!
To compute radius given the length of a chord (Lact) and arc height:
Code:
arcHeight = Dmax - Dmin / 2
radius = ((Length^2)/(8 * arcHeight)) + (height/2)
nfr = Length/(2 * radius)
neat!
Yes!neat!
Found that as well!
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.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)?
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
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)
It doesn't "optimize" for anything, but instead, attempts to find the
Here is the (definitely not accurate!) "Named Function" (
Unfortunately, it doesn't really work very well, as it often runs out of allowed max Google Sheets iterations for finding a
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
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
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.
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.
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.Ah, +20db makes for some big honkin' ports!
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?
Thanks - great!I've also hacked together a parameterized FreeCAD model you can download here:
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.
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.
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.
... not worth the hassle, as far as I know and as salvatti+al tested.I'd also love to figure how to add a a golf ball dimple pattern to the port exit round-over
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!
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 😛!not worth the hassle, as far as I know and as salvatti+al tested
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
I agree!It would also look kind of cool
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.
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.
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!
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!
Great!! I absolutely love the look!For fun: I managed to add golf ball-like dimples
Now we just have to find a 3d-printer that manages to not let them disappear in filament slices...
- Home
- Loudspeakers
- Multi-Way
- Investigating port resonance absorbers and port geometries