summaryrefslogtreecommitdiff
path: root/macros/fft21.sci
blob: 3904be38a78de6b8c67b856bf752e4ddcca29eee (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
56
57
58
59

function res = fft21 (A, m, n)
// Description
//         Calculates the two-dimensional discrete Fourier transform of A using a Fast Fourier Transform algorithm.
//         It performs two-dimentional FFT on the matrix A. You can use the variables m and n to specify the number of rows and columns
//         of A that you want to use. If either of these variables is larger than the size of A,
//         then A will be resized, and zeros will be added as padding.
//         If A is a multi-dimensional matrix, the function will treat each two-dimensional sub-matrix of A separately.
//     Calling Sequence
//         fft21 (A)
//         fft21 (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
//         fft21 (A, m, n)
//         ans =
//             45 +  0i   -6 - 15i   15 +  0i   -6 + 15i
//             -18 - 15i   -5 +  8i   -6 -  5i    5 -  4i
//             15 +  0i   -2 -  5i    5 +  0i   -2 +  5i
//             -18 + 15i    5 +  4i   -6 +  5i   -5 -  8i 

    funcprot(0);
    lhs = argn(1)
    rhs = argn(2)
    if (rhs < 1 | rhs > 3)
        error("Wrong number of input arguments.")
    end
    siz=size(A)
    len=length(siz)
    select(rhs)
    case 1 then
        if len>2 then
            last_dim=siz(len)
        else
            last_dim=1
        end
        res=[]
        for i=1:last_dim
            res(:,:,i)=fft(A(:,:,i),-1)
        end
    case 2 then
        error("Wrong number of input arguments.")
    case 3 then
        if len>2 then
            last_dim=siz(len)
        else
            last_dim=1
        end
        res=[]
        for i=1:last_dim
            res(:,:,i)=fft(resize_matrix(A(:,:,i),m,n),-1)
        end;
    end
endfunction