| Package | org.si.utils | 
| Class | public class FFT | 
| Inheritance | FFT    Object | 
| Property | Defined By | ||
|---|---|---|---|
| im : Vector.<Number>  Vector for imaginal numbers, you can set data and get result by this valiables, the length is a HALF of the source data length.  | FFT | ||
| length : int [read-only]  source data length   | FFT | ||
| re : Vector.<Number>  Vector for real numbers, you can set data and get result by this valiables, the length is a HALF of the source data length.  | FFT | ||
| Method | Defined By | ||
|---|---|---|---|
FFT(len:int)  constructor, specify source data length.  | FFT | ||
 Calculate Discrete Cosine Transform 
            | FFT | ||
 Calculate Fast Fourier Transform with complex numbers.  | FFT | ||
 Calculate Inversed Discrete Cosine Transform 
            | FFT | ||
 Calculate Inversed Fast Fourier Transform with complex numbers.  | FFT | ||
 Calculate Fast Fourier Transform with real numbers.  | FFT | ||
 Calculate Inversed Fast Fourier Transform with real numbers.  | FFT | ||
cdft(isgn:int, src:Vector.<Number>):void  [Functions from original code] Complex Discrete Fourier Tranform
            | FFT | ||
ddct(isgn:int, src:Vector.<Number>):void  [Functions from original code] Discrete Cosine Tranform
            | FFT | ||
ddst(isgn:int, src:Vector.<Number>):void  [Functions from original code] Discrete Sine Tranform (has some bugs in current version)
            | FFT | ||
getData(dst:Vector.<Number> = null):Vector.<Number>  Get result.  | FFT | ||
getIntensity(dst:Vector.<Number> = null):Vector.<Number>  Get intensity (re^2+im^2).  | FFT | ||
getMagnitude(dst:Vector.<Number> = null):Vector.<Number>  Get magnitude (sqrt(re^2+im^2)).  | FFT | ||
getPhase(dst:Vector.<Number> = null):Vector.<Number>  Get phase (atan2(re^2+im^2)).  | FFT | ||
rdft(isgn:int, src:Vector.<Number>):void  [Functions from original code] Real Discrete Fourier Tranform
            | FFT | ||
 Scaling data.  | FFT | ||
 Set source data, the passed vector is copied to "re" and "im" properties, the length of "src" must be same as you passed to constructor.  | FFT | ||
| im | property | 
public var im:Vector.<Number>Vector for imaginal numbers, you can set data and get result by this valiables, the length is a HALF of the source data length.
| length | property | 
length:int  [read-only] source data length
    public function get length():int| re | property | 
public var re:Vector.<Number>Vector for real numbers, you can set data and get result by this valiables, the length is a HALF of the source data length.
| FFT | () | Constructor | 
public function FFT(len:int)constructor, specify source data length. The length must be 2^n.
Parameterslen:int | 
| calcDCT | () | method | 
| calcFFT | () | method | 
 public function calcFFT():FFTCalculate Fast Fourier Transform with complex numbers.
ReturnsFFT — this insance
          | 
| calcIDCT | () | method | 
 public function calcIDCT():FFTCalculate Inversed Discrete Cosine Transform
ReturnsFFT — this insance
          | 
| calcIFFT | () | method | 
 public function calcIFFT():FFTCalculate Inversed Fast Fourier Transform with complex numbers.
ReturnsFFT — this insance
          | 
| calcRealFFT | () | method | 
 public function calcRealFFT():FFTCalculate Fast Fourier Transform with real numbers.
ReturnsFFT — this insance
          | 
| calcRealIFFT | () | method | 
 public function calcRealIFFT():FFTCalculate Inversed Fast Fourier Transform with real numbers.
ReturnsFFT — this insance
          | 
| cdft | () | method | 
 public function cdft(isgn:int, src:Vector.<Number>):void[Functions from original code] Complex Discrete Fourier Tranform
Parameters
isgn:int — 1 for FFT, -1 for IFFT.
           | |
src:Vector.<Number> — data to transform. The length must be same as you passed to constructor.
          | 
| ddct | () | method | 
 public function ddct(isgn:int, src:Vector.<Number>):void[Functions from original code] Discrete Cosine Tranform
Parameters
isgn:int — [ATTENTION] -1 for DCT, 1 for IDCT. Opposite from FFT.
           | |
src:Vector.<Number> — data to transform. The length must be same as you passed to constructor.
          | 
| ddst | () | method | 
 public function ddst(isgn:int, src:Vector.<Number>):void[Functions from original code] Discrete Sine Tranform (has some bugs in current version)
Parameters
isgn:int — [ATTENTION] -1 for DST, 1 for IDST. Opposite from FFT.
           | |
src:Vector.<Number> — data to transform. The length must be same as you passed to constructor.
          | 
| getData | () | method | 
 public function getData(dst:Vector.<Number> = null):Vector.<Number>Get result. The returned vector is a combination of "re"(even member) and "im"(odd member) properties.
Parameters
dst:Vector.<Number> (default = null) — Vector to recieve the result. The length must be same as you passed to constructor. Allocate vector inside when you pass null.
           | 
Vector.<Number> — A combination of "re"(even member) and "im"(odd member) properties.
          | 
| getIntensity | () | method | 
 public function getIntensity(dst:Vector.<Number> = null):Vector.<Number>Get intensity (re^2+im^2).
Parameters
dst:Vector.<Number> (default = null) — Vector to recieve intensities. The length must be HALF of the source data length. Allocate vector inside when you pass null.
           | 
Vector.<Number> — Vector of intensities, same vector as passed by the arugument when its not null.
          | 
| getMagnitude | () | method | 
 public function getMagnitude(dst:Vector.<Number> = null):Vector.<Number>Get magnitude (sqrt(re^2+im^2)).
Parameters
dst:Vector.<Number> (default = null) — The vector to recieve magnitudes. The length must be HALF of the source data length. Allocate vector inside when you pass null.
           | 
Vector.<Number> — Vector of magnitudes, same vector as passed by the arugument when its not null.
          | 
| getPhase | () | method | 
 public function getPhase(dst:Vector.<Number> = null):Vector.<Number>Get phase (atan2(re^2+im^2)).
Parameters
dst:Vector.<Number> (default = null) — The vector to recieve phases. The length must be HALF of the source data length. Allocate vector inside when you pass null.
           | 
Vector.<Number> — Vector of phases, same vector as passed by the arugument when its not null.
          | 
| rdft | () | method | 
 public function rdft(isgn:int, src:Vector.<Number>):void[Functions from original code] Real Discrete Fourier Tranform
Parameters
isgn:int — 1 for FFT, -1 for IFFT.
           | |
src:Vector.<Number> — data to transform. The length must be same as you passed to constructor.
          | 
| scale | () | method | 
 public function scale(n:Number):FFTScaling data.
Parameters
n:Number — factor
           | 
FFT — this insance
          | 
| setData | () | method | 
 public function setData(src:Vector.<Number>):FFTSet source data, the passed vector is copied to "re" and "im" properties, the length of "src" must be same as you passed to constructor.
Parameters
src:Vector.<Number> | 
FFT — this insance
          | 
// variables
var fft:FFT = new FFT(1024);    // specify source data length (must be 2^n)
var source:Vector.<Number> = new Vector.<Number>(1024);     // source vector
var result:Vector.<Number> = new Vector.<Number>(1024);     // result vector
var magnitude:Vector.<Number> = new Vector.<Number>(512);   // result vector for magnitude (half size of source)
var phase    :Vector.<Number> = new Vector.<Number>(512);   // result vector for phase (half size of source)
// complex source data
for (var i:int=0; i<1024; i+=2) {
    source[i]   = (i<512) ? -1 : 1;     // even members for real part 
    source[i+1] = 0;                    // odd members for imaginal part
}
// calculation
fft.setData(source);                // set source data
fft.calcFFT();                      // calculate FFT
// get result
trace(fft.re);                      // real part of FFT result (length = 512)
trace(fft.im);                      // imaginal part of FFT result (length = 512)
fft.getData(result);                // recieve combinated result by vector
trace(result);                      // combinated result (length = 1024, even for real/odd for imaginal)
trace(fft.getMagnitude(magnitude)); // vector for magnitude (length = 512)
trace(fft.getPhase(phase));         // vector for phase (length = 512)
// reconstruction
fft.calcIFFT().scale(1/512);    // calculate Inversed FFT with previous result (re and im).
                                // [REMARKS] The result from calcIFFT(), calcRealIFFT() or calcDCT() is scaled by length/2.
// get result (another way to get result vector)
var reconstructed:Vector.<Number> = fft.getData();  // allocate and return result vector (length = 1024)
// "fft.setData(source).calcFFT().calcIFFT().scale(2/source.length).getData()" is same as source.
trace(reconstructed);
// create FFT module
var fft:FFT = new FFT(1024);    // specify source data length (must be 2^n)
    
// real number source
var source:Vector.<Number> = new Vector.<Number>(1024);
for (var i:int=0; i<1024; i++) {
    source[i] = 1-i/512;        // simple real number vector
}
// calculate and get result
fft.setDat(source).calcRealFFT();                   // calculate FFT for real numbers
trace(fft.re);                                      // real part of FFT result(length = 512)
trace(fft.im);                                      // imaginal part of FFT result (length = 512)
trace(fft.setDat(source).calcDCT().getIntensity()); // intensity of DCT result (length = 512)