Acoustic Horn Design – The Easy Way (Ath4)

There really shouldn't be "%f" in the gnuplot path, which is obviously causing the trouble. Here's an example of ath.cfg:

OutputRootDir = "D:\Horns"
MeshCmd = "D:\gmsh-4.6.0-Windows64\gmsh.exe %f -"
GnuplotPath = "C:\Program Files\gnuplot\bin\gnuplot"

1683262022895.png
 
- Looking around for an 18" woofer for my next speakers (to about 500 Hz). Is there a reason why not to choose one from the SB Audience line of subwoofers - https://www.sbaudience.com/index.php/products/subwoofers/ ?

View attachment 1126237View attachment 1126239
(I have just realized that a 21" would still fit...)
Hi Marcel! very interesting project! I understand that there are probably budgetary restrictions in its implementation, but have you considered the option with 18 inch Acoustic Elegance? https://aespeakers.com/shop/dipole/dipole18/
 
There really shouldn't be "%f" in the gnuplot path, which is obviously causing the trouble. Here's an example of ath.cfg:

OutputRootDir = "D:\Horns"
MeshCmd = "D:\gmsh-4.6.0-Windows64\gmsh.exe %f -"
GnuplotPath = "C:\Program Files\gnuplot\bin\gnuplot"

View attachment 1171224

Thanks! The "%f" behind the gnuplot path must be a remnant of earlier trial and error to get Ath to run. I feel sheepish again 🐑.
 
Here's a two-boards design I can share 😉
(Not optimized in any way, it's just a quick try to see what it does.)

648 x 295 x 360 mm, 1.4" throat
View attachment 1094054

H, V, Throat impedance:
View attachment 1094055View attachment 1094057 View attachment 1094058

Code:
; DS8N / Ath 4.9

HornGeometry = 2
Length = 240
Throat.Diameter = 36
Throat.Angle = 0

Horn.Adapter = {
  L = 120
  k = 4
  Width = 120
  Height = 42
  SC = 0
  Segments = 10
  ZMap = 0.5,0.4,0.5,0.5
}

Horn.Part:1 = {
  L = 1
  Segments = 16
  H = {
    r0 = 50
    a0 = 30
    k = 4
    s = 0.78
    a = 34
    n = 4
    q = 0.994222
  }
  V = {
    r0 = 30
    a0 = 5
    k = 4
    a = 23
    s = 0.5
    n = 4.0
    q = 0.994222
  }
  ZMap = 0.5,0.3,0.5,0.9
}

Mesh.AngularSegments = 64
Mesh.ThroatResolution = 5
Mesh.MouthResolution = 14
Mesh.InterfaceResolution = 6
Mesh.RearResolution = 25
Mesh.SubdomainSlices = -2
Mesh.InterfaceOffset = 0
Mesh.WallThickness = 10
Mesh.ZMapElementSize = 0.3,0.6,0.5,0.95

ABEC.SimType = 2
ABEC.f1 = 200 ; [Hz]
ABEC.f2 = 15000 ; [Hz]
ABEC.NumFrequencies = 40
ABEC.MeshFrequency = 1000 ; [Hz]

ABEC.Polars:SPL_H = {
  MapAngleRange = 0,180,37
  Distance = 2
}

ABEC.Polars:SPL_V = {
  MapAngleRange = 0,180,37
  Distance = 2
  Inclination = 90
}

Report = {
  Title = "DS8N - H"
  PolarData = SPL_H
  NormAngle = 0
  Width = 1400
  Height = 800
}

Output.STL = 1
Output.ABECProject = 1
Hello Marcel, thank you for this horn code! sorry for my question, which is probably stupid, but I can't understand: am I doing something wrong, or for this horn/geometry type the rear shape function not available (as well as a rollback)? I've tried to make to check in AKABAK later little bit bigger free standing horn for the 2 inch CD. But I can't. May I ask you to have a glance please?
Thank you in advance!

HornGeometry = 2
Length = 260
Throat.Diameter = 50.7
Throat.Angle = 0

Horn.Adapter = {
L = 120
k = 4
Width = 120
Height = 65
SC = 0
Segments = 10
ZMap = 0.5,0.4,0.5,0.5
}

Horn.Part:1 = {
L = 1
Segments = 16
H = {
r0 = 50
a0 = 30
k = 4
s = 0.78
a = 34
n = 4
q = 0.994222
}
V = {
r0 = 30
a0 = 5
k = 4
a = 23
s = 0.5
n = 4.0
q = 0.994222
}
ZMap = 0.5,0.3,0.5,0.9
}

Mesh.AngularSegments = 64
Mesh.ThroatResolution = 5
Mesh.MouthResolution = 14
Mesh.InterfaceResolution = 6
Mesh.RearShape = 1
Mesh.RearResolution = 5
Mesh.WallThikness = 10
Mesh.InterfaceOffset = 5
Mesh.ZMapElementSize = 0.3,0.6,0.5,0.95

; Rollback = 1
; Rollback.StartAt = 0.95
; Rollback.Angle = 150

ABEC.SimType = 2
ABEC.f1 = 200 ; [Hz]
ABEC.f2 = 20000 ; [Hz]
ABEC.NumFrequencies = 40
ABEC.MeshFrequency = 1000 ; [Hz]

ABEC.Polars:SPL_H = {
MapAngleRange = 0,180,37
Distance = 2
}

ABEC.Polars:SPL_V = {
MapAngleRange = 0,180,37
Distance = 2
Inclination = 90
}

Report = {
Title = "DS8N - H"
PolarData = SPL_H
NormAngle = 0
Width = 1400
Height = 800
}

Output.STL = 1
Output.ABECProject = 1
 
Last edited:
At what distance from a WG is the WG "finished" with its transformation/guidance? Measured from its most protruding z axis point - I suppose that is its formost point from where one measure its depth.

Is it like the depth or width or 1/2 depth...?

//
 
I've tried to make to check in AKABAK later little bit bigger free standing horn for the 2 inch CD. But I can't. May I ask you to have a glance please?
For a rollback in this case, what you can do is instead of defining separate "H" and "V" OSSE profiles, define a single "D" (diagonal) profile as R-OSSE, e.g.:

Code:
D = {
  R = 150
  r0 = 25
  a0 = 5
  a = 35
  r = 0.35
  b = 0.15
  m = 0.8
  q = 4.4
  Inclination = 20 ; [deg]
}

Note the Inclination item which sets the angle of the diagonal (when looking at the mouth from the front).
The old Rollback feature was removed from Ath altogether in the latest releases.

- You can simulate (and use) such horn as free-standing even without a rollback, though. It won't be as good but still pretty usable, IMHO, due to the asymmetry.
 
Last edited:
  • Thank You
Reactions: RomanMarts
In fact I continue working on a discrete-segment implementation (e.g. an octagonal main body part, with a circle-to-polygon throat adapter), as it seemed from the initial simulations that it actually can have a slight edge over a round shape, due to the (moderate) reduction of symmetry (a round R-OSSE can be already very good, no doubt about that). I'm pretty curious how that turns out. Even big horns would be relatively easy to make using that technique (and there were some implementations shown already, I think maravedis made them).

Rectangular horns being a special case (4-sided polygons), but not as good in general, as the "reduction of symmetry" is already too noticeable.
 
Last edited:
  • Like
Reactions: Mazza
For a rollback in this case, what you can do is instead of defining separate "H" and "V" OSSE profiles, define a single "D" (diagonal) profile as R-OSSE, e.g.:

Code:
D = {
  R = 150
  r0 = 25
  a0 = 5
  a = 35
  r = 0.35
  b = 0.15
  m = 0.8
  q = 4.4
  Inclination = 20 ; [deg]
}

Note the Inclination item which sets the angle of the diagonal (when looking at the mouth from the front).
The old Rollback feature was removed from Ath altogether in the latest releases.

- You can simulate (and use) such horn as free-standing even without a rollback, though. It won't be as good but still pretty usable, IMHO, due to the asymmetry.
Thank you for this explication Marcel! for the rollback it's clear now, but as you can see in the code it was deactivated, the key issue was a rear mesh, is that feature has been also removed? :
Mesh.RearShape = 1
Mesh.RearResolution = 5
Mesh.WallThikness = 10

Thank you for your work!
Regards,
Roman
 
The code I provided (which you quoted) certainly produces a rear mesh as well - it's a free standing horn. Did you try that?

Mesh.AngularSegments = 64
Mesh.ThroatResolution = 5
Mesh.MouthResolution = 14
Mesh.InterfaceResolution = 6
Mesh.RearResolution = 25
Mesh.SubdomainSlices = -2
Mesh.InterfaceOffset = 0
Mesh.WallThickness = 10
Mesh.ZMapElementSize = 0.3,0.6,0.5,0.95
 
  • Thank You
Reactions: RomanMarts
Marcel, i saw this part of your code, mentioned in #12,373 , I've changed it as you can see a little bit to my purpose (yes, you're right, with a mistake). I'll try today later with your code as it is. But as i remember, i did it already with a same result. Probably bug on my laptop.
Thank you for your time and patience! 🙂
 
I tried the code you provided (as is) and it works fine. The only issue I see is the very large number of elements (over 17000).

rm0.PNG
rm.PNG


I would suggest this instead to produce something more reasonable (~4200 elements):
Code:
Mesh.AngularSegments = 64
Mesh.ThroatResolution = 6
Mesh.SubdomainSlices = -2
Mesh.MouthResolution = 12
Mesh.InterfaceResolution = 8
Mesh.RearShape = 1
Mesh.RearResolution = 30
Mesh.WallThickness = 10
Mesh.InterfaceOffset = 0
Mesh.ZMapElementSize = 0.3,0.6,0.5,0.95

rm-2.PNG


(I have good experience with placing the interface somewhat behind the mouth edge (inside the horn). This is done with "Mesh.SubdomainSlices = -2", where -2 means the second slice from the end/mouth.)
 
  • Like
Reactions: RomanMarts
It would need to combine a polar response of a source with a HRTF (which "varies significantly from person to person", but I believe that something would be better than nothing). I'd be happy with the first and second order reflections for the start, without any scattering. The room boundaries could be probably handled as a simple frequency-independent damping. But this all would not be a small task, I assume. The principle is simple though and "assembling" the total impulse response would not have to be that difficult.

This could be helpful: http://recherche.ircam.fr/equipes/salles/listen/index.html
Another resource for the task http://research.spa.aalto.fi/projects/sparta_vsts/plugins.html
 
Will the implementation allow to select the number of the "discrete-segments", specifically, an odd number to further reduce the symmetry?
Yeah, that's the idea, although I'm not sure that an odd-number polygon will make a big difference (e.g 8 vs 9 vs 10), but let's see.

P.S. Yes big horns can be made:
I won't comment on that 🙂