How parameters influence pixel signal-to-noise ratio (SNR)
The pixel SNR is specified as
10*log10(sigPower / noisePower )
Here, we calculate the effective of pixel size on SNR.
Definitions
sigPower : The signal power at any voltage is the square of the number of electrons at that voltage. Signal variance is Poisson and thus the signal variance equals the number of electrons at each voltage (i.e., the square root of the signal power).
noisePower : The noise power is the sum of the signal variance and the read noise variance. The read noise variance is a parameter of the technology.
For each technology, the SNR varies as a function of the pixel voltage level. The precise SNR depends on factors like the dark voltage. In general, as the pixel voltage increases, the SNR also increases.
To compute pixel SNR , we use pixel signal and noise specified in units of electrons (see pixelSNR). This is important because the Poisson character of the noise is only true in units of electrons, but not in units of volts (the Poisson distribution is not invariant with respect to scaling).
See also: pixelSizeSNRvolts, pixelSNRluxsec
Copyright ImagEval Consultants, LLC, 2005.
Contents
Sensor Parameters:
% You can set the parameters here according to your technology % properties Each pixel size has associated noise integrationTime = 0.010; % Sec pixelSize = [2 4 6 9 10]*1e-6; % Pixel size in meters readNoiseSD = [5 4 3 2 1]*1e-3; % std dev in volts voltageSwing = [.7 1.2 1.5 2 3]; % voltage swing darkVoltage = [1 1 1 1 1]*1e-3; % Volts per sec
Create a monochrome sensor
sensor = sensorCreate('monochrome'); %Initialize sensor = sensorSet(sensor,'integrationTime',integrationTime);
Vary pixel size
clear SNR; clear luxsec; pixel = sensorGet(sensor,'pixel'); SNR = cell(1,length(pixelSize)); luxsec = cell(1,length(pixelSize)); for ii=1:length(pixelSize) pixel = pixelSet(pixel,'size constant fill factor',[pixelSize(ii),pixelSize(ii)]); pixel = pixelSet(pixel,'readNoiseSTDvolts',readNoiseSD(ii)); pixel = pixelSet(pixel,'voltageSwing',voltageSwing(ii)); pixel = pixelSet(pixel,'darkVoltage',darkVoltage(ii)); sensor = sensorSet(sensor,'pixel',pixel); [SNR{ii},luxsec{ii}] = pixelSNRluxsec(sensor); end % The data were saved in the cell arrays SNR{} and luxsec{}. % Here we make a summary plot. vcNewGraphWin; c = {'r','g','b','c','m','y','k'}; txt = cell(1,length(SNR)); for ii=1:length(SNR) semilogx(luxsec{ii},SNR{ii},['-',c{ii}]) hold on; txt{ii} = sprintf('%.0f um',pixelSize(ii)*10^6); end xlabel('Lux-sec'), ylabel('SNR (db)'); title('SNR vs. Lux-sec') grid on legend(txt);
