Thanks! If somebody could post a bode plot export (CSV preffered if possible) from a Keysight of Siglent scope, I can have a look to make an import function for these also.
Looks like a useful bit of software, thanks for writing and sharing it!
Maybe put it on something like github/lab etc? Would also allow people to see changes in the code over time.
So I did a quick bode plot on the RTB2k, both channels (3 and 4) connected directly to the sig gen so results are a bit boring (other than a bit of phase/amplitude shift from the cables/reflections up towards 25MHz) but should give an idea of file format (which is nice and simple).
SC from Github compiled on first try on VS2017..
R_DUT = - ((V1_Im - V2_Im)*(R_REF*V1_Im + V1_Re*X_REF))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - ((V1_Re - V2_Re)*(R_REF*V1_Re - V1_Im*X_REF))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)
X_DUT = ((V1_Im - V2_Im)*(R_REF*V1_Re - V1_Im*X_REF))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - ((V1_Re - V2_Re)*(R_REF*V1_Im + V1_Re*X_REF))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)
R_DUT_Error = (V1_Im_Error^2*((X_REF*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - (R_REF*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - (R_REF*V1_Im + V1_Re*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + ((V1_Im - V2_Im)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 + ((V1_Re - V2_Re)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + V1_Re_Error^2*((R_REF*V1_Re - V1_Im*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + (R_REF*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + (X_REF*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - ((V1_Im - V2_Im)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 - ((V1_Re - V2_Re)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + V2_Im_Error^2*(((V1_Im - V2_Im)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 - (R_REF*V1_Im + V1_Re*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + ((V1_Re - V2_Re)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + V2_Re_Error^2*(((V1_Im - V2_Im)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 - (R_REF*V1_Re - V1_Im*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + ((V1_Re - V2_Re)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + R_REF_Error^2*((V1_Im*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + (V1_Re*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2))^2 + X_REF_Error^2*((V1_Re*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - (V1_Im*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2))^2)^(1/2)
X_DUT_Error = (V1_Im_Error^2*((R_REF*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - (R_REF*V1_Re - V1_Im*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + (X_REF*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + ((V1_Im - V2_Im)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 - ((V1_Re - V2_Re)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + V1_Re_Error^2*((R_REF*V1_Im + V1_Re*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - (R_REF*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + (X_REF*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + ((V1_Im - V2_Im)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 - ((V1_Re - V2_Re)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + V2_Im_Error^2*((R_REF*V1_Re - V1_Im*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - ((V1_Im - V2_Im)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 + ((V1_Re - V2_Re)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + V2_Re_Error^2*((R_REF*V1_Im + V1_Re*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + ((V1_Im - V2_Im)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 - ((V1_Re - V2_Re)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + R_REF_Error^2*((V1_Re*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - (V1_Im*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2))^2 + X_REF_Error^2*((V1_Im*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + (V1_Re*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2))^2)^(1/2)