I've recently come to suspect the effects of connectors on my measurements. I'm looking at several different ways of de-embedding their effects from measurements that I take with a network analyzer (20-30 GHz).
I have 3 questions
1)Is S-parameter Bi-section a reasonable way to see the S-parameters for the DUT using measured data?
2) Given a T-matrix, Y-matrix, and Z-matrix method for solving for the symmetrical matrices, which produces the best result?
3) Given solving for a T-matrix, which of the 4 possible solutions should be used?
First Here's some background reading
Here are my doubts1 as well as here. These links discuss that with real data, S-parameter bisection the process begins to break down with excessive noise and other parasitics. Additionally, if insertion and return loss are too high the results are also inaccurate. Finally with the equations themselves there are several assumptions about symmetry that could ruin the results if symmetry is not kept.
I feel that the assumption of symmetry should work well with just 2 connectors and a trace, and insertion loss and return loss should be reasonable. I'm not sure if real world measurement noise would be an issue
Finally after assuming that T-matrices (check out link 1) would work the best, I started solving the equations
[[T11,T12], [T21,T22]] * [[T22,T21],[T12,T11]] = [[T11f,T12f],[T21f,T22f]]
after expanding this ( and assuming T12 = T21) out I get
T11f = T11*T22 + T12^2 T12f = 2*(T11*T12) T21f = 2*(T22*T12) T22f = T11*T22 + T12^2
Solving for T12 (second equation) I get
T12 = T12f/(2*T11)
Solving for T22 (third equation)
T22 = T21f/(2*T12)
Finally plugging those into the first equation and solving for S11, I get
T11 = (T11f-T12^2) / T22 T11 = (T11f - T12f^2/4T11^2)/(T21f*T11/T12f)
This reduces down to
T11^4 - (T12f*T11f/T21f)*T11^2 + (T12^3/(4*T21f)) = 0
when I solve this equation I get 4 possible answers. Which should I use?
I found this link that suggests an easy way to do things is to switch to abcd matrices, then to take the square root. here's some sample code I made using python
import numpy as np import nport import scipy from nport import touchstone // I imported some files that were saved in a matlab format // the names are freq and new_data new_n = nport.NPort(np.array(freq),np.array(new_data),nport.S,50) abcd2 = new_n.convert('ABCD') print(abcd2) new_abcd =  for i,value in enumerate(abcd2): if not i: print("START HERE!!!") print(value) holder = scipy.linalg.sqrtm(value) if not i: print(holder) print(holder.dot(holder)) new_abcd.append(holder) newest_n = nport.NPort(np.array(freq),np.array(new_abcd),nport.ABCD) half = newest_n.convert('S', 50)