实数快速傅里叶变换
实数FFT可以利用变换的对称性或快速哈特莱变换来减少乘法运算,理论上乘法运算量可以减少约一半,然而在目前的计算机上实际运算时间确更长。 1、测试代码 (1)利用FFT直接计算实数FFT变换 void FFT1(Complex Xn[], int R2N, double data[], int N) { //赋值 for (int i = 0; i < N; i++) { Xn[i] = data[i]; } //补零 memset(Xn + N, 0, (R2N - N) * sizeof(Complex)); FFT(Xn, R2N); } (2)利用哈特莱变换换算FFT void FFT2(Complex Xn[], int R2N, double data[], int N) { double *Yn = reinterpret_cast<double*>(Xn); int N2 = R2N >> 1; //赋值 memcpy(Yn, data, N * sizeof(double)); memset(Yn + N, 0, (R2N - N) * sizeof(double)); //哈特莱变换 FHT(Yn, R2N); //后半部分 for (int i = 1; i < N2; i++) { Xn[R2N - i]._Val[0] = (Yn[i] + Yn[R2N -