1

I'm implementing the Gerchberg-Saxton-Algorithm for phase retrieval in Matlab as part of a report. When I didn't have access to a PC with a Matlab license, I thought I could just continue working with Scilab. However, the results differ noticably.

Matlab code:

function [ realphase ] = GerchSax( source, target, iterations )

[n, m] = size(target);

fourierspace = fft2(source);
for iter=1:iterations
    fourierphase = angle(fourierspace);
    fourierspace = sqrt(abs(target)) .* exp(1i * fourierphase);

    realspace = ifft2(fourierspace);
    realphase = angle(realspace);
    realspace = sqrt(abs(source)) .* exp(1i * realphase);

    fourierspace = fft2(realspace);
end

Scilab code:

function [ res ] = angle(A)
    res = atan(imag(A), real(A))
endfunction


function [ realphase ] = GerchSax( source, target, iterations )

fourierspace = fft(source);
for iter=1:iterations
    fourierphase = angle(fourierspace);
    fourierspace = sqrt(abs(target)) .* exp(%i * fourierphase);

    realspace = ifft(fourierspace);
    realphase = angle(realspace);
    realspace = sqrt(abs(source)) .* exp(%i * realphase);

    fourierspace = fft(realspace);
end

The implementation of the "angle" function comes directly from Scilab documentation. As I understand it, fft in matlab performs the Fourier transformation on each column vector independently if given a matrix (thus the use of fft2 for actual 2D Fourier transformation), while scilab already does a 'real' 2D transformation with fft.

I used source = [1 1 1; 1 2 1; 1 1 1], target = [0 1 1; 0 1 1; 0 0 0] and 1000 iterations in both programs. Matlab returns the following phase distribution:

   -3.0589   -1.0472    0.9645
    3.1416         0    3.1416
    3.0589    1.0472   -0.9645

While I get this phase distribution from Scilab:

    2.0943951  - 1.0471976    2.0943951  
    3.1415927  - 1.977D-16    3.1415927  
  - 2.0943951    1.0471976  - 2.0943951

Did I make any mistakes converting the Matlab code into its correct Scilab equivalent? Is the FFT implemented differently in these environments?

1 Answer 1

1

fft is different between Scilab and Matlab the link below will show you how to implement fft to have an equivalent result in either matlab or scilab.

fft (Matlab function)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.