| Shortcuts to: | Pictures and Movies | System Description | Software Downloads | Presentations and Publications |

|
|
|
|
| Item | Model | Manufacturer | US$ when purchased |
| PC | 1 GHz Pentium III, 815E
256MB DIMM, PC133 7 ISA, 7PCI backplane |
Kontron USA | 1828.60 |
| Frame Grabber | PC-Dig PCI LVDS | Coreco Imaging | 1350.00 |
| DAC Voltage Output Card | CIO-DAC02 card
25 conductor cable 25-pin screw terminal |
Measurement Computing | 293.00 |
| CCD camera | Dalstar CA-D6 955 frames/s, 260 by 260, 8-bit | Dalsa | 6100.00 |
| Camera-to-frame-grabber cable | DBHD100-TO-OPEN 100-pin LVDS cabel | Matrox, connector in house | 95.00 |
| CCD camera power supply | in house | ||
| Deformable mirror (DM) | 37-actuator, 15-mm diameter with driver and digital boards | Okotech | 6600.00 |
| HV power supply for DM | 2 F03H in parallel | EMCO High Voltage Corp. | 229.50 |
| tip-tilt mirror with controller | K-108-00 PSH-8 platform
E-103-24 power supply 2 E-103-20 amplifiers E-103-90 casing |
Piezosystem Jena | 6694.00 |
| various optics and mounts | Edmund Industrial Optics | 629.85 |
Large software costs often destroy the advantage of AO systems that are designed around low cost hardware. We have tried to avoid this pitfall by selecting hardware elements that implied minimal software efforts. This included the use of an industrial PC with Linux RedHat 7.1 out of the box and the selection of interface cards with supported Linux drivers.
The tip-tilt mirror is mounted on a PSH-8 piezo-driven platform from PiezoJena, which has a large tilt range of 8 mrad. This large tilt range is necessary because of the large demagnification of the pupil from 1.5 m to about 10 mm.
The DM is a gold-coated 37-actuator electrostatic membrane mirror from Okotech in the Netherlands. It has been well characterized in numerous laboratory experiments (see list of publications at http://www.okotech.com). This 15-mm diameter mirror has sufficient range for use in astronomical adaptive optics, as the mirror mode amplitudes are well matched to the atmospheric seeing modes. The mirror actuators show no hysteresis and are almost completely linear with the applied voltage squared (see figure below). The achievable surface shape can be well controlled at up to 1 kHz, which is sufficient for infrared AO at the McMath-Pierce telescope. Okotech provides the necessary ISA computer interface and high-voltage driver cards. High-voltage converters step a 12-volt laboratory power source supply up to the 300-volts required by the high-voltage mirror driver cards.

The wavefront sensor is based on an orthogonal lenslet array and a Dalsa CA-D6-256 CCD camera. The camera has 256 by 256 pixels and reads out at nearly 1kHz with 8-bit internal digitization. This camera is connected to a PC-Dig LVDS digital frame grabber from Coreco Imaging Technologies. The latter can keep up with the 1-kHz full frame rate provided by the camera and can transfer the digital data at the required rate over the PCI bus to the main memory. The industrial PC from Kontron USA is based on a combined PCI/ISA passive back-plane and a 1GHz Pentium III single-board computer that uses the Intel 815E chipset.
There are currently two independent optical setups. One is for tip-tilt correction only and is called the Universal Tracker (UT). It has already been used with three very different post-focus instruments. The other setup is the full AO setup whose science instrument has so far been limited to a simple video camera.
For the UT setup, the camera looks at an image of the telescope focal plane without the lenslet array. There are three tip-tilt correction modes:
The correlation tracker approach is somewhat different from previous work in that almost the whole 256 by 256 image is used for the tracking. This large field of view allows tracking on features that have contrasts as low as 1%. This does not require that the seeing be good enough to discern solar granulation. The larger-scale pattern of solar convection is sufficient to provide reasonably stable image motion compensation. The correlation tracker provides better stable image motion compensation than other systems that use much smaller fields of view.
There are two crucial parts of the software. The first is the Linux driver for the digital frame grabber, which is provided by GOM in Germany as an open-source project (http://oss.gom.com). The company has proven to be very responsive to our needs, in particular in adapting the code to our Dalsa camera. The test program supplied with the driver was used as the backbone of all of our software developments. We could therefore concentrate on the few crucial pieces of code that derive the control signals and control the mirrors.
The other crucial software aspect consists in the use of the MMX and
SSE instructions provided by the Pentium III to (1) dark and gain correct
the images coming from the camera and (2) calculate the sum of absolute
differences between an image and a reference for various displacements.
These time-critical pieces of software have been implemented in inline
assembler code within the C program. MMX and SSE instructions provide parallel
processing on up to 8 pixels. Dark and gain corrections are performed with
16-bit accuracy and then the calibrated images are truncated to 8 bits.
#define NS 256 /* number of subapertures */
#define RX 16 /* size of reference subaperture in x */
#define RY 16 /* size of reference subaperture in y */
#define SX 8 /* size of subapertures in x */
#define SY 8 /* size of subapertures in y */
uint8_t cimag[NS*SX*SY] __attribute__ ((aligned (32)));
uint8_t refim[RX*RY] __attribute__ ((aligned (32)));
/* calculate sum of absolute differences for one subaperture */
int sae(int dx, int dy, int sn) {
/* dx, dy: current shift vector
sn: subaperture number */
uint32_t c1 = 0;
uint8_t *ip, *rp; /* pointers to appropriate rows */
ip = &cimag[sn*SX*SY]; /* start at first pixel of each subaperture */
rp = &refim[(dy+4)*RX+dx+4]; /* reference is loaded unaligned with movq*/
/* assembler code for one subaperture */
asm("movq (%1), %%mm1 \n\t" /* load 8 reference pixels unaligned */
"psadbw (%2), %%mm1 \n\t" /* sum of absolute differences */
"movq 16(%1), %%mm0 \n\t" /* reference is 16 pixels wide, skip */
"psadbw 8(%2), %%mm0 \n\t" /* by 16 pixels per row */
"paddw %%mm0, %%mm1 \n\t" /* add to previous sum in MMX register */
"movq 32(%1), %%mm0 \n\t"
"psadbw 16(%2), %%mm0 \n\t"
"paddw %%mm0, %%mm1 \n\t"
"movq 48(%1), %%mm0 \n\t"
"psadbw 24(%2), %%mm0 \n\t"
"paddw %%mm0, %%mm1 \n\t"
"movq 64(%1), %%mm0 \n\t"
"psadbw 32(%2), %%mm0 \n\t"
"paddw %%mm0, %%mm1 \n\t"
"movq 80(%1), %%mm0 \n\t"
"psadbw 40(%2), %%mm0 \n\t"
"paddw %%mm0, %%mm1 \n\t"
"movq 96(%1), %%mm0 \n\t"
"psadbw 48(%2), %%mm0 \n\t"
"paddw %%mm0, %%mm1 \n\t"
"movq 112(%1),%%mm0 \n\t"
"psadbw 56(%2), %%mm0 \n\t"
"paddw %%mm0, %%mm1 \n\t"
"movd %%mm1, %0 \n\t"
"emms \n\t"
: "=g" (c1)
: "r" (rp), "r" (ip)
);
return c1;
}
|
The sum-of-absolute-differences algorithm is shown above. The movq instruction
moves 8 pixels simultaneously into MMX registers. The psadbw instruction
calculates the sum of absolute differences of 8 pixels in the captured
image with 8 pixels of the reference image. This instruction can be scheduled
every 2.5 clock cycles (2.5 ns for our 1GHz processor) since the Pentium
III has two execution units that can handle psadbw instructions. However,
the 1-GHz Pentium III can, on average, only load 1 byte per clock cycle,
meaning that the performance is typically limited by the 1GByte/s I/O limit
and not by the processing power. Nevertheless, this is sufficient to run
the 256 by 256 pixel correlation tracking at more than 500 Hz or analyze
200 wavefront sensor subapertures with 8 by 8 pixel images and a 16 by
16 pixel reference image at 1kHz. The 200 subapertures are about 10 times
more than in any other working solar AO system and at least a factor of
2 more than any solar AO system currently under development.
|
|
|
|
Last change: February 19, 2003 by ckeller@noao.edu