# NanoVNA – interpolation – part 1

A simple two port VNA allows measurement of  S parameters s11 and s21 of a DUT. Port 1 contains a directional coupler to transmit a signal into the DUT, and to capture and measure the amplitude and phase of the reflected wave relative to the forward wave at Port 1 (s11). Port 2 simply measures the amplitude and phase of the signal at its input, the forward wave after it has passed through the DUT relative to the forward wave at Port 1 (s21).

This is typically done by stepping (sweeping) the source on Port 1 through a range of frequencies, specified for example by start and end frequency and the number of discrete steps.

There are several source of error in such a measurement, but by making a series of measurements of some known configurations (Short, Open and Load on Port 1, Isolation and Through to Port 2), those errors can be determined and corrected out of subsequent measurements. So, there is a calibration process to measure and save measurements on these known loads, and then a correction process to apply the calculated corrections to raw measurements.

Early VNAs invalidated the calibration data if sweep parameters were changed, and so corrections were applied to raw measurements at corrections measured and calculated at exactly the same frequency.

This was really inconvenient, especially where no facility was provided to permanently save and restore a set of calibrations.

Later VNAs included the facility to interpolate (but not extrapolate) the calibration / correction data to a new set of sweep parameters. This was really convenient, but introduced a new source of error, the interpolation error.

When all this is done under the covers, users with little understanding of what is going on under the covers can easily obtain invalid / worthless results.

Let’s focus on s11 measurement, though the same issues exist for s21 measurement.

Above is a plot of uncorrected or raw s11 sweeping a NanoVNA-H4 101 points from 1 to 900MHz with nothing on Port 1 (approximately an open circuit OC). Ideally s11 should be 1+j0, but the directional coupler circuitry and small distance to the connector means the amplitude and phase vary as shown in the plot.

Let’s explore the concept of interpolation on these raw s11 plots.

Strictly speaking, we have 101 data points and the graph has draw a straight line between each of the data points, a linear interpolation… which is this case is a reasonably good estimate because the data varies quite slowly relative to the 101 data points.

Now lets do the same sweep of a length of RG58A/U again with an OC at the far end.

Above, the amplitude and phase vary much more dramatically. Moreover, the curves are jaggy at the left and get much worse to the right. Again the 101 data points are connected by straight lines (linear interpolation), but it is not a good estimate of the expected value between each pair of the 101 measured points.

Lets just zoom the graph in to 800-900Mhz.

Above, the zoomed graph now only captures 12 data points (count them) for 100MHz of frequency span, and the linear interpolation is a totally inadequate estimate.

Above is a sweep of 101 data points from 800-900MHz, it shows that the underlying behavior is approximately sinusoidal with some amplitude variation, but it still is a bit jaggy and the estimates near the peaks and troughs were the slope is changing quickly are not good.

Above, a sweep of 801 data points from 800-900MHz looks a lot better.

A set of raw measurements like those shown above is used for the calibration data to calculate the correction terms which are then interpolated to feed the correction calculations. If the combination of step size and change of amplitude and phase are poorly chosen, the interpolated correction terms will be deeply flawed.

So, interpolation of the correction terms provides flexibility, but at a cost.

The discussion above and in the continuing articles under the same title related to frequency domain measurements and presentation using a VNA.

To be continued…
{"extraction_info": {"found_math": false, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 0, "mathjax_display_tex": 0, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0, "katex": 0, "math-container": 0, "wp-katex-eq": 0, "align": 0, "equation": 0, "x-ck12": 0, "texerror": 0, "math_score": 0.8551433086395264, "perplexity": 1028.1722989346126}, "config": {"markdown_headings": true, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 20, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "plain"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "warc_path": "s3://commoncrawl/crawl-data/CC-MAIN-2023-14/segments/1679296949035.66/warc/CC-MAIN-20230329213541-20230330003541-00339.warc.gz"}