-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Factor 2 Removal Implications #2
Comments
Hello @denzchoe I am still quite certain about this factor 2 removal for this reason : in Nevertheless, it is well possible that there could be something like an incorrect fft shift or other that cause length or impedance to be wrongly determined and that would have escaped testing with very uniform and well matched examples. I would advise to do a sanity check with the latest AICC tools that use the Matlab code to see if the results are closer to old or current Python Implementation. It would also be of interest to plot step response of 2xthru, fdf, dut, fixture on the same plot (so we can see if fixture looks like half 2xthru or not). Keep brave ! |
Side note : on the scikit google group, there was a mention of this paper by Jason Ellison, Stefen B. Smith, Sedig Agili, quite recently. But I did not have the chance to access to it yet. |
Hello @denzchoe I have located the portion of the code that cause it, but it seems coherent with the matlab source. |
The phase jump issue is related into choosing the proper solution to |
saw the latest fix @mhuser; Thanks for discovering and detailing it. Very insightful! |
Ok, I am beginning to understand the limits of this deembedding method now. Image source, Page 34, 10.1109/IEEESTD.2021.9316329 |
Nice finding ! Sounds the pitfall with TDR/ifft based measurements : to see small details, upper frequency bound should be increased but soon hit the limit of the instrument. I have not added the ability to use the Z-transform instead of fft. See this ieeep370 commit description. They speak of "short structures" with few points in TDR. Could this help with you deembedding challenge ? |
Z-computation start at this line. |
Oh, hmm my s2xthru structure total length is 25 mm in length. Not sure how useful it can be for me.. But certainly, the theory is applicable for very short die structures.. Back to the 2xthru midpoint, by altering the dcs11 = self.DC(s11,f)
t11 = np.fft.fftshift(np.fft.irfft(concatenate(([dcs11], s11)), axis=0), axes=0)
step11 = self.makeStep(t11)
z11 = -self.z0 * (step11 + 1) / (step11 - 1)
z11x = z11[x] # edit here via debug mode on Spyder
temp = Network(frequency = self.s2xthru.frequency, s = s, z0 = self.z0)
temp.renormalize(z11x) causality as described in [1, Page 5 - 8] and [2]Let's see 1 example. Example 1: Run code as default.
|
Thank you for reporting this ! If you share your 2xthru measurement (maybe per email), I am interested to look at the impedance shape after inverse fft. |
This could be the case if the algorithm failed to compute dc points or midpoints. I propose to add a
This should give even better results: all the fields are in the same homogenous dielectric for a given section of the line, not like microstrip with some going in the air and some in the dielectric. |
Example of
On this artificial example, there is a very decent points number in the time domain and the impedance is nice flat. |
Hello @denzchoe thank you a lot for the I exercised the
|
I tried this with
if the frequency is reduced furthermore, the z11x value converge to 51 ohm. |
Hello @denzchoe In most cases, the delay due to the physical length of the 2xthru is probably not an integer multiple of time-domain sampling time. This may cause a ± 1 sample error in midpoint determination. For cases with a uniform impedance zone in the middle (such as a segment of transmission line), this should not cause an unacceptable error. For this reason, the above issue is probably not due to interpolation to a harmonic sweep, the original measurement being very close to this with only one point more. It would remain interesting for comparison to see if simulated 2x-Thru also exhibits such an impedance variation in the middle of the fixtures joint (without doing too much hypothesis for the reason of this discontinuity). Maybe the ZC algorithm has more deembedding power for such a case : it offer bandwidth limiting, Nyquist rate enforcement (caring for the delay not being an integer number in my understanding) and offers a verbose mode showing how it cascades chunks of various impedance. In the other hand it looks like a more 'dangerous' deembedding being able to change slightly the data. |
Thank you for taking your time to think about this.. Yes it is indeed a demanding challenge.
I can provide you with this. Will send to your email.
This is definitely the most reasonable explanation. Coming from the perspective of physical dimensions; the time-constant of 50 GHz signal will be at 20 ps long. The wavelength of that frequency at Er = 1.0, is about 236 mils. The length of the small discontinuity in the midpoint is about 28 mils. A 50 GHz VNA does not have the resolution to capture the
I guess the reason why Legacy code version appears to be accurate previously was because of the new observations we made recently.
I think it does. I think we should allow this option accessible. What do you think? |
This is exactly what I am seeing. At lower frequencies; it seems accurate. However, because my actual |
Yes I think it is worth to try! Done in scikit-rf#708 |
Hello @denzchoe , The simulation is consistent with the measurement in exhibiting a non-uniform impedance around mid-point. I think it is a characteristic of this artifact.
|
I have tweaked an old optimization code that tries to build a model with a low S11 at the lower frequency range.
|
Yes @mhuser ; that optimization code would be useful. I was trying to get one out myself (yet to start). But looks like yours came in most handy. I am not sure how useful it will be either, In the terms of causality and the sense of it. Bookmarking this for future usage. Let me test it on more use-cases. I have plenty of NISTMultilineTRL lines in the past. I can check how accurate NZC is against all of them when I find the time to do it later. Optimization would speed up the process. Close the Issue? |
Sounds great!
I think we now have understood why the results were better with the factor 2 on the length x: the algorithm was picking z11x in a zone of flat 50 ohm impedance on the left. It followed we found useful features to add to the NZC 2xThru method such as This help to make the code more robust, tested and better understood. |
Hmm... something is not right with this Optimization script. |
Could you try to replace |
damnit, rookie mistake.. Forgot that the library changed the name of the parameter.. 😅. Works now! |
😉 Python store extra parameters in *args, so it triggered no error |
Just an Observation Posting
Background
The DUT & fdf (fixture dut fixture) that I had simulated & measured has about >15 dB return loss @20 GHz.
The s2xthru (fixture to fixture) is < 20 dB @30 GHz.
The Observation
disclaimer, may not be conclusive
@mhuser, while I am running some test for NZC; , using various EM Simulated objects,
it appears that for NZC, by including the factor 2, my deembedded results are much closer to the source DUT. (Both Time and Frequency Domain plots)
After you have removed the factor 2 (in scikit-rf 0.22.1), my deembedded results deviates away from the source DUT.
I begin looking at it ever since my de-embedded measured results from your old fork code is different from the currently merged code
Seems like it appears that old fork code is more accurate? Perhaps it only affects my current DUT that is poorly matched whether it is simulated / measured scenario?
The changes I made is in reflection of your old fork code.
See link below for comparison
https://github.com/denzchoe/scikit-rf/compare/denzchoe-to-compare-only...denzchoe-vs-only1?diff=split
Will fill in more details much later. Let me dig a little further. Posting to report on Observation only
The text was updated successfully, but these errors were encountered: