It seems to me that an SA with TG can be used in place of a VNA
If you have a scope and single pulse generator which are fast enough you can FT the impulse response to get the complete magnitude and phase response.
To make it causal the imaginary part of the FT must be the Hilbert transform of the real part.
Causality is the argument for why you can extract the phase from the magnitude. I understand David Hilbert's argument, but I'm not smart enough to offer a critique. Quite frankly, I wouldn't dare try.
A Hilbert operator is the mathematical version of a 90 degree phase shift. The point of this is that it looks to me as if one can replace a bunch of expensive hardware with a computer program.... I posted here because despite knowing a lot of people with PhDs I don't know anyone who knows this particular chunk of mathematics AND knows electronics
This is a serious mathematical topic, so if you haven't spent a LOT of time doing time series analysis, please stay quiet.
So if anyone reading this has access to a recent calibrated VNA and is willing to investigate, please measure something and post a photo of the setup and CSV files of the data as frequency, magnitude and phase.
Until I have that I have nothing more to say.
Never heard of "Warburg impedance". Can you provide a reference?
I don't want to argue about whether it's right or wrong. I want to find out. If there are edge cases I want to know what they are.
Testing the idea is quite simple. Get some magnitude and phase data from a good VNA of a quartz crystal or a microstrip bandpass filter. Compute the phase spectrum from the magnitude and compare the two.
So if anyone reading this has access to a recent calibrated VNA and is willing to investigate, please measure something and post a photo of the setup and CSV files of the data as frequency, magnitude and phase.
// Concatenate 2 2 ports
// Ref: Dunsmore, Handbook of Microwave Component Measurements 2.4.3
// Note typo in book: S21/S12 swapped
// [a]--[b]
void SParameter::cat_2_2(const SParameter &a, const SParameter &b)
{
a.require_ports(2);
b.require_ports(2);
ports = 2;
a.require_freqmatch(b);
f = a.f;
s.resize(4*f.size());
for(unsigned i=0; i<f.size(); i++)
{
auto s11a = a.s[i*4+0];
auto s12a = a.s[i*4+1];
auto s21a = a.s[i*4+2];
auto s22a = a.s[i*4+3];
auto s11b = b.s[i*4+0];
auto s12b = b.s[i*4+1];
auto s21b = b.s[i*4+2];
auto s22b = b.s[i*4+3];
auto inv_denom = 1.0 / (1.0 - (s22a * s11b));
s[i*4+0] = s11a + (s11b * s21a * s12a) * inv_denom;
s[i*4+1] = s12a * s12b * inv_denom;
s[i*4+2] = s21a * s21b * inv_denom;
s[i*4+3] = s22b + (s22a * s21b * s12b) * inv_denom;
}
}
Mathematically there are two methods for recovering the phase information. Compute the inverse of the Wiener filter computed via the Levinson recursion or compute the Hilbert transform of the amplitude spectrum. While the mathematical correctness of the Hibert transform approach is well established, neither I nor any of my friends in grad school could ever get the Hilbert transform method to work correctly in a computer program.
Testing the idea is quite simple. Get some magnitude and phase data from a good VNA of a quartz crystal or a microstrip bandpass filter. Compute the phase spectrum from the magnitude and compare the two.