scikit-rf: Formula in media.mline to calculate delta_w1 incorrect

I believe the formula used in media.mline to calculate delta_w1 is not correct: Hammerstad and Jensen define t to be the normalized strip thickness, while here t is given in meters. So the last multiplicaton by h is incorrect in my opinion.

def delta_w1(self) -> NumberLike:
    """
    Intermediary parameter. see qucs docs on microstrip lines.
    """
    w, h, t = self.w, self.h, self.t
    if t > 0.:
        # Qucs formula 11.22 is wrong, normalized w has to be used instead (see Hammerstad and Jensen Article)
        return t/pi * log(1. + 4*exp(1.)*tanh(sqrt(6.517*w/h))**2/t) * h
    else:
        return 0.

(As an aside, just because I always wondered and just finally checked: formula 11.22 in the Qucs documentation is indeed wrong as stated. Qucsator uses the original Wheeler formula in its implementation, though. )

Greetings, Michael .

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 45 (8 by maintainers)

Commits related to this issue

Most upvoted comments

First of all let me say a word of appreciation at @mhuser and all other contributors: thank for your energy and effort - it is much appreciated.

I remember coming across that AEÜ paper when I was looking at coupled microstrip lines. It is cited all over the place but nowhere to find. After some digging around I finally found a library that has the issue on file and will order a copy of the paper. I will keep you posted…

As far as I remember the relevant expressions are reproduced in Reinmut K. Hoffman.,“Handbook of Microwave Integrated Circuits,”. Artech House, Inc. 1987. pp. 177.

hoffmann-p177 hoffmann-p178 hoffmann-p179 hoffmann-p467

ADS behaviour is still a bit questionable because it lead to a complex characteristic impedance and I am not sure the initial equations were made with complex permittivity and impedance in mind.

Complex Z0 with lossy dielectric sounds correct. In RLGC transmission line the dielectric loss is modeled with the G element as G = tand * 2 * pi * f * C. If I set the conductor as lossless and calculate C and L with online calculator. I get very similar complex Z0 to what ADS model gives.

freq = skrf.F(10, 10, 1, unit='GHz')
tand = 0.01
C = 143e-12
G = tand*freq.f*2*np.pi*C
md = DistributedCircuit(frequency = freq,
                          z0 = 50,
                          C = C,
                          L = 230e-9,
                          R = 0,
                          G = G)
print('RLGC Z0', md.Z0)
print('RLGC gamma', md.gamma)

m_ads = MLine(frequency=freq, z0=50, w=300e-6, h=100e-6, t=0, ep_r=3, tand=tand, rho=0, compatibility_mode='ads')
print('ADS Z0', m_ads.Z0)
print('ADS gamma', m_ads.gamma)

m_qucs = MLine(frequency=freq, z0=50, w=300e-6, h=100e-6, t=0, ep_r=3, tand=tand, rho=0, compatibility_mode='qucs')
print('qucs z0', m_qucs.Z0)
print('qucs gamma', m_qucs.gamma)
RLGC Z0 [40.10325411+0.20051126j]
RLGC gamma [1.8016747+360.34394893j]
ADS Z0 [44.79617423+0.1991969j]
ADS gamma [1.46557043+326.67485775j]
qucs z0 [44.79751115]
qucs gamma [1.46270228+326.67483055j]

@rfbug I noticed the example values I took, has a quite small thickness (35um) compared to width (3mm) and height (1.55mm). Do you need a test with a thicker line to have more effect of width correction (initial issue) or are you satisfied with current attempts ? I am still interested if you get the Kirschning Jansen paper which is missing my collection

Oh no, anything you are ok with is totally fine with me 👍 … it was really just by chance I stumbled across the initial issue;)

I have acquired copy of the AEÜ Kirschning Jansen paper by now. Due to copyright issues I would rather not attach the whole paper in this place. The formulas I quoted above from the Hoffmann book do however match the ones in the paper.

ADS references the following work in the MLIN man page in case it is helpful:

M. Kirschning and R.H. Jansen, “Accurate Model for Effective Dielectric Constant of Microstrip and Validity up in Millimeter-Wave Frequencies,” Electron . Lett, Vol. 18 March 18, 1982, pp. 272-273.

data (1).zip

Now I face the terrible situation were all my tests agains Qucs fails if I fix mline to follow ADS losses.

Will you submit an issue to Qucs ? They would be probably interested to know about these differences.

I have ! Would it be appropriated to mention our issue inside theyr for reference ?

@JAnderson419 could you run the same two simulation but once with Kobayashi and once with Yamashita instead of Kirschning ? Do you agree if I use these files as test-cases in skrf ? I am almost sure I will have enough data after that 😅

image color lines : qucs .s2p color ‘x’ : new skrf mline

(edit: repost to fix image and s2p upload as txt since email replies don’t support markdown)

I deal more with IC component modeling than circuit level stuff, so feel free to let me know if some of my parameters are not matching yours, but here is an output file from the shown ADS schematic for comparison.

image

Jackson tline_ads.txt

delta_w1 and delta_wr magnitudes don’t look correct right now. They are so small that changing t barely changes anything.

Here’s one example with thin substrate microstrip line where thickness should have measurable effect:

m = MLine(frequency=skrf.F(10,10,1), w=100e-6, h=100e-6, t=30e-6, ep_r=3, rho=2e-8)
m0 = MLine(frequency=skrf.F(10,10,1), w=100e-6, h=100e-6, t=0, ep_r=3, rho=2e-8)

print('t=30 um')
print('z0', m.z0)
print('gamma', m.gamma)
print('w1', m.delta_w1)
print('wr', m.delta_wr)

print()
print('t=0')
print('z0', m0.z0)
print('gamma', m0.gamma)
print('w1', m0.delta_w1)
print('wr', m0.delta_wr)
t=30 um
z0 [83.7079855]
gamma [2.29635364+316.66950244j]
w1 1.2200526316282287e-08
wr [8.90088257e-09]

t=0
z0 [83.71029485]
gamma [2.296476+316.67338239j]
w1 0.0
wr 0.0