| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- {========================================================================}
- {= (c) 1995-98 SwiftSoft Ronald Dittrich =}
- {========================================================================}
- {= All Rights Reserved =}
- {========================================================================}
- {= D 01099 Dresden = Tel.: +0351-8012255 =}
- {= Loewenstr.7a = info@swiftsoft.de =}
- {========================================================================}
- {= Actual versions on http://www.swiftsoft.de/mmtools.html =}
- {========================================================================}
- {= This code is for reference purposes only and may not be copied or =}
- {= distributed in any format electronic or otherwise except one copy =}
- {= for backup purposes. =}
- {= =}
- {= No Delphi Component Kit or Component individually or in a collection=}
- {= subclassed or otherwise from the code in this unit, or associated =}
- {= .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed =}
- {= without express permission from SwiftSoft. =}
- {= =}
- {= For more licence informations please refer to the associated =}
- {= HelpFile. =}
- {========================================================================}
- {= $Date: 20.01.1998 - 18:00:00 $ =}
- {========================================================================}
- unit MMFFT;
- {$I COMPILER.INC}
- interface
- uses
- {$IFDEF WIN32}
- Windows,
- {$ELSE}
- WinTypes,
- WinProcs,
- {$ENDIF}
- SysUtils,
- MMUtils,
- MMMath,
- MMAbout;
- type
- PfCplx = ^TfCplx;
- TfCplx = record
- re: FLoat;
- im: Float;
- end;
- PfCplxArray = ^TfCplxArray;
- TfCplxArray = array[0..0] of TfCplx;
- PFFTCplx = ^TFFTCplx;
- TFFTCplx = record
- Order : integer;
- FFTLen : integer;
- Scale : Float;
- BitRevTable: PIntArray;
- SinTable : PfCplxArray;
- end;
- PFFTReal = ^TFFTReal;
- TFFTReal = record
- Order : integer;
- FFTLen : integer;
- Scale : Float;
- BitRevTable: PIntArray;
- SinTable1 : PfCplxArray;
- SinTable2 : PfCplxArray;
- end;
- procedure fvecMul1(Vec: PFloatArray; val: Float; n: integer); pascal;
- procedure fvecMul2(SrcVec,DstVec: PfCplxArray; n: integer); pascal;
- procedure fvecZero1(Vec: PFloatArray; n: integer); pascal;
- procedure fvecZero2(Vec: PfCplxArray; n: integer); pascal;
- function CalcWindowFunc(Window, idx, Len: integer): Float;
- procedure GenWindowTableInt(pTable: PIntArray; Window, Order: integer);
- procedure GenWindowTableFloat(pTable: PFloatArray; Window, Order: integer);
- procedure CalcWindowInt(Samps: PIntArray; Window,Order: integer);
- procedure CalcWindowFloat(Samps: PFloatArray; Window,Order: integer);
- procedure GenBitRevTable(pTable: PIntArray; Order: integer);
- procedure fvecBitRev1(Vec: PFloatArray; BitRevTable: PIntArray; Order: integer); pascal;
- procedure fvecBitRev2(Vec: PfCplxArray; BitRevTable: PIntArray; Order: integer); pascal;
- procedure GenSinTable1(SinTable: PfCplxArray; Order: integer); pascal;
- procedure GenSinTable2(SinTable: PfCplxArray; Order: integer); pascal;
- procedure DoCplxFFT1(re, im: PFloatArray; scTable: PfCplxArray; FFTLen, sign: integer); pascal;
- procedure DoCplxFFT2(samps, scTable: PfCplxArray; FFTLen, sign: integer); pascal;
- procedure BuildRealOutput(samps, SinTable: PfCplxArray; N,Sign: integer); pascal;
- function InitCplxFFT(iOrder: integer): PFFTCplx;
- procedure DoneCplxFFT(var pfft: PFFTCplx);
- procedure DoCplxFFTa(pfft: PFFTCplx; re, im: PFLoatArray; Sign: integer);
- procedure DoCplxFFTb(pfft: PFFTCplx; samps: PfCplxArray; Sign: integer);
- function InitRealFFT(iOrder: integer): PFFTReal;
- procedure DoneRealFFT(var pfft: PFFTReal);
- procedure DoRealFFT(pfft: PFFTReal; Samps: PFloatArray; Sign: integer);
- implementation
|