void AccelerateFFT<double>::setAudioFrameSize (int frameSize) { fftSize = frameSize; fftSizeOver2 = fftSize / 2; log2n = log2f (fftSize); if (configured) { free (doubleComplexSplit.realp); free (doubleComplexSplit.imagp); vDSP_destroy_fftsetupD (fftSetupDouble); } doubleComplexSplit.realp = (double*)malloc (fftSize * sizeof (double)); doubleComplexSplit.imagp = (double*)malloc (fftSize * sizeof (double)); fftSetupDouble = vDSP_create_fftsetupD (log2n, FFT_RADIX2); if (fftSetupDouble == nullptr) { // couldn't set up FFT assert (false); } configured = true; }
void processing_deinit(Processing* p){ vDSP_destroy_fftsetupD(p->fs); vDSP_destroy_fftsetupD(p->sfs); free(p->signal); free(p->preview); free(p->real); free(p->imag); free(p->spectrum); free(p->points); free(p->subSignalImag); free(p->subSignalReal); free(p->subSpectrumImag); free(p->subSpectrumReal); free(p->subSpectrum); }
void xtract_free_vdsp_data(xtract_vdsp_data *vdsp_data) { free(vdsp_data->fft.realp); free(vdsp_data->fft.imagp); vDSP_destroy_fftsetupD(vdsp_data->setup); vdsp_data->fft.realp = NULL; vdsp_data->fft.imagp = NULL; vdsp_data->initialised = false; }
void FFTLib_op::Initialize(int N, bool optimize) { Exp = (int) log2(N); if (Init) { delete[] A.realp; delete[] A.imagp; vDSP_destroy_fftsetupD(SetupReal); } A.realp = new double[ N/2]; A.imagp = new double[ N/2]; SetupReal = vDSP_create_fftsetupD(Exp, 0); Init = true; }
AccelerateFFT<double>::~AccelerateFFT() { free (doubleComplexSplit.realp); free (doubleComplexSplit.imagp); vDSP_destroy_fftsetupD (fftSetupDouble); }
void computeReferenceD(clFFT_SplitComplexDouble *out, clFFT_Dim3 n, unsigned int batchSize, clFFT_Dimension dim, clFFT_Direction dir) { FFTSetupD plan_vdsp; DSPDoubleSplitComplex out_vdsp; FFTDirection dir_vdsp = dir == clFFT_Forward ? FFT_FORWARD : FFT_INVERSE; unsigned int i, j, k; unsigned int stride; unsigned int log2Nx = (int) log2(n.x); unsigned int log2Ny = (int) log2(n.y); unsigned int log2Nz = (int) log2(n.z); unsigned int log2N; log2N = log2Nx; log2N = log2N > log2Ny ? log2N : log2Ny; log2N = log2N > log2Nz ? log2N : log2Nz; plan_vdsp = vDSP_create_fftsetupD(log2N, 2); switch(dim) { case clFFT_1D: for(i = 0; i < batchSize; i++) { stride = i * n.x; out_vdsp.realp = out->real + stride; out_vdsp.imagp = out->imag + stride; vDSP_fft_zipD(plan_vdsp, &out_vdsp, 1, log2Nx, dir_vdsp); } break; case clFFT_2D: for(i = 0; i < batchSize; i++) { for(j = 0; j < n.y; j++) { stride = j * n.x + i * n.x * n.y; out_vdsp.realp = out->real + stride; out_vdsp.imagp = out->imag + stride; vDSP_fft_zipD(plan_vdsp, &out_vdsp, 1, log2Nx, dir_vdsp); } } for(i = 0; i < batchSize; i++) { for(j = 0; j < n.x; j++) { stride = j + i * n.x * n.y; out_vdsp.realp = out->real + stride; out_vdsp.imagp = out->imag + stride; vDSP_fft_zipD(plan_vdsp, &out_vdsp, n.x, log2Ny, dir_vdsp); } } break; case clFFT_3D: for(i = 0; i < batchSize; i++) { for(j = 0; j < n.z; j++) { for(k = 0; k < n.y; k++) { stride = k * n.x + j * n.x * n.y + i * n.x * n.y * n.z; out_vdsp.realp = out->real + stride; out_vdsp.imagp = out->imag + stride; vDSP_fft_zipD(plan_vdsp, &out_vdsp, 1, log2Nx, dir_vdsp); } } } for(i = 0; i < batchSize; i++) { for(j = 0; j < n.z; j++) { for(k = 0; k < n.x; k++) { stride = k + j * n.x * n.y + i * n.x * n.y * n.z; out_vdsp.realp = out->real + stride; out_vdsp.imagp = out->imag + stride; vDSP_fft_zipD(plan_vdsp, &out_vdsp, n.x, log2Ny, dir_vdsp); } } } for(i = 0; i < batchSize; i++) { for(j = 0; j < n.y; j++) { for(k = 0; k < n.x; k++) { stride = k + j * n.x + i * n.x * n.y * n.z; out_vdsp.realp = out->real + stride; out_vdsp.imagp = out->imag + stride; vDSP_fft_zipD(plan_vdsp, &out_vdsp, n.x*n.y, log2Nz, dir_vdsp); } } } break; } vDSP_destroy_fftsetupD(plan_vdsp); }