WFE simulation through Zernike Fringe Phase optimization

  • 15 November 2023
  • 5 replies



In order to simulate WFE in my design, I’ve added a Zernike Fringe Phase surface in the exit pupil. I then generate the desired amount of error through optimization of a merit function with ZERN operand (ZERN(-5)) and I’ve defined the 37 zernike parameters of my surface as variables.

It works but it generates almost exactly the same WFE (same WFE amplitude which is expected but also same wavefront shape) at each run of the optimization (I reset all parameters to zero before a new run).

What could I do to end up with a different wavefront shape? 

Thank you


Best answer by Kevin Scales 21 November 2023, 20:09

View original

5 replies

Userlevel 7
Badge +3

It doesn’t surprise me that optimization gives the same result each time. The optimizer tries to find the lowest value of merit function every time. Global Search may offer you more variety, or you could program the Zernike with a ZPL macro and the RAND() function.


Hi Mark, thank you for your reply.

I understand your point but I was expecting to get different Zernike coeff values, leading to the same WFE, at each optimization. But I have almost exactly the same value for each coefficient every time.

You suggestion using the RAND() function is to start with more random values for the coeff rather than all set to zero before the optimization. Do I understand you correctly?

Userlevel 7
Badge +3

Try running a cycle or two of Global Search. If you run too many they will all tend to look alike, as the optimizer tried to reduce the MF to zero. Just run 1 or two cycles and you may be a wider range of Zernike values.

Userlevel 4
Badge +1

Hi Renaud,

If you are starting with the same inputs and the same targets, the result will be the same every time. In an optimization, the starting conditions can be critical, and starting from one set of inputs can lead to a very different system than you get with a different set of inputs. Like Mark suggested, you could work with a global search or use ZPL to make some randomized starting conditions. But if I understand your description, you might also just start with some different Zernike parameter values and see if they lead to a different wavefront. There are lots of Zernike-defined wavefronts that have the same RMS, so I’d say just try a few different starting values for your variables.


Hi Kevin.

Thank you for the suggestions!