📄 fft.~h
字号:
//---------------------------------------------------------------------------
#ifndef FFTH
#define FFTH
#include <Classes.hpp>
#include <Complex.h>
//---------------------------------------------------------------------------
const int cMaxPrimeFactor = 1021;
const int cMaxPrimeFactorDiv2 = (cMaxPrimeFactor + 1) /2;
const int cMaxFactorCount = 20;
typedef int TIdx0FactorArray[cMaxFactorCount];
typedef int TIdx1FactorArray[cMaxFactorCount+1];
typedef complex<double> ComplexDoubleArray[cMaxPrimeFactor];
String sErrPrimeTooLarge = "Prime factor for FFT length too large. Change value for cMaxPrimeFactor in FFTs unit";
const double c31 = -1.5000000000000E+00; // cos(2*pi / 3) - 1;
const double c32 = 8.6602540378444E-01; // sin(2*pi / 3);
const double u5 = 1.2566370614359E+00; // 2*pi / 5;
const double c51 = -1.2500000000000E+00; // (cos(u5) + cos(2*u5))/2 - 1;
const double c52 = 5.5901699437495E-01; // (cos(u5) - cos(2*u5))/2;
const double c53 = -9.5105651629515E-01; //- sin(u5);
const double c54 = -1.5388417685876E+00; //-(sin(u5) + sin(2*u5));
const double c55 = 3.6327126400268E-01; // (sin(u5) - sin(2*u5));
const double c8 = 7.0710678118655E-01; // 1 / sqrt(2);
const double pi = 3.1415926535897932384626433832795;
//----------------------------------------------------------------------------
class TFFT
{
private:
void __fastcall Factorize(int Count,int &tFactorCount,TIdx1FactorArray &tFact);
void __fastcall ReorderSeries(int Count,int Factors[cMaxFactorCount],int Remain[cMaxFactorCount],const complex<double> *X, complex<double> *Y);
void __fastcall FFT_2(complex<double>*Z);
void __fastcall FFT_3(complex<double>*Z);
void __fastcall FFT_4(complex<double>*Z);
void __fastcall FFT_5(complex<double>*Z);
void __fastcall FFT_8(complex<double>*Z);
void __fastcall FFT_10(complex<double>*Z);
void __fastcall SynthesizeFFT(int Sofar, int Radix, int Remain,complex<double> *Y);
void __fastcall InitializeTrigonomials(int Radix,ComplexDoubleArray&Trig);
void __fastcall FFT_Prime(int Radix,ComplexDoubleArray&Trig,ComplexDoubleArray&Z);
public:
void __fastcall ForwardFFT(const complex<double> *Source, complex<double> *Dest,int Count);
void __fastcall InverseFFT(const complex<double> *Source, complex<double> *Dest,int Count);
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -