function res = fft1 (D, N, DIM) // Description // Calculates the discrete Fourier transform of a matrix using Fast Fourier Transform algorithm. // The FFT is calculated along the first non-singleton dimension of the array. Thus, FFT is computed for each column of D. // The variable 'N' is an integer that determines the number of elements of 'D' to use. // If 'N' is larger than the dimension along which the FFT is calculated, // then 'D' is resized and padded with zeros to match the required size.On the other hand, // if 'N' is smaller than the size of 'D', then 'D' is truncated to match the required size. // DIM is an integer specifying the dimension of the matrix along which the FFT is performed. // Calling Sequence // fft1 (D) // fft1 (D, N) // fft1 (D, N, DIM) // Parameters // D: input matrix // N: Specifies the number of elements of x to be used // DIM: Specifies the dimention of the matrix along which the FFT is performed // Examples // D = [1 2 3; 4 5 6; 7 8 9] // N = 3 // DIM = 2 // fft1 (D,N,DIM) // ans = // 6.0000 + 0.0000i -1.5000 + 0.8660i -1.5000 - 0.8660i // 15.0000 + 0.0000i -1.5000 + 0.8660i -1.5000 - 0.8660i // 24.0000 + 0.0000i -1.5000 + 0.8660i -1.5000 - 0.8660i funcprot(0); lhs = argn(1) rhs = argn(2) if (rhs < 1 | rhs > 3) error("Wrong number of input arguments.") end dimension = size(D); // first non-singleton dimension nsdim = find(dimension >1,1) if isempty(nsdim) then nsdim = 1 // default to 1 to avoid error while calling fft end select(rhs) case 1 then res = fft(D, -1, nsdim); case 2 then if isempty(N) then n = size(D, nsdim); else n = N; end new_size = size(D); new_size(nsdim) = n; D = resize_matrix(D, new_size); res = fft(D, -1, nsdim); case 3 then if isempty(N) then n = size(D, DIM); else n = N; end new_size = size(D); new_size(DIM) = n; D = resize_matrix(D, new_size); res= fft(D, -1, DIM); end endfunction