"Mechano22" - a small 2-way speakers with linear on-axis and power response characteristics

Hello XMechanik,

The thread does not make reference to measurement methodology as far as I can see, but did you make 5 degree step measurements of the raw drivers from on-axis to 90 degrees out as input for the power response optimizer?
The measurement methodology is basically the same as for VituixCad.

For this design, in the vertical plane I've taken measurements for -170..180 degrees (i.e. full orbit) with 10deg step.

For the horizontal plane the measurements were taken for 0..180 degrees with 10deg step and the option "mirror H" was checked in the task settings.

Phase differences and delays for power response calculations are estimated based on the XYZ settings.
However there is a difference (with reference to VituixCad) concerning on-axis response calculation. In XMachina you need to select one frd per way and load it into node FRD(main) subnode. The "Delay" node must also be completed manually, it is used only to determine on-axis response. (For 3m on-axis distance the delay is only few mm and it does not make much difference if it's neglected)

xm_nodes.jpg
 
Last edited:
@XMechanik - thanks for attaching the project file.

Some questions:
target curves - I notice you trace the early part of the woofer curves from 0-300hz - is that from your on-axis measurements? And it's the same for the tweeter - why does the tweeter care about the low range of the woofer SPL? And then you draw straight lines out to 30khz - what is happening by doing so? I don't quite get it - are we basically just limiting the relative/differential SPL targets so that the summed output is flat? Does the amplitude matter (e.g. 70db on the straight lines) or is only the relative level important?

crosspoints - I see you choose the desired slopes for the highpass and lowpass respectively, using the radio buttons and cutoff frequencies, but you also specify the other slope of each way manually with 42 and 36. What does this do? Why would I care about the lowpass slope of a tweeter in a two-way?

assymetric frequencies - I see you use 3.6k highpass and 2.7k lowpass - did you already simulate this to be complimentary elsewhere?

design task - I see you use 50-50 compliance/simplicity - is this generally best? Also that you allow 30mins per circuit - is this generally enough time vs longer or less than that?

I think the learning curve is a bit steep atm.

Thanks!
 
You have touched on so many topics... I'll try to clarify them but maybe not all at once.

target curves - I notice you trace the early part of the woofer curves from 0-300hz - is that from your on-axis measurements? And it's the same for the tweeter - why does the tweeter care about the low range of the woofer SPL? I don't quite get it - are we basically just limiting the relative/differential SPL targets so that the summed output is flat?

The target spl curve is only one and it's the desired system response. All ways have to sum up to the target spl curve.
Ways do not have separate target curves. But you can attach slope to a way and this slope cannot be exceeded by the response of the way. The slope starts at the crosspoint frequency and can be either low pass or high pass. Assume in a 2-way design there is a crosspoint named 'x1'. In the woofer way task setup you tell XMachina "take the low pass slope for this way from crosspoint 'x1' and do not attach any high pass slope to the woofer (tick 'none')"
In the tweeter way task setup you do something very similar: "take high pass slope for this way from 'x1' and do not attach any low pass slope (tick 'none')".
When crossing ways, slopes can be taken from the same crosspoint (like in the example above) but it's also possible to take slopes from different crosspoints (there could be some advantages by doing so but I'll cover this next time).

Does the amplitude matter (e.g. 70db on the straight lines) or is only the relative level important?
Amplitude does matter. Once again: all ways have to sum up to the target curve, i.e. desired spl amplitude.

And then you draw straight lines out to 30khz - what is happening by doing so?
This is to define flat target system spl response.
The design frequency range upper limit is set to 20kHz in the task settings. If the target curve is defined up to 30kHz (beyond the limit) it's not a problem. It'll be ignored above 20kHz during design,
 
crosspoints - I see you choose the desired slopes for the highpass and lowpass respectively, using the radio buttons and cutoff frequencies, but you also specify the other slope of each way manually with 42 and 36. What does this do? Why would I care about the lowpass slope of a tweeter in a two-way?

assymetric frequencies - I see you use 3.6k highpass and 2.7k lowpass - did you already simulate this to be complimentary elsewhere?
When I launched my first XMachina crossover synthesis with a goal on Power Response, it turned out that getting proper solution was impossible. After closer investigation, the conclusion was that the directivity of the drivers at the chosen crossover frequency was so different that it was not possible to achieve smooth linear characteristics for both PR and spl. When the spl of the system was smooth, there was a bump on the PR. And vice versa, when I increased the weight on the PR, there were ripples on the spl.
First idea was to look for other crossover frequency changing it step by step.
Another idea was to let the machine choose crossover frequency by itself within some constraints. The method gave quite good effects, so it was also used in Mechano22 design.
The constraints were defined by 1) the midwoofer breakup at 7.7kHz which I wanted to keep 30dB (or more) below the system spl 2) tweeter's fs=1.3kHz where I assumed that way response should be also at least 30dB below the system response. These constraints translated, assuming some slopes, to crossover frequency range of 2.7 - 3.6 kHz (see picture). So two crosspoins were created: X_L with 2.6kHz and X_H with 3.6kHz. The low pass slope of X_H was connected to the woofer and the high pass slope of X_L was connected to the tweeter. It's like telling the machine: the crossover frequency can be anywhere between, choose it for yourself to achieve the other goals as much as possible.
X_L_X_H.png


Note that even though slopes are set quite steep, the way responses near the crossover frequency are not that steep. Just because the slopes are steep does not mean that the way responses will also be steep, at least not in the whole range. In XMachina slopes are treated as certain limits that should not be exceeded, but everything that happens below them is allowed, as long as it helps to reach the other goals.
 
  • Like
Reactions: 1 users
Thanks, I think I follow on the SPL curve and the separate slopes. It's like you're telling the program to solve the slope per way to be accurate at FC, but only up to another point, e.g. to cone breakup on the woofer and lower end natural rolloff of the tweeter. Somewhat like the design frequency band controls on the design task screen, except per way instead of the whole system.

I wonder if this could be presented differently, e.g. design bands for each way?
 
Thanks, I think I follow on the SPL curve and the separate slopes. It's like you're telling the program to solve the slope per way to be accurate at FC, but only up to another point, e.g. to cone breakup on the woofer and lower end natural rolloff of the tweeter. Somewhat like the design frequency band controls on the design task screen, except per way instead of the whole system.

I wonder if this could be presented differently, e.g. design bands for each way?
For each way the response is calculated in the entire system design band.
If, for example, you were to limit the design bandwidth of a tweeter from low frequencies, what would be the benefit? You would lose control over the filter attenuation in the stopband, and this is one of the important factors to consider. (or I'm missing something in your approach?)
 
My thought was just to have a different manner to impose the floor/ceiling to the optimization, to avoid wasting cycles solving for filter solutions, and to set those limits with less friction than the db method used in the example and your diagram. Basically, try and make this behavior more turnkey than the manual iterative steps you end up having to do. On the tweeter, what's the difference between saying "optimize from 1500hz" vs "optimize to -30db from 3.6khz"?

All these constraints are chosen by eye, no? So not really automated.
 
My thought was just to have a different manner to impose the floor/ceiling to the optimization, to avoid wasting cycles solving for filter solutions, and to set those limits with less friction than the db method used in the example and your diagram. Basically, try and make this behavior more turnkey than the manual iterative steps you end up having to do. On the tweeter, what's the difference between saying "optimize from 1500hz" vs "optimize to -30db from 3.6khz"?

All these constraints are chosen by eye, no? So not really automated.
You mean a kind of tool-calculator for slopes? For example, entering a crossover frequency and assuming the condition that at some frequency (fs, breakup or anything) the attenuation should be a certain value, the tool calculates appropriate slope and transfers it to the crosspoint settings. And option of calculation for any parameter knowing the three other (for example crossover frequency F1 calculation knowing F2, slope and attenuation). It wouldn't be a problem to implement something like this, except that at the moment I don't know when the next update will be.
After all, the following slope[dB/oct] calculation formula may be used in a spreadsheet:

=2*A1*F2/F1

where
F1-crossover frequency
A1-desired attenuation for F2
This formula is for the high-pass, F1 and F2 should be swapped for the low-pass.
 
I have no solution for a formula.

Now I think XMachina is a really impressive and unique program, and I sincerely applaud you for creating it!
I also hope it does evolve.

Currently, though, I'm an old fart and find it hard to use and hard to understand (the cross points screen here is one example). Without more knowledge, the user gets some unusable circuit solutions and system responses. Trying a 3 or 4 way will be even harder to do for the same reasons.

There is a tough balance between giving the user too many input options to tell the program what you want it to do and not do, versus the original value proposition of this tool, which is automation with minimal input. This would seem to me to need some heuristics and practical rules of thumb to reduce the friction.
 
  • Like
Reactions: 1 user

Mechano23​

Another version of a small and inexpensive 2-way system with linear spl/PR characteristics.

sys_front_kopia.png



Drivers used in the design
  • Scan Speak H2606/920000 LINK
  • SB Acoustics SB13PFCR25-4 LINK

The box is actually identical as in the previous design (i.e. Mechano22 LINK).

External dimensions HxWxD: 290x174x260mm (volume approx. 8 liters). BR tuning about 45Hz (fi=35mm d=145mm).

There is a reinforcement inside that connects the centers of the side panels. It is a piece of plywood with dimensions of approx. 135x40x18mm.

The front panel:
dim_front.png


The box is really simple: glued rectangular panels assembled with overlaps. No panels are detachable, the filters are mounted to the rear panel through the woofer mounting hole.
20230130_125252 — kopia.jpg


20230201_004937 — kopia.jpg
20230201_141024 — kopia.jpg


The box is filled with polyester fiber. To prevent it getting into the speaker basket, I put a thin mesh on the filling.
20230130_125720 — kopia.jpg


I made measurements -180..+180 degrees (V orbit) and 0..180 degrees (H orbit) with a step of 10 degrees. I used a manual turntable.

Filter design. The machine apparently needed a 2uF capacitor which is not on the E12 list. It was assembled connecting two values of E12 in series: 2.7uF and 6.8uF.
schemat.png


Spl on-axis and Power Response characteristics with the target lines (simulation).
XMcharacteristics.png


Filters transferred to VituixCad and slightly modified (series-connected 2.7uF and 6.8uF capacitors were replaced with a single 2uF cap.).
m23vc — kopia.png


L and R filters assembled on plywood scraps.
2filters — kopia.png


L and R spl measurement (f6~=48Hz with reference to the average level)
sysSPL_meas— kopia.png


L and R impedance measurement (minimum 4.1R at 220Hz)
sys_imped_meas— kopia.png
 
Last edited:
  • Like
Reactions: 2 users
Thanks!

OK, I spent more time using XMachina recently and think it's great in many aspects, but my last hurdle is still with the slope setting.

So, on the Mechano23, we have X_W and X_T slopes.
I'm going to say how I understand each setting; please correct me if I say anything wrong, and help answer some questions.

X_W

The SB13 breakup peak is 5-7khz, so the X_W cutoff frequency is set to 4khz which acts as an upper boundary so that XMachina will cross the SB13 below 4khz.

Right Slope (Low Pass) is manually set to 46db/octave - this makes Machina apply something like an 8th order slope to the woofer response around the crossover point and beyond 4khz. Why was this chosen?
XWRightSlopeLowPass.jpg


Stopband depth
is set to 35db, so this makes the woofer track to the 46db/octave slope to this depth until the breakup region, which is suppressed.

The Left Slope (High Pass) is set to off, but what does this even do to the woofer if set to on, e.g. 6db?
When/why would you set both a HP and LP on a single way?

Crosspoint depth is set to 0db -- what does this do? The default is 6db - what does that do? I thought it sets the Q at the crossover frequency.

Reverse phase dip required is set to 0db - does this mean you're telling XMachina to not invert the woofer polarity when solving this way?

X_T
Frequency is 2700hz, so now the crossover point will be evaluated between 2700hz and 4000hz.
Left Slope High Pass is 24db/oct and Stopband depth is 45db - so XMachina will rolloff the tweeter at this rate before the tweeter resonance at 1khz.
X_T.jpg


Reverse phase dip required is 10db -- does this mean XMachina will never use e.g. a 3rd order Butterworth filter where reverse nulls don't occur?

Right slope (Low Pass) and Crosspoint Depth are both set to off again. Same as per X_W, not sure what Crosspoint depth does.

__

Say I have a midrange dome with bad distortion 700hz and below, and bad dispersion above 3khz.
Say I need the HP to be 2nd order or greater 700-900hz + the LP to be 4th order, 3-3.5khz - how would I set the slope(s) for this way?
Do I need to create two slopes for this bandpass?
 
I'll try to cover at least part of the topics, I'll get to the others later.

"So, on the Mechano23, we have X_W and X_T slopes."
X_W and X_T are cross points to be precise. Each cross point contains 2 slopes, one hgh-pass and one low-pass (and several other properties).

" is manually set to 46db/octave - this makes Machina apply something like an 8th order slope"
Slope in XMachina is a boundary that shouldn't be exceeded. It doesn't necessaerly mean that way spl should follow the slope tigthtly. Everything below the slope is OK from the slope checkout perspective.

"Why was this chosen?"
To get 35dB attenuation at cone breakup. It was calculated as follows:
4kHz is assumed as max frequency where the woofer can operate, it should start to roll off after.
At 6kHz frequency cone breakup becomes evident. Assume 35dB attenuation there.
4kHz and 6 kHz are 0.75 octave apart. 35dB/0.75 octave=46dB/octave.

"The Left Slope (High Pass) is set to off, but what does this even do to the woofer if set to on, e.g. 6db?"
It does nothing if it's not referred in the woofer way setup. There is a box in way setup window where you select a cross point from which the way should take its high pass slope. For the way of woofer tick 'none'. No reference to the high pass slope means no high pas slope.

"Stopband depth is 45db - so XMachina will rolloff the tweeter at this rate before the tweeter resonance at 1khz."
It's not only about the resonance, It's also to prevent LF signal leaks to the tweeter. 45dB attenuation was chosen as a boundary but in the implemented design it appeared to be far better.

"Reverse phase dip required is set to 0db - does this mean you're telling XMachina to not invert the woofer polarity when solving this way?"
that's a method to switch off this criteria. (btw, this criteria used only if two adjacent ways have reference to the same cross point, so even if it was set on it would not be used in this configuration.)

"not sure what Crosspoint depth does."
it defines y position where the slope starts. 0 means the slope starts exactly at the target curve level. 6dB would mean 6dB below the target curve level (negative value e.g. -6dB would mean 6dB above the target curve level). In the cross-point setup window click the question mark button to get and sketchy reminder of what's what.
 
  • Like
Reactions: 1 users
Ok thanks a bunch. I think I understand a lot better.

Right, so this my stumbling block - say I have ideal drivers, flat response and resistive in passband.

So with a 2-way, the only way I could get fairly close to an ideal SPL and phase response is to set the slopes something like this and hope for the best.
2wperfect.png


And for the mid dome example in a 3-way, again say I have ideal drivers, I'd have to set the slopes/crosspoints something like this:
3wxp.jpg
 
I think the current control set makes this challenging; ultra-high friction; very hard to do without a visual plot preview.

XMachina has an amazing solver functionality (that could surely solve individual way SPL targets tracking textbook curves) but ultimately, say this was MS Paint, all you got is the straight line tool and not the curvy line tool
straight line vs curve.jpg


Another issue for the use-case of suppressing cone breakup or tweeter protection / Fs resonance,
we essentially draw vector boundaries from fc + depth + slope + stopband depth

I'm thinking a more pragmatic thing to say is -- follow this curve target, deal with the breakup in this region with a normative series or parallel notch.
It would seem to avoid a lot of user friction and eliminate a lot of solution cycles out of bounds from the target.
 
Last edited:
"XMachina has an amazing solver functionality (that could surely solve individual way SPL targets tracking textbook curves) "
Actually you can synthesize individual SPL textbook curve for a way. For each way setup a 1-way task where the textbook curve is the system target. No cross-points, no slopes. But how would it then be assured that spls for ways sum up to the desired system target spl curve and power response target? That would be like trying to find a line that contains three different points. Sometimes possible in most cases not.

"but ultimately, say this was MS Paint,all you got is the straight line tool and not the curvy line tool"
When all the curves below the straight line are allowed, this opens huge space for circuits modifications in order to get the other targets (sys spl, system PR, system impedance). On the other hand if the curves are tied to the textbook curves (or any other curves), the possibilities of making changes in the circuits are virtually nil.