Bearing in mind the floating point format, I have carried out a rough simulation in Reaper.
First a few thoughts:
Reaper is able to convert the 24 bit data from the sound interface to 32 bit float on the fly. I assume Zoom/SD can also.
I assume that two ADCs would be used, each with a different sensitivity. The sensitivities would differ by a value in the progression 2 * 2 * 2 * ....... (i.e. 2, 4, 8, 16, 32, ...256, ...16384, ...)
The data from the two ADCs could be aligned by bitshifting. (Shifting n places represents a factor of 2^n. (But you already know that)).
Instead of bitshifting the integer data, simply adding to the exponent of a floating point value achieves the same thing. (i.e. add 1 to the exponent multiplies the data value by 2, add 8 to multiply by 256). IDK, maybe this is easier.
How much would the sensitivities need to differ? Even a factor of 256 seems plenty - when the more sensitive ADC starts to clip, the second would still provide over 48 dB of headroom.
All this leads me to believe that making a 48 bit integer out of two 24 bit ints is unnecessary & probably impractical. Instead of having two ADCs working from 0 to max (different max's), one would do half the range, then the other would need to take over. How would you do that? Is there some other way of handling two lots of 24 bit? Did anyone even suggest doing anything like this?
Quote:
Originally Posted by cyrano
You can of course combine the two ADC values and output a floating number. Still, the floating part isn't coming from the hardware, but from a calculation.
|
Yes, this is basically what I'm suggesting. But this way the 32 bit file container can handle anything you throw at it.
My experiment:
Carefully set two inputs on my Fireface 802 to levels differing by a factor of 2^n (hard to do accurately).
Feed the same signal into both, increasing from zero to a value well above clipping for the more sensitive ADC, recording to 32 bit float files.
Multiply the amplitude of the less sensitive result by 2^n - this will also go well over 0dBFS, but that's OK because it's float.
Render to a single file, replacing the clipped parts of one file with the > 0dBFS parts of the second file. The result was exactly what I was expecting, containing values from zero to well above FS.
If n = 8, the second file can go more than 48 dB over FS, the low level signals in the first file will still have 24 bit resolution. In practice the switching between ADCs would happen seamlessly whenever necessary.
We are not trying to break the laws of physics related to thermal noise, but to achieve a system where there is no need at all to set input levels in field recordings.
The limitations I was working with, including my sig gen (a phone app) and time constraints make supplying actual data impractical, sorry.