In another context, I’ve been asked about the sources of noise in CMOS image sensors. There are several kinds of noise involved: read noise, photon or shot noise, and pixel response nonuniformity (PRNU). This post attempts to give a non-quantitative listing of the sources of read noise.
In CMOS image sensors, read noise refers to the uncertainty or variation introduced when converting and extracting photo-generated charge from each pixel into a digital value. Unlike shot noise (which is signal-dependent), read noise is signal-independent and represents the floor of detectability for low-light imaging.
Modern CMOS sensors usually use column-parallel analog-to-digital converters (ADCs) to increase speed and reduce power. These architectures introduce unique read noise contributors, both shared and per-column.
Here’s a simplified signal path for a modern CMOS sensor:
Photodiode → Floating Diffusion → Source Follower → Multiplexer → Column Line → Sample-and-Hold → Programmable Gain Amplifier → ADC
Let’s look at the noise sources at each stage:
Thermal (kTC) Reset Noise. When the floating diffusion node (FD) is reset before signal integration, it stores a charge with some thermal uncertainty. This is random from frame to frame and is typically removed using correlated double sampling (CDS). I’m not going to cover CDS here.
Source Follower Noise. Each pixel usually has a source follower transistor (current amplifier) to buffer the charge on the FD node.
The source follower contributes a) 1/f (flicker) noise, which is more prominent at low frequencies and can be mitigated with layout and process optimization, and b) Thermal noise, which is due to channel resistance in the MOSFET. This noise scales with transistor size and bias current.
Column Line Noise (Charge Injection, Cap Loading)
The shared column bus introduces noise due to
- Multiplexing errors, crosstalk/charge injection from control signals
- Coupling to parasitic capacitances
- Sample-and-hold circuits
Sample and Hold Noise. The sample and hold circuitry, which locks the signal in place while the ADC does the conversion, also contributes noise.
Programmable Gain Amplifier (PGA) Noise
The sample and hold is followed by an amplifier whose gain is programmable. That amplifier adds its own noise, and the amount of noise added can vary with the gain. All the noise sources prior to the PGA are amplified by the PGA.
-
Introduces thermal noise, offset, and gain non-uniformity.
-
Gain setting can amplify both signal and upstream noise, and any noise added within the PGA itself.
-
At high gain settings, PGA noise may dominate over ADC noise or comparator offsets.
-
Implementation varies: some use analog PGAs, others use switched-capacitor gain stages, each with distinct noise characteristics.
Column ADC Noise. In column-parallel architectures, each column has its own ADC. These contribute:
- Quantization noise:
- Thermal and comparator noise
- Reference voltage fluctuations
- Mismatch between ADCs across columns
In addition, there are system wide sources of read noise:
Noise on:
- Reference voltage noise
- Analog power rail noise
- Bias line noise
- Crosstalk between columns
- Clock feedthrough into sensitive analog nodes
Why Independent Noise Sources Add in Quadrature
When multiple independent (i.e., uncorrelated) noise sources contribute to a measurement, the total noise is not just the sum of the individual standard deviations. Instead, it’s the square root of the sum of their variances. This is called adding in quadrature.
If:
- noise_1 has standard deviation sigma_1
- noise_2 has standard deviation sigma_2
- …
- noise_n has standard deviation sigma_n
and all noise sources are statistically independent, then the total noise standard deviation is:
sigma_total = sqrt(sigma_1^2 + sigma_2^2 + … + sigma_n^2)
This is because variances add:
Var(X + Y) = Var(X) + Var(Y) (if X and Y are independent)
Since standard deviation is the square root of variance:
sigma = sqrt(Var)
Two Noise Sources
Imagine a signal that has two independent noise sources:
- Thermal noise with sigma_thermal = 3 e⁻
- ADC quantization noise with sigma_adc = 4 e⁻
Then the total noise is:
sigma_total = sqrt(3^2 + 4^2) = sqrt(9 + 16) = sqrt(25) = 5 e⁻
Think of each noise source as causing random “jitter” in a different direction:
- If they push in exactly the same direction every time (i.e., correlated), you’d add linearly.
- But if they’re independent, their errors are like steps in random directions. The net effect grows like the hypotenuse of a triangle.
That’s why the Pythagorean theorem—i.e., squaring, summing, and taking a square root—shows up.
If the noise sources are correlated, then their joint variance includes a cross term:
Var(X + Y) = Var(X) + Var(Y) + 2 * Cov(X, Y)
In this case, you can’t just add the variances—you must also account for their covariance (how much they tend to rise and fall together).
In Imaging Sensors
In CMOS sensors, typical independent read noise sources include:
- Reset noise (kTC noise)
- Source follower transistor noise
- Column bus or sample-and-hold noise
- ADC noise
- Power supply fluctuations (if isolated per stage)
So, we model:
sigma_read^2 = sigma_reset^2 + sigma_sf^2 + sigma_column^2 + sigma_adc^2 + …
and then take:
sigma_read = sqrt(sigma_read^2)
Leave a Reply