Temperature Chamber Measurements / Characterization

Temperature Chamber Set-up Procedure

To characterize a balun:

  1. Make sure all power is off.
  2. Connect ground wires to ground.
  3. Connect Port 2 cable to one of the two terminals on the opposite site (depending on polarization)
  4. Connect Port 1 cable to one of the four arm terminals
  5. Connect black (ground) lead from the power supply to black lead from amplifier, then connect red (power) lead from power supply to red lead from amplifier.
  6. Shut and tighten the top (if behavior is strange, check that the styrofoam did not fall into the chamber).
  7. Set TEMP ADJ. knob to desired value.
  8. Wait for temperature to stabilize
  9. Go to SAVE/RECALL on the Vector Network Analyzer, then make sure that the settings in DEFINE DISK SAVE are "DATA ONLY - ON" and "ASCII".
  10. Click SAVE STATE.

Data Files Summary

Here are tables summarizing the data file names for each run, which are stored on the floppy disk:

For the balun (#27):

Data File Name Temperature (Celsius) Which arm of the dipole? TEMP ADJ setting
bDATA00 16.0 N 0.00
bDATA01 24.3 N 5.00
bDATA02 30.7 N 9.99
bDATA03 30.7 S 9.99
bDATA04 24.5 S 5.00
bDATA05 16.1 S 0.00
bDATA07 16.0 E 0.00
bDATA08 24.5 E 5.00
bDATA09* 30.6 E 9.90
bDATA10 30.7 W 9.99
bDATA11 24.5 W 5.00
bDATA12 16.2 W 0.00
For the receiver (#114):

Data File Name Temperature (C) Which channel? TEMP ADJ setting
DATA00 16.5 A 0.00
DATA01 24.9 A 5.00
DATA02 31.2 A 9.90
DATA03 31.2 B 9.90
DATA04 25.0 B 5.00
DATA05 16.7 B 0.10

Applying Temperature-Based Corrections to S-Parameters

In order to use the acquired temperature sensor readings to correct the input from the antenna, two Python modules were created: getCoeffs.py and tempCorrections.py. The first module, getCoeffs.py, reads in the S-Parameter files (taken above), and then performs a two-step process -- it fits a 2nd degree polynomial (where x = frequency, and y = magnitude or phase of the S-Parameter in question) to each of three graphs (one graph corresponds to one temperature reading). The resulting coefficients from these three polynomials (each having the form a(x^2) + bx + c) are then used to fit three lines, which can be represented as follows: coeff = mx + b. So the purpose of getCoeffs is to return the values of m and b for each coefficient (a, b, and c) for each curve.

tempCorrections.py retrieves the slope and y-intercept values from getCoeffs and then uses these values to calculate the coefficients for a quadratic, given a temperature input. Let's say you want to find the S11 magnitude curve for a temperature of, e.g., 297 K. getCoeffs.py would tell you that to determine the coefficient a of this curve, the slope and y-intercept of the function which will tell you what a is based on the temperature must be am and ab, respectively. tempCorrections would then use these two values (am and ab) to calculate the value of the coefficient a as follows: a = f(temp) = am*temp + ab. This process is repeated for the other two coefficients (b and c), and once you have calculated a, b, and c, then you can use the following relation to find the frequency vs. magnitude curve at your specified temperature: mag = a*(freq^2) + b*freq + c.

The program tempCorrections.py interacts with getCoeffs.py, and the user only interfaces with tempCorrections.py; you must specify attributes as follows: tempCorrections(instrumentType, pol, tempfileName, startfreq, endfreq) where instrumentType is either 'balun' or 'rx' (depending if you want information/corrections for the balun or receiver), the polarization can be 1 (NS) or 2 (EW), tempfileName is the name of the file where your temperature readings are stored (an output file from the RPi, most likely), startfreq is the lower frequency limit of the frequency band you want to assess (in MHz), and endfreq is the upper frequency limit of the band.

To retrieve two 2D numpy arrays containing a series of S-Parameter curves (one array contains magnitude curves and the other contains phase curves), where each row of the array contains one S-Parameter curve, corresponding to one temperature reading in the file, call the tempCorrections.py member function getS11MagPhase() (replace S11 with whatever S-parameter you desire). Example:

tc = tempCorrections('balun', 1, 'temp-readings.txt', 120, 180)

s11mag_array, s11p_array = tc.getS11MagPhase()

The contents of these arrays can then be saved to file, used in post-processing, etc.

-- EllieWhite - 2019-06-12
Topic revision: r7 - 2019-07-08, EllieWhite
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding NRAO Public Wiki? Send feedback