Analysis of Michelson interference images

This page represents a portion of an ongoing project aimed at mapping the surface of a diamond wafer using the interference pattern that the diamond wafer creates when it is placed in the beam path of a Michelson interferometer. In his work on this project, Matthew Demas created a parallel Simulated Annealing algorithm designed to analyze the interference patterns and he tested it out on a simulated surface and its interferogram. The next step is to create simulated surfaces that more and more closely resemble the surface of a real diamond wafer and use the algorithm to analyze their interferograms so that we can determine the optimal settings for the algorithm when it is analyzing the interferogram of a real diamond wafer.

Creating a Surface Generator
Matlab was used to create a program that would generate simulated surfaces and their interferograms to be analyzed using the algorithm. As was true for the test surface used in Reference [1], Legendre polynomials of two variables were chosen as a basis set with which to describe the surfaces. The surfaces are described by the weighted sum of the matrix elements $$a_{i,j}P_{i}(x)P_{j}(y)$$ [1]. These elements take the products of the Legendre polynomials of x and of y in all possible combinations of respective i's and j's and assign to each product its own coefficient, namely $$a_{i,j}$$. This is what the surface generator is designed to do. The first set of surfaces was kept somewhat similar to the original test surface. Their interferograms were kept at fifty pixels by fifty pixels, but the coefficients were randomly generated and Legendre polynomials up to the 2nd degree were incorporated. These changes make the surface more closely resemble the surface of a real diamond wafer, but also make the surface a little more difficult for the algorithm to analyze.

ParSA and Runlength
Once we have generated two surfaces and their interferogram, we can let the algorithm work on it. The algorithm works by meandering through solution space and assigning a Costfunction to each solution it comes upon. If the solution is a poor one, the Costfunction is high, but if the solution is good, then the Costfunction is low. After the algorithm has assigned a Costfunction to a given solution, the algorithm either accepts that solution and moves to it or rejects it and finds another one. The decision of whether to accept or reject a solution with a given Costfunction depends on the temperature of the algorithm at that point in time. The temperature refers to the probability that the algorithm will accept or reject a poor solution. So when the algorithm is "hot" and has a high temperature, it is more likely to accept a poor solution, and when the algorithm is "cool" and has a low temperature, it is less likely to accept a poor solution. As it runs the algorithm completes a cycle that involves first "heating up," i.e., increasing its temperature so that it accepts more and more poor solutions and then "cooling down," i.e., decreasing its temperature so that it accepts fewer and fewer solutions. This cycle, by first heating up and then cooling down, ensures that the algorithm begins from a random position and the solution it ultimately accepts as the best one is not dependent on its starting position. Due to running the MIR, or Multiple Independent Runs, program, this cycle is completed many times during the running of the algorithm, and each cycle is called a run. Each run heats up and then cools down until it reaches a parameter which can be specified and which is called endtemperature. It cools down by a factor of $$\alpha$$, so that at each step n, the temperature $$T_{n}$$ is equal to $$\alpha T_{n-1}$$. The first run is 100,000 steps long, and after the first run, each run is increased by a factor called Beta_Runtime. This continues until the final run, which is the longest run shorter than the product of Runfactor and 100,000. Once it has reached this longest run, the algorithm has completed one Sample and the next Sample is begun until the algorithm has completed the specified number of samples [2].

Analysis
For a given problem, there is an optimal Run Length which allows the algorithm to solve the problem with the most accuracy in the least time. It is possible to find this optimal Run Length by analyzing the statistics of many runs of many different lengths. The analysis goes as follows:

$$P=(\kappa/n)^\alpha$$

is the probability of failure, where n is the Run Length and \kappa and \alpha are determined by the experiment in question, and

$$p=(n_{f}+1)/(N+2)$$

is the probability of non-convergence, i.e., the probability of failure, where $$n_{f}$$ is the number of runs that failed to converge upon a solution and N is the total number of runs. Therefore, if we set these two equal and look at the log-log plot of p against n,

$$log(p)=log((\kappa/n)^\alpha)$$,

the slope of the plot will be equal to $$\alpha$$ and the y-intercept to $$\kappa$$. Then we can plug these values back into $$P=(\kappa/n)^\alpha$$ in order to find the optimal n.