Temperature Chamber Measurements / Characterization
Temperature Chamber Set-up Procedure
To characterize a balun:
- Make sure all power is off.
- Connect ground wires to ground.
- Connect Port 2 cable to one of the two terminals on the opposite site (depending on polarization)
- Connect Port 1 cable to one of the four arm terminals
- 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.
- Shut and tighten the top (if behavior is strange, check that the styrofoam did not fall into the chamber).
- Set TEMP ADJ. knob to desired value.
- Wait for temperature to stabilize
- 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".
- 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):
For the receiver (#114):
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