Fourier2d.frink

View or download Fourier2d.frink in plain text format


/* This file contains routines for 2-dimensional Fourier transforms of discrete
   data.

   Note that these algorithms are now built into Frink and this file is no
   longer necessary!  */


// The (optional) second argument divFactor sets the scaling factor for
// the results.  This means that the scaling factor (the whole
// expression to the left of the summation symbol above) becomes:
//
//                          FFT        InverseFFT
//
//    divFactor =  0:     1/sqrt[n]    1/sqrt[n]
//    divFactor = -1:     1/n          1          (default)
//    divFactor =  1:     1            1/n      
//
//
// The (optional) third argument direction sets the sign used in the
// exponent.
//
//                              FFT          |        InverseFFT
//                                           |
//    direction =  1:   e^( 2 pi i j k / n)  |  e^(-2 pi i j k / n)   (default)
//    direction = -1:   e^(-2 pi i j k / n)  |  e^( 2 pi i j k / n)


/* Return the Fourier transform of a 2-D array. */
DFT2D[values, divFactor=-1, direction=1] :=
{
   rows = length[values]
   cols = length[values@0]
   result1 = new array
   
   for rowNum = 0 to rows-1
      result1@rowNum = DFT[values@rowNum, divFactor, direction]

   result1 = transpose[result1]

   result2 = new array
   for colNum = 0 to cols-1
      result2@colNum = DFT[result1@colNum, divFactor, direction]

   return transpose[result2]
}

// Produces the inverse of the FFT given by the FFT function.  In fact, it just
// calls the FFT function with appropriately-reversed parameters.
//
// If you specified the optional second or third arguments for the FFT
// function, you will need to pass in the *same* arguments to this function
// to get the inverse operation.  This function takes care of reversing them
// appropriately.
InverseDFT2D[x, divFactor=-1, direction=1] := DFT2D[x, -divFactor, -direction]


/** Returns the transpose of a 2D matrix. */
transpose[values] :=
{
   rows = length[values]
   cols = length[values@0]
   result = new array[[cols, rows]]
   for rowNum = 0 to rows-1
      for colNum = 0 to cols-1
         result@colNum@rowNum = values@rowNum@colNum

   return result      
}


View or download Fourier2d.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 18012 days, 14 hours, 58 minutes ago.