summaryrefslogtreecommitdiff
path: root/macros/ifft2.sci
blob: 762631d4f9e6ff1912d4c51e44b2907fb70dbd1b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Author: Abinash Singh <abinashsinghlalotra@gmail.com>
*/
/*Description
    Calculates the inverse two-dimensional discrete Fourier transform of A using a Fast Fourier Transform algorithm.
    It performs inverse two-dimensional FFT on the matrix A. m and n may be used specify the number of rows and columns of A to use. If either of these is larger
    than the size of A, A is resized and padded with zeros.
    If A is a multi-dimensional matrix, each two-dimensional sub-matrix of A is treated separately.
Calling Sequence
     ifft2 (A)
     ifft2 (A, m, n)
Parameters
     A: input matrix
     m: number of rows of A to be used
     n: number of columns of A to be used
Examples
     A= [1 2 3; 4 5 6; 7 8 9]
     m = 4
     n = 4
     ifft2 (A, m, n) --functionCall
     ans =
        2.81250 + 0.00000i  -0.37500 + 0.93750i   0.93750 + 0.00000i  -0.37500 - 0.93750i
        -1.12500 + 0.93750i  -0.31250 - 0.50000i  -0.37500 + 0.31250i   0.31250 + 0.25000i
        0.93750 + 0.00000i  -0.12500 + 0.31250i   0.31250 + 0.00000i  -0.12500 - 0.31250i
        -1.12500 - 0.93750i   0.31250 - 0.25000i  -0.37500 - 0.31250i  -0.31250 + 0.50000i
*/
function res = ifft2(A, m, n)
    funcprot(0);
    lhs = argn(1)
    rhs = argn(2)
    if (rhs < 1 | rhs > 3)
        error("Wrong number of input arguments.")
    end
    size_x=size(A)
    len=length(size_x)
    //to figure out size of multidimensional array
    if len>2 then
        last_dim=size_x(len)
    else
        last_dim=1
    end    
    select(rhs)
        case 1 then
        res=[]
        for i=1:last_dim //treating each submatrix seperately
            res(:,:,i)=fft(A(:,:,i),1)
        end
    case 2 then
        error("Wrong number of input arguments.")
    case 3 then
        res=[]
        for i=1:last_dim 
            res(:,:,i)=fft(resize_matrix(A(:,:,i),m,n),1)
        end
    end
endfunction