diff options
Diffstat (limited to 'macros/fft1.sci')
-rw-r--r-- | macros/fft1.sci | 113 |
1 files changed, 64 insertions, 49 deletions
diff --git a/macros/fft1.sci b/macros/fft1.sci index a0a6438..7d7b23a 100644 --- a/macros/fft1.sci +++ b/macros/fft1.sci @@ -1,49 +1,64 @@ -function res = fft1 (x, n, dim) -//Calculates the discrete Fourier transform of a matrix using Fast Fourier Transform algorithm. -//Calling Sequence -//fft (x, n, dim) -//fft (x, n) -//fft (x) -//Parameters -//x: 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 -//Description -//This is an Octave function. -//The FFT is calculated along the first non-singleton dimension of the array. Thus, FFT is computed for each column of x. -// -//n is an integer specifying the number of elements of x to use. If n is larger than dimention along. which the FFT is calculated, then x is resized and padded with zeros. -//Similarly, if n is smaller, then x is truncated. -// -//dim is an integer specifying the dimension of the matrix along which the FFT is performed. -//Examples -//x = [1 2 3; 4 5 6; 7 8 9] -//n = 3 -//dim = 2 -//fft1 (x, 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 - -select(rhs) - - case 1 then - res = callOctave("fft", x) - - case 2 then - res = callOctave("fft", x, n) - - case 3 then - res = callOctave("fft", x, n, dim) - - end -endfunction +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
|