AA908 Accuracy Study
A
study of accuracy characteristics 


February 2007 ...
Something I'd like everyone to keep in mind is that the Micro908 is a $200 hobbyist instrument with an 8bit processor for the computing engine ... it's not a $10,000 labgrade measurement device from HP that is spec'd to 0.1% accuracy with several DSPs and a Pentiumgrade processor. Nor is it a vectorbased instrument such as the TAPR VNA (which also requires a $1500 PC for it to work). It is, however, a scalarbased instrument in the same class as the MFJ and Autek products, which also have issues at higher frequencies (some different, some the same, and *lots* less flexibility compared to the Micro908).
Overall, performance below 30 MHz has been fairly good ("outstanding" would be my actual description, but I'm trying to be objective), which was in the days when we were usuing the DDS30 signal generator card within, and even recently when using the DDS30 card (while keeping the operating frequency below 30 MHz). One just cannot beat the feature/performance of the Micro908 in the HF frequency range.
However as many of us have noted, the measurement accuracy falls off when you start getting into the >30 MHz VHF ranges. In a nutshell, Joe and I think this is due to the layout of the reflectometer circuit, whereby the trace runs and component layout introduces some unexpected impedances as we aproach VHF freqs. When the Micro908 was initially designed, we didn't think that we'd be seeing operation that high, but with the advent of the DDS60 Daughtercard we saw that we could indeed reach up higher than 30 MHz ... but with some unexpected caveats, as we are now seeing.
We thought that the improved, multipoint calibration techniques would work out well across the entire frequency range. They indeed worked well for improving accuracy below 30 MHz, but curiously not so above that mark. It's still a mystery to me how the system can indeed be calibrated and work very well below 30 MHz, but that same software not calibrate as well above. Which again leads to the belief that the layout introduces various "internal reactances" at varying/differing areas of the reflectometer circuitry at VHF. As someone recently noted, it's the same software and algorithm that is being used throughout the frequency range, so it's not a software bug that is specific to VHF. Further, I've carefully studied the internal registers and intermediate numbers being generated from the computations, and recently increased the precision of the registers to properly handle the extreme cases of numeric computation. So as one can see for the Analysis/Calculator worksheets with the raw data produced in Debug Mode, the numbers are well within the limitations of the computing engine.
In the past we have had protracted discussions with some of the same guys still here on the reflector concerning the approach to the reflectometer design and computations. There have been a few good ideas that would've required some redesign (such to use a log amp or frequencydependent Wheatstone bridge equations), but we decided to stay the course and try to flesh out our original design approach for the reflectometer. There have also been a few offmark approaches (e.g., that neglect the phase relationship on the reflected channel), that we let pass by.
That all said, we are indeed actively pursuing design changes to improve the performance above 30 MHz. Fortunately, because of the modular approach for the overall product design, this will be a plugreplacement for the DDS card. I've described this before at a high level, but it involves a careful layout of the refletometer components, oriented very close to the BNC connector, including automatic level control, using a 12bit A/D converter (instead of the 8 bit ADC used today), and an onboard math coprocessor, and has an option of using a log amps in the buffer chain. It'll likely provide a kickbutt improvement and the protoype card for this currently being evaluated.
Okay, on to the data analysis that Paul Wilton has been spearheading ...
I've supplied him a spreadsheet containing my specific comparative data sets. It's clear from this comparison that the performace seen by the units on my bench are slightly better than his, but in general the trend is as described thus far: performance falls off above 30 MHz. I'm not sure of the value in displaying raw and corrected component values (Vf, Vr, Va and Vz) and how the levels decrease in frequency, but they generally show the calibration system working. It also shows how the system has greater difficulty calibrating when the load is far away from the nominal 50ohm bridge impedance. That is, the 274ohm load is not being calibrated as closely as the 50hm load. This is understandable, and in general indicates the main problemmatic area which is a combination of the larger numbers being computed at the measurement extremes (i.e., when far away from the nominal 50ohm point), and hence the greater effect of roundoff and 8bit computing limitations.
I think a simpler way of showing performance is via the graphical plotting capability of the AA908 Plotter program of Al Gerbens K7SBK. I've taken those same four load conditions represented in Paul's spreadsheet (short, open, 50ohm, 274ohm) and plotted the instrument response 160 MHz.
Case 1: 50ohm Load  Deadon accuracy across the entire frequency range. As expected, for the reasopns stated above (identical to the inherent characteristic impedance of the reflectometer bridge.)
Case 2: Shorted Load  Deadon accuracy across the entire frequency range. Minor increase in reactance as frequency increases, but this can actually be calibrated out with a minor addition to the cal process (coming in next version.)
Case 3: Open Load  This case is fairly useless, as there is no relevant measurement when one is measuring nothing(!) One could argue that antenna impedances approaching infinity would be applicable, but I haven't encountered any of these. Other analyzers essentially block this condition, as we do too for most of the range, and display a relatively innocuous message (e.g., "Z>1K") when the values cannot be computed. However it is interesting to see how the AA908 responds with an open load, by the reactance decreasing from infinity down to midscale, starting (mysteriously) at 30 MHz.
Case 4: 274ohm Load  This is the case of most interest for the accuracy discussion. It shows accuracy even better than 10% throughout most of the 030 MHz range. But higher than 30 MHz we see the effects of internal reactance kicking in (as described in the discussion above). It's very important to note that one should NEVER expect to a perfect line across the frequency spectrum at 274 ohms (at least for a lowcost instrument such as the Micro908). There will always be frequency effects seen in the loads, BNC connectors and perhaps even RF fields present in the local area (i.e., BCB interference with an unshielded unit), and the higher one goes in frequency, the more pronounced the effects become. This is natural.
The data used to create these charts are shown in the AA908
Calculator data set that I prepared.
Paul Wilton put together another view and analysis of the data in his own spreadsheet, to which I added data from my Micro908 as well for comparison. You can download this at M1CNK Raw Analysis Spreadsheet
Overall, I am happy with the the performance of the AA908 at HF frequencies (below 30 MHz), but I too am not satisfied with performance above 30 MHz. My iterations with many of you here on the reflector, pointing out possible areas for you all to check in your units, is not meant to be disavowing that this troublesome area above 30 MHz exists, but merely to state that if you do *not* have a
prperlyadjusted DDS, properlyconstructed Micro908 and dummy loads, properlyperformed calibration, et al, these conditions will be present even more so, and will likely extend down even below 30 MHz. But if you have taken care in the construction, adjustment, and operation of the unit, your performance will be comparable to what I have shown and to what Paul has described.
If you are looking to meaure resistors down to the 1ohm level, this is not the instrument for you. Likewise, if you are looking for absolute value readings that are 1% accurate, this too is not the unit for you.
However if you are looking for a flexible, reprogrammable unit that has numerous antenna measurement features that show good reulst below 30 MHz and acceptable comparative results above that (i.e., shoiwing SWR plots, general complex impedance trends, changes from daytoday for your antenna), this would serve the purpose well.
We are actively working to get past this lowVHF measurement problem, as we next intend on taking the design up to 2m use. The path described, using a new reflectometer module layout, greater bit depth, greater computing capability and
ALC, we feel we're on the right path. Time will tell, and it shouldn't be too much longer now to see these results.
I'm very eager to work with each of you who have ideas or questions. As you can see I'm being entirely open with the project, which has always been the case with this open source / open hardware / notforprofit product. You do not see much (any?) of this kind of product on the market these days, but Joe and I feel this would be of more interest and value to the technical community.
November 2005 ...
Some Micro908 Antenna Analyst owners have been studying the slight measurement drifting and accuracy characteristics of the instrument. The drift is currently attributed to the heat generated by the DDS card affecting the reflectometer diodes, and the accuracy is somewhat affected by the limitations of 8bit math computations and the inherent "uncertainty" of needing to simultaneously measure phase and magnitude of the reflectometer signals.
Fred DeRoos, WA0GMH describes the typical scenario experienced by a number of AA908 users ...
I've completed the assembly of my Micro908 and it works, but I have a couple of questions about its calibration. When I calibrate and then check the resistors used for calibration, the 50 ohm resistor is within 13 % but the 274 ohm resistor can be off by as much as 1030 %. For example, it sometimes reads in the 305  330 ohm range with those two values toggling back and forth. If I repeat the calibration multiple times, I can get it close to an SWR of 5.4 and a resistance reading in the 270 range. Also during calibration it is sometimes not possible to get an SWR of 5.4 during the adjustment using the 274 ohm resistor. It goes from 5.3 to 5.5 without stopping at 5.4 Usually if I repeat the calibration enough times, I can get the 5.4 value.
If I turn it off and then try it again after a couple of hours, the 50 ohm resistor is within 1 ohm, but the 274 ohm resistor reads an SWR of 4.9 and the resistance may read as high as 340 ohms. As the unit warms up, the indicated SWR and resistance get closer to what it read immediately after calibration, but usually no closer than 305 ohms with some jumps down to the 270 ohm range. The SWR also jumps 0.1 units as the resistance toggles between the two values. When it does this, there are no intermediate values, just 305, 277, 305, 277, etc.
I built a 150 resistor (1 %) into a BNC and it reads close most the time. The SWR may change between 3.0 and 3.1 and the resistance may vary from 164 to 166 ohms (DC resistance measures 150 with Fluke 87). And, the SWR and resistance don't seem to change as the Micro908 warms up.
After adjusting the RF level (2 k pot on DDS grandaughter board) the first three values read during calibration are in the Cx range. The fourth value seems a little high at 09 or 0A, as the manual suggests a typical value of 04.
Any ideas of where I should start looking to make the calibration more stable and reproducible?
From George N2APB ...
Here are the equations used to compute the instrument results. They are all directly related to the static DC measurments of the four main voltages coming from the reflectometer: Vf, Vr, Vz and Va. These signals correspond to the four "legs" of the classic wheatstone bridge reflectometer that are necessary in computing the results for SWR, R and X without performing heavyduty, exponentiated math or trigonometry.
1) SWR calculation: SWR = (Vf+Vr) / (VfVr)
2) Impedance calculation: Z = 50 (Vz_acc/Va_acc)
3) Resistance calculation:
(2500 + Z^2) * SWR
R = 
50 * (SWR^2 + 1)
or ...
2*(2500+Z^2)*(SWR*100)
R = 
(SWR*100)^2+10000
4) Reactance calculation: X = SQRT ( Z_squared  R_squared )
5) Inductance calculation: L= ((X*10)*10000)/((63)*F)
6) Capacitance calculation: C= 1/(6.28*F*X)
In essence, my conclusion on the source of the errors is totally based on the limitations of the 8bit original data values for Vf, Vr, Vz and Va (which are immediately turned into 32bit fixed point numbers when you see in the software how I use a 4byte word for each number). If you look at the execution of the equations in the software (see the calcs.asm file), some of the denominators get large as compared to the numerators and I need to do all sorts of scaling to help the results of any given operation have an appropriate number of significant digits, thus making the given fixed point computation actaully work while allowing the result to be used in the *next* computation. This "scaling to accommodate the bit lengths" of the numbers is at the root of the instrument's limitations, when coupled with the naturallyoccuring small numbers at resonance and other math extremes.
Can something be done about these limitations? I'm sure this is possible ... perhaps by going to trig/expo math as Tuck has suggested, or by going to use of a floating point math library, or by going to use of a 10 or 12bit A/D converter for reflectometer signal measurement. Any/all of these might well be my next step, but curently I'm combing through the equations to see see if there is a better way to order the internal steps and/or better way to scale the small numbers so as to reduce the occurrence of gross remainders.
Tuck Choy, M0TCC describes the problem in terms of complex reflection & transmission coefficients ...
First I am not surprised at the struggle you have with the numerical problems in the software to get any accuracy at all because the problem is a fundamental one and nothing to with the Math, it’s the physics. Your impedance equations are identical in essence with mine, which for reasons I have mentioned previously I prefer to use rho and tau, the complex reflection coefficient and transmission coefficients respectively.
It is important to go back to the basics and just take voltmeter DMM readings and that is what I have done. We can massage things later within the software when we have understood what is happening.
The reflection coefficient I shall define as: rho = rho exp(j phase angle). Analogously the transmission coefficient I shall define as tau where tau=1+rho. The maths can relate these to R and X if necessary, so I stay with these as they are more directly related to the measured voltages.
The AA908 effectively measures two numbers rho = 2V_{R}/V_{F} and tau= 2V_{Z}/V_{F} , these are indeed dc measurements as you said and hence the magnitude symbols I have used. The measurement of V_{A} in my opinion is redundant, nevertheless it can provide a good check on diode drift, OpAmp offset etc using V_{F}=V_{Z}+V_{A} for (nonreactive loads only). If you just check the voltages in the box you will find that V_{F}=V_{Z}+V_{A} to within 1 or 2% as they should, hence in principle measuring V_{A} is redundant.
I have mentioned before that the Wheatstone bridge balance gives a good 1% value for rho. This is to be expected as its accuracy should only depend on the bridge resistances . Measured errors in tau are also not bad about 23% they come from DMM volt meter inaccuracies I think. The Maths for determining impedance is essentially based on calculating the phase angle from tau:
Cos (phase angle) = (tau^{2}1rho^{2})/(2rho) (1)
Once rho and its phase angle are determined the job is done, everything else can be converted from these data.
To give a concrete example, here are my inbox measurements for the 274 ohm load.
rho = 0.691 and tau = 1.663 and on another occasion rho = 0.699 and tau = 1.661 versus the theoretical value of rho = 0.691 and tau = 1.691 respectively . In both cases we get a phase error from Eq(1) above Cos (phase angle) = 0.932 for tau = 1.663 and Cos (phase angle) = 0.909 for tau = 1.661. The exact value for a resistive load is of course Cos (phase angle) =1 or phase angle = zero. In other words about 10% error. Why are such small measurement errors in rho and tau become magnified into large errors in the phase angle. This is the essence of what I have called the uncertainty principle and is a general problem of all electrical measurements that try to determine both the amplitude and phase simultaneously in the same circuit configuration.
For the more technically minded the error analysis of (1) proceeds easily by a high school technique which I shall not go into the details here. Let y = Cos (phase angle). If you take the log of Eq(1) and then differentiate you will find that
Fractional error in y = tau ^{2} x fractional error in tau .
(rho y)For large loads, as long as the loads are not too reactive i.e. y gets close to 1 then the maximum error in y could be up to 8 times 2% i.e. 16%, the max value of tau is 2 and that of rho is 1 for large imbalances. This is at the heart of why resistive measurements for large R gives large errors.
However there is going to be an even bigger problem when the reactance component becomes large, i.e. y > 0 or a phase angle close to 90°. The correction factor diverges. It is here that even more extra care needs to be exercised in impedance measurements. The challenge is to be able to either devise an accurate calibration procedure with the software to compensate for the inherent errors I mentioned or to devise cleverer measurement schemes subject to the limitations of the present set up. Mine you even the most sophisticated schemes are not exempt from the above uncertainty principle! I think you have all done a great job but the above fundamental limitations are against you with the present set up.
Joe N2CX points out detector linearity in our simple (inexpensive) instrument ...
I'm not certain that the issue of detector linearity has been discussed. The compensation scheme is relatively simple and thus imperfect with a detection transfer function that has ripple at various amplitudes. To some extent this may the reason that slight adjustment of the DDS output level results in easier calibration. In fact the clever multipoint compensation that George worked out is an attempt to smooth out some
of the linearity errors.
As far as the perceived temperature drift, it can indeed be caused by the fact that there can be differential temperature variation between diodes in a given detector and compensation circuit. We did not go the effort to use multiplediode arrays to circumvent this issue at the expense of a more complicated pc layout and use of relatively uncommon components.
Certainly more work can be done in the detector/compensation area to gain improved performance. At the moment it is more or less on the back burner but could certainly improve measurement accuracy.
George, N2APB presents an interesting approach to gain better stability ...
Fred DeRoos has been doing some informal temperature experiments and he surmised that the heat generated by the DDS Daughtercard affects the reflectometer diodes and thus is a major contributor to the calibration/measurement drift condition that we've been discussing. This hot DDS card exacerbates the condition because it is located directly over the reflectometer components, and when used in normal operating position, the heat from it rises to directly encounter those diodes.
I thought it would be an interesting test to locate the DDS card *outside* of the box and pump the signal in, thus eliminating the heat generating module from the enclosure altogether. Curiously, this is the approach I'm also taking with the SDR908 project, whereby I extend the DDS card connector upwards through a thin rectangular hole in the back plastic case in order to plug in a dualDDS card, thus gaining control of it from the HC908 connections on pins 13 but using the DDS signal externally with the IQ subsystem.
So in the case of the AA908, I mounted the DDS Daughtercard in the same fashion, and just pumped the RF back into the same connector. Now the only difference in operation is that the heatgenerating module is on the *outside* of the unit and quite isolated from the temperaturesensitive reflectometer diodes, and/or the temperaturesensitive op amp (offsets). It works the the same with the DDS plugged in in this manner, and if I wanted to keep it assuch, placing a small black plastic "cover" over the exposed DDS card is quite easy. (Which is just what we do in the SDR908 version of the instrument with the external dualDDS card and IQ sampling circuitry.) The photos below show how the external mounting was done. (Click on any photo for a fullsize look).I indeed observed a more stable and driftfree operation, as compared to the condition when the DDS card was mounted inside the enclosure. Is this enough improvement to warrant me keeping it on the outside permanently? No, because I can live quite nicely with the "keeping the unit on for 15 minutes to let it warm up inside" if I want to have accurate, drift free measurements. Frankly, most of the time I just need a quick indication of where the SWR dip is, or where the resonant point is in my tribander. But if I do need decimal SWR accuracy, or resistance and reactance accuracy to within 9 ohms, letting the unit warm up before use is certainly an easy and morethanacceptable alternative.
Page last updated: February 26, 2007