Acoustic Horn Design – The Easy Way (Ath4)

Member
Joined 2004
Paid Member
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 1126237 View 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 1094055 View 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:
Member
Joined 2004
Paid Member
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: 1 user
Member
Joined 2004
Paid Member
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: 1 user
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: 1 user
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: 1 user
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
 
Member
Joined 2004
Paid Member
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 :)