• WANTED: Happy members who like to discuss audio and other topics related to our interest. Desire to learn and share knowledge of science required. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

DIY 3D Speaker Scanner - the Mathematics and Everything Else

Another comment: When you solve the linear system (probably with regularization if it is underdetermined) you can plot the rows of the matrix inverse on your grid. You can think of each row as integration weights for each basis function (spherical harmonic). If the system is well conditioned these weights should be smoothly varying, and kind of look like the spherical harmonic evaluated on the grid. If you instead get very large weights with alternating signs then the method is unstable for some reason, and the fit will be strongly affected by noise.
This starts to make sense now. It only depends on the spherical harmonics and where those are sampled. Were you (only) trying to determine whether the method was stable?
 
but even now you can see (I think?) that the edges of the cylinder are often weighted strongly.
Is that simply caused by the fact that the range is largest and the sound pressure will be small w.r.t. the sound pressure in other positions? If that is the case, a spherical grid might have some advantages.

Should I try a spherical grid for my new measurement?
 
This starts to make sense now. It only depends on the spherical harmonics and where those are sampled. Were you (only) trying to determine whether the method was stable?
It depends both on the spherical harmonics and on the grid. If you simply solve the least square problem without weighting you will have more weight on parts of the grid where you have higher grid density. It looks a bit worrying that you have such large weights at the center of the cylinder caps. I suspect this comes only from the fact that you have more points there, or is it physical? It's possible to add weights to remove this effect, but I don't know what the best way is to generate the weights for this problem.
 
Is that simply caused by the fact that the range is largest and the sound pressure will be small w.r.t. the sound pressure in other positions? If that is the case, a spherical grid might have some advantages.

Should I try a spherical grid for my new measurement?
I think it would be fantastic to have both grid types for the same measurements, then you can compare the fits for both cases and see if you get the same result. Also if you make very dense measurements you can experiment with using half the points etc.
 
Makes sense. Was already thinking about it. I do have to make it possible though...

At least I won't hear all the sweeps for hours when I get the setup in the barn.
 
Plugin 'framework' coming in handy:

1717846182455.png

The points are distributed (roughly) evenly on the sphere. I sorted them so the measurement sequence is handy: at every angle it is going up and when it's done it moves to the new angle and starts at the bottom again. The even spacing algorithm does not result in this on its own.

Still have to determine whether the speaker fits inside. I might have to blow up the sphere and squeeze some points inwards. We'll see.
 
I did some calculations, some small adjustments to the code and setup, a dry run with a cardboard box. I thought I was good to go.

Unfortunately the mic pushed the speaker of its stand. Two scratches on the speakers. Could have been way worse. So now I'm gonna write some code to check if a move is safe before I'm going to execute it. That will take some time.
 
Spherical measurement is running. This time controlled by a Raspberry Pi. So I can use my laptop for other work and can even follow what's happening on my phone:

Screenshot_20240621-200104.png

I hope to get a very simple GUI running soon using Remi (python), which promises control from a webbrowser, so any phone or laptop could control the NFS.
 
It looks like you have been able to separate the outgoing waves and the error is below -20dB almost everywhere which is good. Are you able to get the near field to far field translation working so you can export a processed measurement at arbitrary points?
 
The above is arbitrary. It happens to be roughly the previous cylindrical measurements grid, but the measurements were done on a spherical grid this time.

This is for a cylinder at 3m (iso 30cm):
ezgif.com-optimize (5).gif

Just finished it, so I only have questions; no answers :)
 
Last edited:
The above is arbitrary. It happens to be roughly the previous cylindrical measurements grid, but the measurements were done on a spherical grid this time.
In that case why not export dual plane data at 5 to 10 degree intervals and see if it looks like other measurements of your speaker?
 
I have two plans currently:

- Do the measurements in a large barn and use gating to clean up the higher frequencies. My current room is about as small as possible with hard reflecting walls and surfaces. Perfect for finding the limits of the method; not so perfect for the first steps.

- See if I can get the processing to work with CuPy on a PC with an rtx2060 gpu that I used for an AI project. The current Octave processing is ok for casual use, not for quick iterations.

I've provided the data in a previous post and the code is/will be available on GitHub. So in principle anyone can do what they want, but if you've got specific requests: please ask.
 
Last edited:
Does anyone know anything about the Klippel NFS file format? I think it is called kdbx (klippel database ...)

edit:
... Besides this:

Measurement Data Container​

The Measurement Data Container stores all relevant data from the measurement, which are:

  • Coordinates and impulse response of each point
  • DUT position (reference point, main radiation axis, orientation, tweeter Point)
  • Measurement Room (Reflection Free Distance, Field Separation required)
  • Target Frequency Resolution
  • Measurement information (Frequency Range, Microphone Sensitivity, etc.)
 
Back
Top Bottom