richsch wrote: ↑
Tue Jul 09, 2019 5:12 am
I am noticing that it looks like the noise floor has moved up almost 30db compared to normal levels using the RTL2832 extio.
No, noise floor is exactly the same. The difference is that ExtIO_RTLSDR_u8 uses float 32-bit sample format, while classic RTL2832 uses byte 8-bit format. Software can show different absolute levels for different formats. But this is not noise floor shift, this is just a shift of displaying grid. The spectrum is remains the same.
For example RTL2832 may have -100 dB noise floor with -70 dB signal level.
With ExtIO_RTLSDR_u8 it will be -70 dB noise floor with -40 dB signal level.
SNR and spectrum shape is exactly the same for both cases.
The difference is that you're need to add some constant to all values on the grid labels.
But the spectrum remains the same, it just drawn with different labels and that's it.
This is calibration related issue.
Just calibrate level in your software for RTL2832 and for ExtIO_RTLSDR_u8 and then both will show exactly the same noise floor and signal levels.
I tried to add scale to get the same levels for different sample formats, but it turns that this is wrong way, because you will not be able to control when your ADC is near to max value. So, now it passing 32-bit float format with no scale. Such way allows to see when ADC is near overload level. In the current version (126.96.36.199) 0 dBFS means max allowed level of the signal on ADC input. If you exceed 0 dBFS level, ADC will be overloaded and you will get distortions.
ExtIO_RTLSDR_u8 uses 32-bit float sample format in order to support DC removal filter. Because, if you convert sample back to 8-bit format after DC-removal filter, you will lose precision. So, ExtIO_RTLSDR_u8 just passing data to software in 32-bit float format as is, with no converting it back to lossy 8-bit format.
When DC removal filter is disabled it is possible to use 8-bit sample format, but unfortunately ExtIO API doesn't support several formats simultaneously (the format should be selected just once at startup time). So I selected more precise 32-bit float format, it allows to enable DC-removal filter at ExtIO level, it helps when SDR software doesn't have such filter.
PS: actually u8 in the DLL name means "unsigned 8 bit" format
This is because I have different ExtIO versions for different devices with different sample format and using such notation to differ each other. But later I decided to add DC-removal filter for RTLSDR version, because UNOsdr don't have such filter for ExtIO. And this is the reason, why I changed format to 32-bit float (8-bit format doesn't allows filtering with no precision loss). But the name remains the same u8 from old times.