As discussed in a previous post (here), read or readout noise is the noise or uncertainty added to every pixel value read out of a CCD array. This noise is largely associated with the imperfect conversion of an analog signal into a digital value.
The method to determine a CCD’s readout noise contribution to the final signal is as follows1:
The results of performing these operations on ten pairs of bias frames is summarized in the table below:
| Pair # | Std. Dev | Gain | Read Noise2 |
| Bias Pair 1 | 35.388 ADU | 0.37 e-/ADU | 9.26 e- RMS |
| Bias Pair 2 | 35.305 ADU | 0.37 e-/ADU | 9.24 e- RMS |
| Bias Pair 3 | 35.327 ADU | 0.37 e-/ADU | 9.24 e- RMS |
| Bias Pair 4 | 35.294 ADU | 0.37 e-/ADU | 9.23 e- RMS |
| Bias Pair 5 | 35.250 ADU | 0.37 e-/ADU | 9.22 e- RMS |
| Bias Pair 6 | 35.259 ADU | 0.37 e-/ADU | 9.22 e- RMS |
| Bias Pair 7 | 35.416 ADU | 0.37 e-/ADU | 9.27 e- RMS |
| Bias Pair 8 | 35.372 ADU | 0.37 e-/ADU | 9.25 e- RMS |
| Bias Pair 9 | 35.220 ADU | 0.37 e-/ADU | 9.21 e- RMS |
| Bias Pair 10 | 35.226 ADU | 0.37 e-/ADU | 9.22 e- RMS |
| Average | 35.306 ADU | 0.37 e-/ADU | 9.24 e- RMS |
1From “Handbook of CCD Astronomy Second Edition” by Steve B. Howell
2Published read noise for this device = 9.3 e- RMS
After several years of using general scripting software (CCD Commander) for all my astro-photography image capture needs, I’ve decided to learn and write my own scripts that are tailored to my specific equipment and to my unique needs. The programming language I’m using is Python (currently at version 2.6.5). Python is a general purpose, high-level programming language that is free and open-source software. It supports both object oriented programming and structured programming. I’ve found Python to be very easy to learn, write, and debug. It fully and reliably supports the COM interfaces that most (if not all) ASCOM-compliant astronomy software currently implements.
The first script that I have written and fully debugged is a routine that I use to capture dark and bias calibration frames. Typically, I do not spend time at my dark site capturing dark and bias frames. Instead, when I get home or when needed, I place the camera in the refrigerator (a dark and relatively cold place) and have the software automatically take the calibration frames while I sleep. On a typical night I might instruct the script to take, for example, 40 dark frames at 600 seconds each (10 minutes) at a CCD temperature of -10C and then take 100 bias frames at the same temperature.
When the program is started, the following menu is shown:
Exec_DarkBias.py
——————————-
1. Specify save path
2. Setup for Dark Frames
3. Setup for Bias Frames
4. Confirm setup
5. Reset settings
6. Begin script
7. Quit
Option ‘1′ displays the current save path and allows the operator either to accept this path or specify a new path for the calibration frames. The second option asks for operator input to specify the Dark frame exposure length, binning, number of frames and CCD temperature setpoint for these frames. Option ‘3′ asks for operator input to specify the Bias binning, number of frames, and CCD temperature. The fourth option displays the current settings for path, Dark frames, and Bias frames for operator verification. Option ‘5′ resets all path, Dark, and Bias settings to their default, startup values. Entering a ‘6′ starts the script operation and entering a ‘7′ quits the entire program.
When the script begins, the software first checks to make sure either Dark frames setup or Bias frames setup (or both) have been specified then it sets the Dark frame CCD temperature setpoint. Next a loop is entered where the CCD temperature is checked once a second. The CCD temperature is considered stable when the read-back temperature does not deviate more than +/-0.5C from the setpoint temperature for 120 consecutive readings (2-minutes). If the temperature does not stabilize within 8 minutes, the program fails, displays an error message, and terminates. Otherwise, the CCD temperature will be considered stable and Dark frame capture will begin. After all dark frames have been taken, the Bias frame CCD temperature will be set. If the Bias CCD temperature is the same as the Dark CCD temperature, no wait for stabilization will occur. Otherwise, the same CCD temperature stabilization loop will execute. After all Bias frames have been captured, the script will end and the program will return to the top-level menu. Here, another script can be set up or the program can be terminated.
This script makes use of the Maxim/DL CAMERA COM object only. Additionally, a log file is generated that saves the progress of the program for future reference. The program listing and a sample logfile for this program is available by clicking on the link below:
After having owned and operated a SBIG ST-8XME CCD camera for the past four years, I now own one of SBIG’s latest CCD cameras, the ST-8300M. Like the ST-8XME, the ST-8300M is a monochrome, temperature controlled, CCD camera. Here, most of the similarities between these two cameras comes to an end. The ST-8300M is an anti-blooming (ABG) camera with a large-format, small pixel-size CCD array. A comparison of the important specification differences between these two cameras is presented in the table below:
| Specification | ST-8300M | ST-8XME |
|---|---|---|
| CCD | Kodak KAF-8300 | Kodak KAF-1603ME |
| Pixel Array | 3326 x 2504 | 1530 x 1020 |
| CCD Size | 17.96 x 13.52 mm | 13.8 x 9.2 mm |
| Total Pixels | 8.3 million | 1.6 million |
| Pixel Size | 5.4 x 5.4 microns square | 9 x 9 microns square |
| Full Well Capacity | ~25,500 e- | ~100,000 e- |
| Dark Current | ~0.02e-/pixel/sec at -15C. | 1e-/pixel/sec at 0C. |
| Antiblooming | 1000X | None |
| Shutter | Mechanical | Electromechanical |
| Exposure | 0.1 to 3600 seconds, 10ms resolution |
0.12 to 3600 seconds, 10ms resolution |
| Correlated Double Sampling | Yes | Yes |
| A/D Converter | 16 Bits | 16 Bits |
| A/D Gain | 0.37e-/ADU | 2.3e-/ADU |
| Read Noise | ~9.3e- rms | ~15e- rms |
| Full Frame Download | ~7.5 seconds | ~3.7 seconds |
| Cooling – standard | Single Stage Thermoelectric, Active Fan, max delta -40C, -36C regulated at ~80% power |
Single Stage Thermoelectric, Active Fan, Water Assist -45 C from Ambient Typical with water, -35 C w/air only |
| Temperature Regulation | ±0.1°C | ±0.1°C |
| Power | 12VDC at 3 amps, universal power supply included |
5VDC at 1.5 amps, +/-12VDC at 0.5 amps, power supply included |
| Computer Interface | USB 2.0 | USB 1.1 |
| Weight | Approx. 1.8 pounds / 0.8kg | Approx. 2 pounds/0.9kg |

This photo was taken on the evening of 26 January 2010. At the time, the Moon was approximately 12-days past its new phase and was very high in the eastern sky. The image was taken with a Canon XSi DSLR (450D) attached to a Takahashi TSA-102S refracting telescope reduced to a focal length of 610mm. The image exposure was 1/100 second at ISO 100. The camera was focused on a 4th magnitude star using FocusMax software. Click here to view a larger representation of this image.
In any astronomical image there are three noise regimes that figure into the image’s signal-to-noise ratio (SNR). These regimes are the uncertainty associated with the signal itself (shot noise), the uncertainty associated with the readout electronics of the camera (read noise), and the uncertainty associated with the dark current that builds up within the sensor due to thermal effects (dark noise). All CCDs experience a certain amount of dark current during an exposure. Dark current is expressed as electrons per second per pixel and these electrons add to the electrons that build up in pixel wells as a result of exposure to the light from astronomical objects (stars, planets, galaxies, etc.). Dark current can be reduced by cooling the sensor and this is why astronomical CCD cameras usually have an ability to be cooled.
As an example, the Kodak sensor in the SBIG ST-8 camera specifies a dark current of 1 electron per second per pixel at a sensor temperature of 0.0o Celsius. This means that over the course of a ten-minute exposure, each pixel will accumulate approximately 600 extra electrons over and above that provided by the light from the object being imaged. The specifications for the ST-8 sensor also say that the dark current doubling temperature is 6.3o Celsius. This means that if the sensor is cooled to -6.3o Celsius the dark current will then be 0.5 electrons per second per pixel and for each additional cooling by 6.3o Celsius, the dark current will be cut in half again.
To combat dark current, calibration dark frames are created by taking an exposure of the same length of time and at the same sensor temperature as the light frame but with the shutter closed. This dark frame records only the dark current that builds up over the course of the exposure for each pixel. The dark frame can then be subtracted pixel-by-pixel from the light frame to completely remove the dark current effects from the light frame. However, this subtraction operation is not without consequences because by performing the subtraction, extra noise is injected into the light frame. This noise can be mitigated by taking multiple dark frames and combining them into one “master dark”. The usual way to create the master is to find the average or median value for each pixel across all dark frames. As more dark frames are added, the noise contribution to the light image becomes less. The question becomes: How many dark frames is enough?
In an effort to figure out how many dark frames is enough, I captured 100 dark frames (600 second exposure @ -20o Celsius) and combined different number of dark frames into master dark frames. For each master dark frame, I measured the noise in the frame by finding the Standard Deviation of a small patch of the frame not affected by hot pixels. The table below summarizes the results of this effort:
| # Dark Frames | Std. Deviation (ADU) | Combine Method1 |
| 1 | 7.864 | None |
| 2 | 5.789 | Mean |
| 4 | 4.528 | Clip Min/Max Mean (Max=1/Min=1) |
| 8 | 3.157 | Clip Min/Max Mean (Max=2/Min=1) |
| 16 | 2.318 | Clip Min/Max Mean (Max=3/Min=2) |
| 24 | 1.985 | Clip Min/Max Mean (Max=4/Min=2) |
| 36 | 1.732 | Clip Min/Max Mean (Max=5/Min=3) |
| 50 | 1.539 | Clip Min/Max Mean (Max=6/Min=4) |
| 64 | 1.439 | Clip Min/Max Mean (Max=8/Min=5) |
| 75 | 1.406 | Clip Min/Max Mean (Max=12/Min=6) |
| 100 | 1.325 | Clip Min/Max Mean (Max=15/Min=10) |
1 Method “Clip Min/Max Mean” first removes or “clips” the specified number of max values and min values then calculates the mean of all the remaining values for each pixel in the image.
The graph of the Standard Deviation versus the number of dark frames combined is shown below.
Summary: As is apparent from the table and the graph, the point of diminishing returns in reached somewhere around the area where 40 dark frames is reached. At this point, the master dark frame has a Standard Deviation of around 1.65 ADU or about 4.3 electrons (assuming a gain of 2.6 electrons per ADU). Since the dark current noise is very much less than the read noise (20 electrons), 40 dark frames seems sufficient.