Example #1
0
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;
}
Example #2
0
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);
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
AccelerateFFT<double>::~AccelerateFFT()
{
    free (doubleComplexSplit.realp);
    free (doubleComplexSplit.imagp);
    vDSP_destroy_fftsetupD (fftSetupDouble);
}
Example #6
0
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);
}