Hi all,
Here is an open-source python bench to measure speaker impedance extending above audio frequencies. It requires budget hardware only, while keeping high accuracy, and goes up to ~3MHz
Github repository - extended_speaker_impedance
Lately, I got interested in checking effective impedance of a classical speaker (dome tweeter) above audio frequencies till MHz range. As per Vance Dickason book for instance or less old technical/scientific literature, expected voice coil behavior is somewhat non linear inductive and potentially a bit non linear resistive, and some parasitic intercoil capacitance appearing at HF. Ok, but in real life of a real speaker (not a dummy load), what does HF impedance look like?
Since context is not professional-grade lab, what is available to DIYer to do that? Above audio frequencies mean above what REW covers. MHz range means way above audio interfaces. So we're left with more common and rather entry-level hardware equipment : USB scope with native probes, common signal generator. To be of interest (enough freq points, reproducible results, accurate and realiable-enough results), such measure requires bench automation, careful calibration procedure, and proper deemedding of the bench from Zspeaker.
So here it is, as 1 script for single measurement and 1 script for post-processing of calibrations and DUT measurements. It uses :
Here is the result with a Cabasse Yawl speaker, starting from 1kHz up to 3MHz. Each run takes 20-30 minutes.
I also add here a photo of the test fixture.
The bench was checked :
- on 2 dummy loads 50R, against calibrated DC kelvin measure => bench accuracy ~1%, plot provided in the github repository
- against careful calibrated capa measure for open conditions (shown as lines below, with capa impedance capped by fictional R aligned to observed noise floor). In these conditions, Zopen uncertainty (bench noise floor) or LF artifacts are not an issue since HiZ parallel impedance in a freq domain where speaker impedance is much lower hence dominates.
Of course, python development up to final cal+dut measurement set required quite a number of runs, leading to reproducibility verification on the fly.
Even if I made usage of generative IA to draft the python bench and better the output plots info, no blind stuff here : I reworked or at least checked (and often corrected) all the code and formulas.
On top of the zoomed picture with Nyquist planes, the bench generates the unzoomed spearker impedance w.r.t.bench Zshort and Zopen, allowing to appreciate immediately DUT raw measure (without probes deembedding) w.r.t. bench stand-alone serial impedance Zshort and max reliable resistance/magnitude values that come with Zopen plot.
Here is an open-source python bench to measure speaker impedance extending above audio frequencies. It requires budget hardware only, while keeping high accuracy, and goes up to ~3MHz
Github repository - extended_speaker_impedance
Lately, I got interested in checking effective impedance of a classical speaker (dome tweeter) above audio frequencies till MHz range. As per Vance Dickason book for instance or less old technical/scientific literature, expected voice coil behavior is somewhat non linear inductive and potentially a bit non linear resistive, and some parasitic intercoil capacitance appearing at HF. Ok, but in real life of a real speaker (not a dummy load), what does HF impedance look like?
Since context is not professional-grade lab, what is available to DIYer to do that? Above audio frequencies mean above what REW covers. MHz range means way above audio interfaces. So we're left with more common and rather entry-level hardware equipment : USB scope with native probes, common signal generator. To be of interest (enough freq points, reproducible results, accurate and realiable-enough results), such measure requires bench automation, careful calibration procedure, and proper deemedding of the bench from Zspeaker.
So here it is, as 1 script for single measurement and 1 script for post-processing of calibrations and DUT measurements. It uses :
- a test fixture with a test resistance, similar to REW impedance measure apparatus.
- PicoScope 2204A acquisition
- A >10MHz sine generator (picsoscope 2204A generator is only 100kHz and 2Vp). I borrowed a calibrated one >10MHz allowing 8Vp. Key carac is stability IMHO.
- frequency log sweep measurement (step by step, not a continuous sweep)
- FFT-based sub-bin frequency and complex amplitude extraction (need to reject noise & distorsions, and solid FFT sub-bin methodology), with averaging
- de-embedding of probe mismatch, test fixture effects, and interconnect parasitics
- final Bode / Nyquist impedance visualization
Here is the result with a Cabasse Yawl speaker, starting from 1kHz up to 3MHz. Each run takes 20-30 minutes.
I also add here a photo of the test fixture.
The bench was checked :
- on 2 dummy loads 50R, against calibrated DC kelvin measure => bench accuracy ~1%, plot provided in the github repository
- against careful calibrated capa measure for open conditions (shown as lines below, with capa impedance capped by fictional R aligned to observed noise floor). In these conditions, Zopen uncertainty (bench noise floor) or LF artifacts are not an issue since HiZ parallel impedance in a freq domain where speaker impedance is much lower hence dominates.
Of course, python development up to final cal+dut measurement set required quite a number of runs, leading to reproducibility verification on the fly.
Even if I made usage of generative IA to draft the python bench and better the output plots info, no blind stuff here : I reworked or at least checked (and often corrected) all the code and formulas.