Once we developed software interfaces to each of the hardware components, we started writing Python scripts to control the testbed safely for long periods of time. Before diving right into a complicated algorithm for creating a dark zone, we decided to implement speckle nulling because of its simplicity. In a short development time, it would serve as an end to end test to confirm that the testbed is aligned and our software infrastructure is working.
Our version of speckle nulling is implemented in Python, along with Wolfram scripts for sensing and control. Prior to running, two other steps need to be completed to derive the plate scale and the control normalization. Both of those steps are scripted to collect the data, and call a Wolfram script to generated the necessary output artifacts.
Speckle nulling was first tested without an apodizer, and we relied on the DM’s satellite spots for image re-centering.
PSF being corrected thanks to multiple Speckle Nulling iterations.
Results obtained on the HiCAT testbed, with a classical Lyot coronagraph.
Now that we have the WFIRST apodizer in, we no longer have satellite spots, and had to get creative. We decided create sine wave command on the DM to inject two speckles as far away from the PSF as possible (17 lambda/d), and we use those speckles for image re-centering. The injected speckles fall outside the dark zone, so speckle nulling never finds them.
Our speckle nulling algorithm is simple yet effective. It identifies the brightest speckle in the dark zone, and senses the number of cycles, initial amplitude and angle. Then we collect a data set over a range of phases, and fit a sine wave to the speckle intensity to find the best phase value. Using the new phase, we collect data over a range of amplitudes and fit a parabola to improve our amplitude value. Once we have the new phase and amplitude, a sine wave is generated as a DM command to kill the speckle, and the whole process repeats. Each iteration takes about 2 minutes, and a nice dark zone can be obtained with 150-200 iterations.
Speckle Nulling algorithm Flow Chart
Each iteration generates a three-frame diagram to show the speckle that was chosen and the result after the kill.
Iteration 5 of the Speckle Nulling process:
Left: Speckle chosen to be killed in the dark hole
Center: Same speckle has been killed, another is chosen to be killed
Right: Same, including the entire image
Each iteration of speckle sensing and control generates plots to show the fits for phase and amplitude.
Photometry of the chosen speckle as a function of the phase (top)
and the amplitude (bottom) of the sine phase added on the DM