Script to check the maths.



If you have two pieces of earth-connected audio equipment, you can get ground-loop hum. It's not a good idea to break safety grounds at the plug, and instead, best practice is to use an audio isolation transformer.

Audio isolation transformers are pretty expensive, which leads to two questions: one is "can I build my own?", and the other is "should I really expect this piece of kit to do what I want". One way to handle this is to make a quick model, which you can do in Simscape.

Audio isolation transformer data sheets are generally not particularly rich, often just giving you an impedance rating and a frequency range, but not a lot else - you won't often get a nice equivalent circuit network model. With a bit of first-year EE maths, you can calculate something that gives you an idea of the ideal behaviours, though it comes with the caveat that it's just the electronic version of a "back of the envelope" calculation. However, this might be all you need - if you're trying to solve a similar problem, why not give it a try?

Define the transformer parameters

Here, I've assumed a typical data sheet parameter set.

fMin_Hz = 300; % this is a telephone xformer - try also 20
fMax_Hz = 3e3; % this is a telephone xformer - try also 20e3
Z_Ohm = 10e3;

Calculate the inductances

It's beyond the scope of this document to explain how I calculated the inductances - it's essentially first-year EE stuff. Feel free to have a look at the function findXfmEcnInductances to see how I did it.

% Display the schematic
bdclose all
copyfile('m02_linearizationModel.slx', 'm02_linMdl_view.slx', 'f');

help findXfmEcnInductances
[Lseries_H, Lshunt_H] = findXfmEcnInductances(Z_Ohm, fMin_Hz, fMax_Hz);
 findXfmEcnInductances Find lossless audio transformer inductances.
    [L_series, L_shunt] = findXfmInductances(R_z, fMin_Hz, fMax_Hz)
    attempts to find series and shunt inductances for an equivalent circuit
    network model of a audio transformer with no resistive losses and a
    matched impedance of R_z ohms. The inductances are chosen so that the
    half-nominal-power bandwidth runs from fMin_Hz to fMax_Hz. Note that
    transformers are parameterized assuming they are scaled for maximum
    power transfer between a source and load - these values are compared to
    the maximum theoretical power transfer of 50%, and when fMin_Hz and
    fMax_Hz are relatively close together, the theoertical maximum is not
    achieved between the two frequency limits.

Form a simple transfer function realization

We'll check our EE maths in two steps: first, we'll plot our theoretical transfer function so we can see whether it has the right -3dB points.

bdclose all                     % cleanup

Om_lo = Z_Ohm/(2*Lshunt_H);
Om_hi = 2*Z_Ohm/Lseries_H;

num = [0.5 0];
den = [1/Om_hi (1+2*Om_lo/Om_hi) Om_lo];
G1 = tf(num, den);

clear Om_lo Om_hi num den

om_rad = logspace(log10(2*pi*fMin_Hz)-2, log10(2*pi*fMax_Hz)+2, 1001);
bode(G1, 'b-', ss(0.5/sqrt(2)), 'r-.', om_rad)
legend('theoretical model', '-3 dB line');
grid on

Compare our frequency repsonse to one from a Simscape model

Secondly, we'll linearize the Simscape model and compare it. This will confirm that the maths we've used gives the same results as the schematic.

G2 = linearize('m02_linearizationModel');

bode(G1, 'b-', G2, 'm--', ss(0.5/sqrt(2)), 'r-.', om_rad)
legend('theoretical model', 'linearized Simscape', '-3 dB line')
grid on

Simulate with different frequencies

Now we're finished, we can look at the circuit behaviour using another model, this time one that lets us simulate the impact of the transformer on sine waves of different frequencies.

Note that the new model uses a separate parameter file - you'll need to change your values in both places if you want to make consistent changes.

bdclose all
close all

type transformerParameters
% transformerParameters

% Data sheet transformer parameters
% Typical data sheets give us an impedance range and frequency limits.
% That's not a lot to go on! We'll do our best here, using "standard"
% parameters to estimate the series and shunt inductances that match the
% specified frequency limits. The EE math is straighforward but fiddly so
% it's captured in a function.
fMin_Hz = 300; % this is a telephone xformer - try also 20 
fMax_Hz = 3e3; % this is a telephone xformer - try also 20e3
Z_Ohm = 10e3;

[Lseries_H, Lshunt_H] = findXfmEcnInductances(Z_Ohm, fMin_Hz, fMax_Hz);

% % Configure for power-matched simulation
% %
% % This would be relevant for speaker matching problems.
% %
% Rsrc_Ohm = Z_Ohm;
% Rload_Ohm = Z_Ohm;

% Configure problem for op amp-driven voltage bridge
% This is relevant for isolation transformers.

Rsrc_Ohm = 220; % output of a guitar pre-amp whose schematic I found
Rload_Ohm = 500e3; % low-ish guitar amplifier input impedance