Beispiel #1
0
dft_plan_t* generate_new_plan(int dft_size) {
	int i;
	static int oldest_extra_plan = 0;

	modinfo_msg("Warning, no plan was precomputed for size %d. Generating.\n",dft_size);
	for (i=0;i<(MAX_EXTRA_PLANS-1);i++) {
		if (!extra_plans[i].size) {
			if (dft_plan_c2c(dft_size, (!direction)?FORWARD:BACKWARD, &extra_plans[i])) {
				return NULL;
			}
			extra_plans[i].options = options;
			return &extra_plans[i];
		}
	}

	if (oldest_extra_plan == (MAX_EXTRA_PLANS-1)) {
		oldest_extra_plan = 0;
	} else {
		oldest_extra_plan++;
	}
	if (dft_plan_c2c(dft_size, (!direction)?FORWARD:BACKWARD, &extra_plans[oldest_extra_plan])) {
		return NULL;
	}
	extra_plans[oldest_extra_plan].options = options;
	return &extra_plans[oldest_extra_plan];
	/*modinfo_msg("Maximum number of extra plans (%d) surpassed.\n",MAX_EXTRA_PLANS);
	return NULL;*/
}
Beispiel #2
0
int dft_plan_c2r(const int dft_points, dft_dir_t dir, dft_plan_t *plan) {
	if (dft_plan_c2c(dft_points, dir, plan)) {
		return -1;
	}
	plan->mode = COMPLEX_2_REAL;
	return 0;
}
Beispiel #3
0
dft_plan_t* generate_new_plan(int dft_size) {
	int i;

	modinfo_msg("Warning, no plan was precomputed for size %d. Generating.\n",dft_size);
	for (i=0;i<MAX_EXTRA_PLANS;i++) {
		if (!extra_plans[i].size) {
			if (dft_plan_c2c(dft_size, (!direction)?FORWARD:BACKWARD, &extra_plans[i])) {
				return NULL;
			}
			extra_plans[i].options = options;
			return &extra_plans[i];
		}
	}
	return NULL;
}
Beispiel #4
0
int dft_plan(const int dft_points, dft_mode_t mode, dft_dir_t dir, dft_plan_t *plan) {

	switch(mode) {
	case COMPLEX_2_COMPLEX:
		if (dft_plan_c2c(dft_points,dir,plan)) {
			return -1;
		}
		break;
	case REAL_2_REAL:
		if (dft_plan_r2r(dft_points,dir,plan)) {
			return -1;
		}
		break;
	case COMPLEX_2_REAL:
		if (dft_plan_c2r(dft_points,dir,plan)) {
			return -1;
		}
		break;
	}
	return 0;
}