Do you still have the raw data from measurements?If you plot VNA and lecroy in same graph, and flip the lecroy upwards, how much off it is?
You and BSON are thinking the same. It looks like a sign error. That was my first thought too and I checked the math subroutines. They are unchanged. I have been using these same subroutines for 35 years. I have pretty high confidence in them
These are the same routines used with the Anritsu MS420 results posted earlier. In fact I started with the same program file. The only significant changes are the data input routines. The MS420 outputs T/R in polar form; the 9430 FFT gives R and T Real/Imag results in rectangular coordinates. Once that is converted and divided, the math is all the same.
I don't have the raw data, I typically don't integrate load/save routines until I get the measurement happening correctly and the data structure defined.
I would be very wary about FFT without any windowing, are you certain that everything is sample perfect synchronized?
Understood. This signal is specifically designed to be used without windowing functions. Windowing would act like a bandpass filter. I can change the arb generator readout clock and watch the spectrum changes. The technique is quite forgiving of sample sync, as long as the sequence completes within the window and is consistent for both channels. The routine that generates it even allows you to specify a number of zero fill at the end. IIRC, I didn't use any here.
The rising phase clearly is inductive reactance. I can't think of any reason for |Z| to fall off, other than if there's a calculation error...
The falling |Z| given the rising phase really smells like a sign error...
The interesting thing is, though; both are WAY off. The axial R should have +45º phase shift at about 200kHz. That's the second division from the left. It's nowhere close.
Even the short measurement (not shown) has only a very small inductive rise, which is clearly in error.
I'll double-check the math subroutines, but they're pretty straighforward. For example: in HTBasic, the complex division is:
: Zref and Zdut are complex arrays
: MAT Mag=ABS(Zdut) (MAT operates on the entire array. Mag and Phase hold the Test signal)
: MAT Phase=ARG(Zdut) (ABS and ARG convert rectangular to polar)
: MAT Mag2=ABS(Zref)
: MAT Phase2=ARG(Zref) (Mag2 & Phase2 hold the Ref signal)
: scan Mag2 (the real part of the denominator) for zero values and replace them with something really small (I use 1.E-12, equivalent to 1 picoOhm), division by 0 is a fatal error...
: MAT Mag=Mag/Mag2 (with data in polar, divide the magnitudes)
: MAT Phase=Phase-Phase2 (and subtract the angles)
: then convert back to rectangular and stuff it back into the Zdut array
I could just use Zdut=Zdut/Zref but I have found that the polar routine generates less "garbage", i.e. handles phase wrap better. There are fewer division operations.
That's it. Open and Thru measurements use this same routine.