text: I got the noise so low with just analogRead() that I couldn't do oversampling. For a number of DAC steps the 10-bit Arduino ADC always gives the same value. I don't need noise reduction, I need noise injection to make oversampling work.
  • The signal-component of interest should not vary significantly during a conversion.• There should be some noise present in the signal.• The amplitude of the noise should be at least 1 LSB.
  The tenth bit is the same for 1000 reads with analogRead() for about three out of four steps when I generate a ramp with a 12-bit DAC.
  In this example, the actual voltage falls between two steps of the 12-bit ADC resolution and there is nonoise riding on the signal. It is easy to see the problem. With no noise on the signal, the ADC result foreach conversion will be the same. Averaging produces no effective gain in resolution.
  You really need to read about ADCs, all manufacturers have good app notes on oversampling.
  What happens is that three of the steps in the 12-bit DAC result in the same value for all reads with the 10-bit AVR ADC.The fourth step results in two values but this doesn't mean there is 1 LSB of noise. Often most of the readings are one of the values.
  #include <McpDac.h>void setup() { Serial.begin(9600); mcpDacInit(); for (uint16_t i = 2000; i < 2024; i++) { mcpDacSend(i); for (uint16_t j = 0; j < 64; j++) { Serial.print(i); Serial.write(','); Serial.print(j); Serial.write(','); Serial.println(analogRead(0)); } delay(500); }}void loop() {}
  I would love to see a theoretical study that shows how adding noise to your signal improves the s/n ratio! I get the gut felling that is violating the second law somewhere on the line
  Note that this averaging is possible only if the signal contains perfect equally distributed noise (i.e. if the A/D is perfect and the signal's deviation from an A/D result step lies below the threshold, the conversion result will be as inaccurate as if it had been measured by the low-resolution core A/D and the oversampling benefits will not take effect).
  This is why I was cautious about ENOB. It is only a measure of resolution , not accuracy.
  ENOB specifies the number of bits in the digitized signal above the noise floor, this is accuracy.
  The effective number of bits (ENOB) is a way of quantifying the quality of an analog to digital conversion. A higher ENOB means that voltage levels recorded in an analog to digital conversion are more accurate.
  Resolution. An N-bit binary converter has N digital data inputs (DAC) or N digital data outputs (ADC). A converter that satisfies this criterion is said to have a resolution of N bits.
  The static absolute accuracy of a DAC can be described in terms of three fundamental kinds of errors: offset errors, gain errors, and integral nonlinearity.
  The traditional static specifications such as differential nonlinearity (DNL) and integral nonlinearity (INL) are most certainly reflected in the ac performance.
  Self Calibration of Internal Offset and Gain Per Each Conversion.
  This a quote from Analog Devices...
  A higher ENOB means that voltage levels recorded in an analog to digital conversion are more accurate.
  Resolution has nothing to do with accuracy.
  Please enter a valid email to subscribe
  We need to confirm your email address.
  To complete the subscription, please click the link in the
  Thank you for subscribing!
  Arduino
  via Egeo 16
  Torino, 10131
  Italy