Package | org.si.utils |
Class | public class FFT |
Inheritance | FFT ![]() |
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():FFT
Calculate Fast Fourier Transform with complex numbers.
ReturnsFFT — this insance
|
calcIDCT | () | method |
public function calcIDCT():FFT
Calculate Inversed Discrete Cosine Transform
ReturnsFFT — this insance
|
calcIFFT | () | method |
public function calcIFFT():FFT
Calculate Inversed Fast Fourier Transform with complex numbers.
ReturnsFFT — this insance
|
calcRealFFT | () | method |
public function calcRealFFT():FFT
Calculate Fast Fourier Transform with real numbers.
ReturnsFFT — this insance
|
calcRealIFFT | () | method |
public function calcRealIFFT():FFT
Calculate 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):FFT
Scaling data.
Parameters
n:Number — factor
|
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> |
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)