Packageorg.si.utils
Classpublic class FFT
InheritanceFFT Inheritance Object

Fast Fourier Transform module optimized for Flash10.

View the examples



Public Properties
 PropertyDefined 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
Public Methods
 MethodDefined 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
  
scale(n:Number):FFT
Scaling data.
FFT
  
setData(src:Vector.<Number>):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
Property Detail
improperty
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.

lengthproperty 
length:int  [read-only]

source data length


Implementation
    public function get length():int
reproperty 
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.

Constructor Detail
FFT()Constructor
public function FFT(len:int)

constructor, specify source data length. The length must be 2^n.

Parameters
len:int
Method Detail
calcDCT()method
public function calcDCT():FFT

Calculate Discrete Cosine Transform

Returns
FFT — this insance
calcFFT()method 
public function calcFFT():FFT

Calculate Fast Fourier Transform with complex numbers.

Returns
FFT — this insance
calcIDCT()method 
public function calcIDCT():FFT

Calculate Inversed Discrete Cosine Transform

Returns
FFT — this insance
calcIFFT()method 
public function calcIFFT():FFT

Calculate Inversed Fast Fourier Transform with complex numbers.

Returns
FFT — this insance
calcRealFFT()method 
public function calcRealFFT():FFT

Calculate Fast Fourier Transform with real numbers.

Returns
FFT — this insance
calcRealIFFT()method 
public function calcRealIFFT():FFT

Calculate Inversed Fast Fourier Transform with real numbers.

Returns
FFT — 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.

Returns
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.

Returns
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.

Returns
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.

Returns
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):FFT

Scaling data.

Parameters

n:Number — factor

Returns
FFT — this insance
setData()method 
public function setData(src:Vector.<Number>):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.

Parameters

src:Vector.<Number>

Returns
FFT — this insance
Examples
Basic usage for complex discrete fourier transfer.
// 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);
Basic usage for FFT (for real values) and DCT.
// 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)