Qucs / qucsator

Circuit simulator of the Qucs project

Home Page:http://qucs.sourceforge.net

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Frequency dispersion of impedance and dielectric constant is not used to compute the losses of microstripline

mhuser opened this issue · comments

While the frequency dispersion of impedance and dielectric constant of the microstripline are computed, they are not used to compute the losses.

analyseDispersion (W, h, er, ZlEff, ErEff, frequency, DModel,
ZlEffFreq, ErEffFreq);
// analyse losses of line
analyseLoss (W, t, er, rho, D, tand, ZlEff, ZlEff, ErEff,
frequency, "Hammerstad", ac, ad);

However they are properly used to compute gamma.
// calculate propagation constants and reference impedance
zl = ZlEffFreq;
ereff = ErEffFreq;
alpha = ac + ad;
beta = qucs::sqrt (ErEffFreq) * 2 * pi * frequency / C0;

The original paper of Hammerstad and Jensen is ambiguous about this, as it used the same variable names for these values with or without dispersion.
On the other hand, it sounds strange to use the quasi-static constant value for losses and a frequency-dependant value for gamma. This eventually cause Qucs to have a small difference in simulated insertion loss if compared against Keysight ADS (using frequency invariant dielectric and kirschning models, but the loss computation is Hammerstad and Jensen).

commented

You are welcome. I will prepare some plots to illustrate the behaviour with/without the proposed modification compared to an ADS generated s-parameter file.

First let me introduce the context: I am contributing to scikit-rf a Python package that provide standard microwave network operations, such as reading/writing Touchstone files (.sNp files), connecting or de-embedding N-port networks, .... and advanced operations such as communication with Vector Network Analyzer (VNA) amongst other things that are interesting to automate in scripts without a graphical interface.

Of course, we are not rewriting this great tool that is QUCS in Python, instead we are using it to build networks out of its extensive component library and process later with the resulting s-parameters files.

At a point, it appeared it was useful to implement the msline model into the package to use Python optimizations to fit microstripline models on measurement, e.g. to determine relative permittivity of substrates. We inspired highly of qucsator qucs msline implementation because it is open and the equations are very-well documented.

We checked that our implementation follows qucsator, but during the process we had a chance to compare to ads mlin which is a closed commercial solution. We noticed a discrepancy in the insertion loss results and after looking at it, using the frequency-dispersed values for the loss computation significantly enhance the agreement. The original paper use the same variables names for quasi-static or frequency-dispersed values so there is an ambiguity, but it make sense to use frequency-dependant values here (they are used for propagation, which will also embed the losses).

qucs_vs_ads

image

This is our issue for reference:
scikit-rf/scikit-rf#647

There is also a difference between QUCS and ADS on the Return Loss. But ADS implementation is questionable there as they use a complex permittivity (ep_r - 1j ep_r * tand), which lead to characteristic of the line having a complex value. I think this is done to use their dielectric frequency-dispersion model (Svensson/Djordjecic wideband Debye) implementation.