Bulk detector modelling

Overview

This model was built to give the user a simple but reliable tool to simulate or to understand main parameters used to design a photovoltaic (PV) infrared photodetector. All the work done in this model was based in classical equations found in the literature.

See the __main__ function for examples of use.

The example suggested here uses InSb parameters found in the literature. For every compound or material, all the parameters, as well as the bandgap equation must be changed.

This code uses the scipy.constants physical constants. For more details see http://docs.scipy.org/doc/scipy/reference/constants.html

This code does not yet fully comply with the coding standards

References:

[1] Infrared Detectors and Systems, EL Dereniak & GD Boreman, Wiley [2] Infrared Detectors, A Rogalski (1st or 2nd Edition), CRC Press [3] Band Parameters for III-V Compound Semiconductors and their Alloys, I. Vurgaftmann, J. R. Meyer, and L. R. Ram-Mohan, Journal of Applied Physics 89 11, pp. 5815–5875, 2001.

This package was partly developed to provide additional material in support of students and readers of the book Electro-Optical System Analysis and Design: A Radiometry Perspective, Cornelius J. Willers, ISBN 9780819495693, SPIE Monograph Volume PM236, SPIE Press, 2013. http://spie.org/x648.html?product_id=2021423&origin_id=x646

Module functions

pyradi.rydetector.JouleTeEv(EJ)

Convert energy in Joule to eV.

Args:
EJ: Energy in J
Returns:
EeV: Energy in eV
pyradi.rydetector.eVtoJoule(EeV)

Convert energy in eV to Joule.

Args:
E: Energy in eV
Returns:
EJ: Energy in J
pyradi.rydetector.FermiDirac(Ef, EJ, T)

Returns the Fermi-Dirac probability distribution, given the crystal’s Fermi energy, the temperature and the energy where the distribution values is required.

Args:
Ef: Fermi energy in J
EJ: Energy in J
T : Temperature in K
Returns:
fermiD : the Fermi-Dirac distribution
pyradi.rydetector.Absorption(wavelength, Eg, tempDet, a0, a0p)

Calculate the spectral absorption coefficient for a semiconductor material with given material values.

The model used here is based on Equations 3.5, 3.6 in Dereniaks book.

Args:
wavelength: spectral variable [m]
Eg: bandgap energy [Ev]
tempDet: detector’s temperature in [K]
a0: absorption coefficient [m-1] (Dereniak Eq 3.5 & 3.6)
a0p: absorption coefficient in [m-1] (Dereniak Eq 3.5 & 3.6)
Returns:
absorption: spectral absorption coefficient in [m-1]
pyradi.rydetector.AbsorptionFile(wavelength, filename)

Read the absorption coefficient from a data file and interpolate on the input spectral range.

The data file must have the wavelength in the first column and absorption coefficient in [m-1] in the second column.

Args:
wavelength: spectral variable [m]
filename: file containing the data
Returns:
wavelength: values where absorption is defined
absorption: spectral absorption coefficient in [m-1]
pyradi.rydetector.QuantumEfficiency(absorption, d1, d2, theta1, nFront, nMaterial)

Calculate the spectral quantum efficiency (QE) for a semiconductor material with given absorption and material values.

Args:
absorption: spectral absorption coefficient in [m-1]
d1: depth where the detector depletion layer starts [m]
d2: depth where the detector depletion layer ends [m]
theta1: angle between the surface’s normal and the radiation in radians
nFront: index of refraction of the material in front of detector
nMaterial: index of refraction of the detector material
Returns:
quantumEffic: spectral quantum efficiency
pyradi.rydetector.Responsivity(wavelength, quantumEffic)

Responsivity quantifies the amount of output seen per watt of radiant optical power input [1]. But, for this application it is interesting to define spectral responsivity that is the output per watt of monochromatic radiation.

The model used here is based on Equations 7.114 in Dereniak’s book.

Args:
wavelength: spectral variable [m]
quantumEffic: spectral quantum efficiency
Returns:
responsivity in [A/W]
pyradi.rydetector.DStar(areaDet, deltaFreq, iNoise, responsivity)

The spectral D* is the signal-to-noise output when 1 W of monochromatic radiant flux is incident on 1 cm2 detector area, within a noise-equivalent bandwidth of 1 Hz.

Args:
areaDet: detector’s area in [m2]
deltaFreq: measurement or desirable bandwidth - [Hz]
iNoise: noise current [A]
responsivity: spectral responsivity in [A/W]
Returns
detectivity [cm sqrt[Hz] / W] (note units)
pyradi.rydetector.NEP(iNoise, responsivity)

NEP is the radiant power incident on detector that yields SNR=1 [1].

Args:
iNoise: noise current [A]
responsivity: spectral responsivity in [A/W]
Returns
spectral noise equivalent power [W]
pyradi.rydetector.Isaturation(mobE, tauE, mobH, tauH, me, mh, na, nd, Eg, tDetec, areaDet)

This function calculates the reverse saturation current, by Equation 7.22 in Dereniak’s book

Args:
mobE: electron mobility [m2/V.s]
tauE: electron lifetime [s]
mobH: hole mobility [m2/V.s]
tauH: hole lifetime [s]
me: electron effective mass [kg]
mh: hole effective mass [kg]
na: acceptor concentration [m-3]
nd: donor concentration [m-3]
Eg: energy bandgap in [Ev]
tDetec: detector’s temperature in [K]
areaDet: detector’s area [m2]
Returns:
I0: reverse sat current [A]
pyradi.rydetector.EgVarshni(E0, VarshniA, VarshniB, tempDet)

This function calculates the bandgap at detector temperature, using the Varshni equation

Args:
E0: band gap at room temperature [eV]
VarshniA: Varshni parameter
VarshniB: Varshni parameter
tempDet: detector operating temperature [K]
Returns:
Eg: bandgap at stated temperature [eV]
pyradi.rydetector.IXV(V, IVbeta, tDetec, iPhoto, I0)

This function provides the diode curve for a given photocurrent.

The same function is also used to calculate the dark current, using IVbeta=1 and iPhoto=0

Args:
V: bias [V]
IVbeta: diode equation non linearity factor;
tDetec: detector’s temperature [K]
iPhoto: photo-induced current, added to diode curve [A]
I0: reverse sat current [A]
Returns:
current from detector [A]
pyradi.rydetector.Noise(tempDet, IVbeta, Isat, iPhoto, vBias=0)

This function calculates the noise power spectral density produced in the diode: shot noise and thermal noise. The assumption is that all noise sources are white noise PSD.

Eq 5.143 plus thermal noise, see Eq 5.148

Args:
tempDet: detector’s temperature [K]
IVbeta: detector nonideal factor [-]
Isat: reverse saturation current [A]
iPhoto: photo current [A]
vBias: bias voltage on the detector [V]
Returns:
detector noise power spectral density [A/Hz1/2]
R0: dynamic resistance at zero bias.
Johnson noise only noise power spectral density [A/Hz1/2]
Shot noise only noise power spectral density [A/Hz1/2]
pyradi.rydetector.DstarSpectralFlatPhotonLim(Tdetec, Tenvironment, epsilon)

This function calculates the photon noise limited D* of a detector with unlimited spectral response. This case does not apply to photon detectors. The absorption is assumed spectrally flat.

Args:
Tdetec: detector temperature [K]
Tenvironment: environment temperature [K]
epsilon: emissivity/absorption
Returns:
D* [cm sqrt[Hz] / W] (note units)