David Südholt
David Südholt

Reputation: 143

Algorithm behaves differently in matlab and scilab

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?

Upvotes: 1

Views: 1632

Answers (1)

R. Johnson
R. Johnson

Reputation: 102

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)

Upvotes: 1

Related Questions