A precise analysis of an L-network for impedance matching below 3 MHz. The desire for “an ideal” characterization of the circuit parameter space for utility in fabrication by hand. The reduction to a pure mathematics problem.


This is a full description of a situation often encountered by scientists in the process of fabrication of the NMR probe. The analysis requires some tedious complex algebra, a bit of circuit theory, and enforces a matching condition. I tried to write this so that one may infer the cirucit theory from context. If there is a problem, just ask.

We will examine the impedance of this reactive L network

View post on imgur.com

Goals of this challenege:

Characterize the parameter space of the variables Cm, Ct, ω, L, r and produce some useful set of tables for lab, in which the relationship between Cm and Ct is known for a given ω L and r. Furthermore to ponder the level of greed allowed. Which parameters limit others? Compare this with what the laboratory reality is.


One must always strive for impedance matching conditions to be satisfied, which for us means 50 ohms real. So we must


Im_Z = 0

Re_Z = R := 50 ohms


These requirements are nasty if you allow the impedance of the coil to have a small (but very physical and influential) real part r

Z_coil = j ω L + r

So the total impedance is

Z_tot = -j / (Cm ω) + Z_coil || Z_Ct = Re_Z + j Im_Z = R + j 0 = 50


* Z_m is the impedance of the matching cap only
* Z_t is the impedance of the tuning cap only
* the notation A || B means “A parallel B” and A || B = ( 1/A + 1/B)^(-1)

Since Z_coil has a real and an imaginary part, the expression for total impedance is a headache.

So I did it by hand, and with mathematica, and iteratively found what I consider decently short code with reasonably concise expressions. Here we go.



Clone the mathematica stuff here


git clone https://github.com/Altoidnerd/NMR-Tank-Circuits


In which there is a file where I do in fact show the real and imaginary parts of Z_tot are:

real part (which we denote Re_Z…please note the sloppyness. Here w is ω)

Re_Z = r/((r^2 +
L^2 w^2) (r^2/(r^2 +
L^2 w^2)^2 + (T w - (L w)/(r^2 + L^2 w^2))^2))

and imaginary part (Im_Z)

ImZ = (-(1/(M w)) - (T w)/(r^2/(r^2 +
L^2 w^2)^2 + (T w - (L w)/(r^2 +
L^2 w^2))^2) + (L w)/((r^2 +
L^2 w^2) (r^2/(r^2 +
L^2 w^2)^2 + (T w - (L w)/(r^2 + L^2 w^2))^2)))

where we eliminated the need for subscripts but denoting Cm := M and Ct := T.

How do we make useful data from these equations? To answer this, we must first assess what the experimenter can really control.

* coils are hard to wind and have prescibed results. In general, the parameter r is less than 1 ohm, but its actual value is not constant through frequency sadly. It must be treated as such.

* A typical coil inductance L satisfied 1.0 uH < L 30 uH. Intermediate values such as 8 uH tend to be the most difficult to fabricate. A coil inductance of 8uH I find would be useful for lower frequencies, below 3MHz, which are currently causing me problems. It is here the equations become extremely sensitive.

* The capacitance T and M can within reason, be expected to continuously vary between 0 < T,M < 1 nF and even more reasonably if the upper boundary is around 300 pF.

* the frequency is going to satisfy 1 MHz < f < 30 MHz; so ω = 6.28 f so we can say about, that
1 e7 < ω < 3e8

I have made many charts. Got any brilliant ideas?


A typical annoying situation in lab would be:

Drat. To reach the target frequency, we must either replace the capacitors with larger ones,
or exchange the coil with one of larger inductance. Which will take me less time?

I usually do not know in fact. I either make a intuitive guess, prepare some primitive tests, or try a bit of each.

The code in the github repo above will give you some parameter sliders. You can try plotting M, and T vs ω as L and that little tiny r are varied…I still must get to the bottom of these matters, such as, the qualitative effect of increasing r at fixed ω and L etc. How to encapsulate all such desirable relations in a single concise set of diagrams is what I truly seek, from the kind theorists of who may read this.


Final thoughts.

I have studied this problem up down left right…I wrote some interesting special cases down here, but I believe there is more to be known about these equations that could be of service to the designer.

Can you represent a sine curve using sawtooth waves?


It occurred to me when looking at this picture that there may be a time in a laboratory setting when representing a sine curve with sawtooth waves might be useful.  Can it be done?

The answer is yes – for the impatient, here is the plot I eventually made. The recipe is given below…


as was explained to me in the subreddit /r/puremathematics by reddit user /u/Gro-Tsen as follows:

First, let me discuss how one can formally compute the coefficients expressing a sine wave as a sum of sawtooth waves: assume we have a formal sum

f(x) = g(x) + c₂·g(2x) + c₃·g(3x) + c₄·g(4x) + …

where c₂,c₃,c₄,… are known coefficients, and we want to invert this to find a similar expression for g in function of f,

g(x) = f(x) + d₂·f(2x) + d₃·f(3x) + d₄·f(4x) + …

(our goal is to compute the d coefficients in function of the c's).

This can be done inductively as follows: assuming the N−1 first d's are known (starting with just d₁=1), truncate the expression of g to the first N terms (leaving the N-th d coefficient, d[N], as an unknown) and substitute this in the first expression, then equate the first N coefficients: clearly this will give an equation determining the unknown d[N] in function of the known ones and the c's, in fact, for all N>1 this gives

d[N] = − sum(d[i]·c[N/i]) where i ranges over divisors of N (including i=1, for which d₁=1, but excluding i=N)

so we can compute

  • d₂ = −c₂
  • d₃ = −c₃
  • d₄ = −c₄+(c₂)²
  • d₅ = −c₅
  • d₆ = −c₆ + 2·c₂·c₃

and so on (for any prime number, d[p] = −c[p] as is clear from my inductive formula).

Now we can try the above purely formal method in the case where g(x) = sin(x) and f(x) is the sawtooth wave defined by f(x)=x/2 for −π<x<π. We have

f(x) = sin(x) − sin(2x)/2 + sin(3x)/3 − sin(4x)/4 + …

in other words c[i] = (−1)i+1/i and we can compute the d's from the above process:

1, 1/2, -1/3, 1/2, -1/5, -1/6, -1/7, 1/2, 0, -1/10, -1/11, -1/6, -1/13, -1/14, 1/15, 1/2, -1/17, 0, -1/19, -1/10, 1/21, -1/22, -1/23, -1/6, 0, -1/26, 0, -1/14, -1/29, 1/30, -1/31, 1/2, …

so we should have sin(x) = f(x) + f(2x)/2 − f(3x)/3 + f(4x)/2 − f(5x)/5 − f(6x)/6 − f(7x)/7 + f(8x)/2 − f(10x)/10 − … (where, again, f(x) is x/2 − π·floor((x+π)/(2π))).

Unfortunately, this reasoning was completely formal and does not say anything about convergence. I don't think one can reasonably expect convergence a.e. or L² convergence, because one can easily see that d[2n] is always 1/2, for any n>0, so the d[i] don't even tend to zero! Still, there's probably some weak sense in which the series converges (e.g., I'm pretty sure it converges as distributions), but since I'm an algebraist and not an analyst I'll just leave it at that.

Well “terrific,” I thought.   But does it really work?  /u/Gro-Tsen warned us that it would not converge, and he was correct.  I fired up Mathematica and generated the following image with 100 terms of the expansion /u/Gro-Tsen provided, displaying the weird convergence (code below). I still don’t know if its the convergence of the series causing this effect, or the built in machine representation of a sawtooth in Mathematica.

The coefficients were pulled from OEIS sequence A067856 with each entry divided by it’s index.  Here is the Mathematica code for the plot:

Tooth[x_] := SawtoothWave[(x - Pi)/(2*Pi)] - .5

Plot[Tooth[x], {x, -2*Pi, 2*Pi}]  (* this will verify that the function Tooth[] is valid *)

BigArr =

{1, 1, -1, 2, -1, -1, -1, 4, 0, -1, -1, -2, -1, -1, 1, 8, -1, 0, -1, -2, 1, -1, -1, -4, 0, -1, 0, -2, -1, 1, -1, 16, 1, -1, 1, 0, -1, -1, 1, -4, -1, 1, -1, -2, 0, -1, -1, -8, 0, 0, 1, -2, -1, 0, 1, -4, 1, -1, -1, 2, -1, -1, 0, 32, 1, 1, -1, -2, 1, 1, -1, 0, -1, -1, 0, -2, 1, 1, -1, -8, 0, -1, -1, 2, 1, -1, 1, -4, -1, 0, 1, -2, 1, -1, 1, -16, -1, 0, 0, 0}

BigArray = BigArr*(Array[1/# &, 100, 1])

Plot[Array[Tooth[# x] &, 100, 1].BigArray, {x, -2*Pi, 2*Pi},
ImageSize -> 1800]

Donate Bitcoins

The cost of artificially pumping a low volume altcoin: pumping the alt markets by yourself with the BTC/LTC “pump machine” strategy