MMFFT.INT 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. {========================================================================}
  2. {= (c) 1995-98 SwiftSoft Ronald Dittrich =}
  3. {========================================================================}
  4. {= All Rights Reserved =}
  5. {========================================================================}
  6. {= D 01099 Dresden = Tel.: +0351-8012255 =}
  7. {= Loewenstr.7a = info@swiftsoft.de =}
  8. {========================================================================}
  9. {= Actual versions on http://www.swiftsoft.de/mmtools.html =}
  10. {========================================================================}
  11. {= This code is for reference purposes only and may not be copied or =}
  12. {= distributed in any format electronic or otherwise except one copy =}
  13. {= for backup purposes. =}
  14. {= =}
  15. {= No Delphi Component Kit or Component individually or in a collection=}
  16. {= subclassed or otherwise from the code in this unit, or associated =}
  17. {= .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed =}
  18. {= without express permission from SwiftSoft. =}
  19. {= =}
  20. {= For more licence informations please refer to the associated =}
  21. {= HelpFile. =}
  22. {========================================================================}
  23. {= $Date: 20.01.1998 - 18:00:00 $ =}
  24. {========================================================================}
  25. unit MMFFT;
  26. {$I COMPILER.INC}
  27. interface
  28. uses
  29. {$IFDEF WIN32}
  30. Windows,
  31. {$ELSE}
  32. WinTypes,
  33. WinProcs,
  34. {$ENDIF}
  35. SysUtils,
  36. MMUtils,
  37. MMMath,
  38. MMAbout;
  39. type
  40. PfCplx = ^TfCplx;
  41. TfCplx = record
  42. re: FLoat;
  43. im: Float;
  44. end;
  45. PfCplxArray = ^TfCplxArray;
  46. TfCplxArray = array[0..0] of TfCplx;
  47. PFFTCplx = ^TFFTCplx;
  48. TFFTCplx = record
  49. Order : integer;
  50. FFTLen : integer;
  51. Scale : Float;
  52. BitRevTable: PIntArray;
  53. SinTable : PfCplxArray;
  54. end;
  55. PFFTReal = ^TFFTReal;
  56. TFFTReal = record
  57. Order : integer;
  58. FFTLen : integer;
  59. Scale : Float;
  60. BitRevTable: PIntArray;
  61. SinTable1 : PfCplxArray;
  62. SinTable2 : PfCplxArray;
  63. end;
  64. procedure fvecMul1(Vec: PFloatArray; val: Float; n: integer); pascal;
  65. procedure fvecMul2(SrcVec,DstVec: PfCplxArray; n: integer); pascal;
  66. procedure fvecZero1(Vec: PFloatArray; n: integer); pascal;
  67. procedure fvecZero2(Vec: PfCplxArray; n: integer); pascal;
  68. function CalcWindowFunc(Window, idx, Len: integer): Float;
  69. procedure GenWindowTableInt(pTable: PIntArray; Window, Order: integer);
  70. procedure GenWindowTableFloat(pTable: PFloatArray; Window, Order: integer);
  71. procedure CalcWindowInt(Samps: PIntArray; Window,Order: integer);
  72. procedure CalcWindowFloat(Samps: PFloatArray; Window,Order: integer);
  73. procedure GenBitRevTable(pTable: PIntArray; Order: integer);
  74. procedure fvecBitRev1(Vec: PFloatArray; BitRevTable: PIntArray; Order: integer); pascal;
  75. procedure fvecBitRev2(Vec: PfCplxArray; BitRevTable: PIntArray; Order: integer); pascal;
  76. procedure GenSinTable1(SinTable: PfCplxArray; Order: integer); pascal;
  77. procedure GenSinTable2(SinTable: PfCplxArray; Order: integer); pascal;
  78. procedure DoCplxFFT1(re, im: PFloatArray; scTable: PfCplxArray; FFTLen, sign: integer); pascal;
  79. procedure DoCplxFFT2(samps, scTable: PfCplxArray; FFTLen, sign: integer); pascal;
  80. procedure BuildRealOutput(samps, SinTable: PfCplxArray; N,Sign: integer); pascal;
  81. function InitCplxFFT(iOrder: integer): PFFTCplx;
  82. procedure DoneCplxFFT(var pfft: PFFTCplx);
  83. procedure DoCplxFFTa(pfft: PFFTCplx; re, im: PFLoatArray; Sign: integer);
  84. procedure DoCplxFFTb(pfft: PFFTCplx; samps: PfCplxArray; Sign: integer);
  85. function InitRealFFT(iOrder: integer): PFFTReal;
  86. procedure DoneRealFFT(var pfft: PFFTReal);
  87. procedure DoRealFFT(pfft: PFFTReal; Samps: PFloatArray; Sign: integer);
  88. implementation