⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft.~h

📁 fft变换算法的c++源代码
💻 ~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 + -