...under perpetual construction.
I was looking for a bias-tee to do some measurements on active devices and came across the nice design from Gary Johnson. Its performances seemed quite respectable for a relatively simple circuit, only I was looking for something that could handle some more current.
So, as a starting point for my own design I decided to analyze a bit more in detail his design to better understand how the components values influence the bias-tee performances.
In his writeup he goes into the details of the design and the effect of the components parasitics, so I won't repeat that here.
As I usually I use Qucs for simulating my amateur radio RF circuits, I copied the LTspice schematic shown at the beginning of his design report to check if the simulation results were the same also in my environment (otherwise that would very likely mean I made an error while copying the component values and computing their parasitic).
Here is the schematic entered into Qucs:
and the following picture shows the simulation results, compared with the data show in the graphs of Gary's original writeup.
To extract the data from his graphs, I used the nice Engauge Digitizer tool, which allows to quickly obtain a file with all the data in tabular for from an imported graph picture. Qucs then has also the ability to read text data from a file and convert them into his own dataset format, to be used for further processing.
In the graphs below the curves in green were obtained from Gary's graphs while the red ones are the actual simulation results with Qucs. Note the very good agreement between the Qucs simulation and the original curves; that means the Qucs schematic agrees with the original LTspice schematic.
At this point I was curious to understand if the design could be improved; its performances are already quite good, but there is still some ripple in its attenuation/return loss/isolation curves. Gary points out in his report that he already spent a fair amount of time optimizing the component values and when I tried to further improve the design by trial and error I quickly realized how time consuming the process is and how difficult is to simultaneously improve all the three main parameters (attenuation, input return loss and isolation), since the effect of one component change affects differently all the parameters.
Of course optimization, especially by trial and error, is better left to computers, so I started thinking about writing a little script that could automatically write a Qucs netlist, run the Qucs circuit simulator to obtain the circuit performances and then decide on how to update the schematic values to attain the desired goal.
I already had an idea of what tools to use; the Qucs simulation engine (qucsator) is a standalone program that reads a text netlist and outputs a text file, so manipulating the input netlist is easy (another advantage of using text format as input format), the outputs can also be easily parsed and moreover the Qucs distribution already includes a qucsconv utility to convert the qucsator simulator results to a variety of formats. One of these supported formats is a Matlab matrix file, which can also be read by GNU Octave. I already knew a nice free nonlinear optimization library that can work with GNU Octave, NLopt so the choice was easy: a little Perl one-liner to update the input netlist and a short GNU Octave script to manage the actual optimization.
As is often the case, one of the main difficulties in setting up the optimization was to precisely define the optimization goal; the easily described wanted performances, "low losses", "good return loss" and "high isolation" have to be translated into actual performance numbers and maximum deviations from the desired values and, since not all the desired characteristics can be maximized at the same time, a weight between them has to be defined to tell the optimizer which one we would like to favor or, for example, how much return loss we are willing to trade to improve a little the isolation.
The following pictures show the bias-tee schematic with the component values optimized with the goal of having 0.2 dB of transmission losses with minimum ripple, between 300 kHz and 600 MHz. The resulting response is quite smooth across the band and has maintain also a nice isolation.
As previously said, many other responses are possible, depending on the desired goals; in general the transmissions losses and the return loss are directly related (not so surprising...) while some more freedom seems possible in the isolation response.
As expected, the optimized schematic performances are slightly better than the WB9JPS original design, the transmission losses are flatter, the RF return loss is also smooth and generally lower, except around 300 MHz and also the isolation is improved.
So this is all regarding the analysis and optimization of the nice bias tee design published by Gary; I plan to apply the experience and the optimization scripts I developed for another design, the higher current bias-tee I mentioned at the beginning...