This is a follow-up on the previous post. The central theme this time is “noise”.
After posting the last post in various places SA2KNG suggested “8bit float” on IRC, to which I immediately replied “µ-law”. µ-law and A-law are companding techniques defined in G.711 and primarily used in telephony. A-law is especially close to a binary floating point representation, including a subnormal range, but with no way to represent +/-infinity or NaN (not-a-number). Only 4 bits for mantissa is a bit restrictive however. A similar idea is to use 16-bit half-precision floats. This would give the same kind of compression ratio as the codec in the previous post, but with much simpler logic. The cost of this is some loss of precision. This isn’t a huge deal however, since our input noise is high enough to mask this effect.
The dominating form of electrical noise in our system is the Johnson-Nyquist noise from the 100 MΩ feedback resistors in our transimpedance amplifiers, which at room temperature contribute 1.3 µV/√Hz. Our analog-to-digital converter (ADS131A04) is configured with OSR=512 and gain=16, so the noise seen after the ADS131’s internal amplifier is √((1.3*16*√1800)² + 77²) = 886 µVrms (the 77 µVrms figure comes from the datasheet). With Vref=2.442 V this corresponds to an effective number of bits (ENOB) of 10.9. Hence an “seee mmmm mmmm mmmm” type of floating point representation should work well. It also leaves enough dynamic range for measuring very weak signals. The best of both worlds (:
I find it quite good to write these kinds of posts since it allows me to sanity-check my reasoning around things. Noise is an especially tricky subject with lots of traps. In writing this I discovered one error in my notes where I had not accounted for the J-N noise being amplified by the ADS131’s internal PGA. This helped explain the noise levels seen in some measurements.