#include "fft_plan.hpp" #include namespace fft { void init_plan(FFTPlan* plan, uint32_t log2N) { plan->log2N = log2N; plan->N = 1U << log2N; plan->stage_count = 0; plan->bit_reverse = 0; plan->xor_mask = 0; uint32_t n = plan->N; while (n > 1) { if (n % 8 == 0 && log2N >= 3) { plan->stages[plan->stage_count].radix = 8; plan->stages[plan->stage_count].group_size = n / 8; plan->stages[plan->stage_count].groups = 8; plan->stage_count++; n /= 8; } else if (n % 4 == 0 && log2N >= 2) { plan->stages[plan->stage_count].radix = 4; plan->stages[plan->stage_count].group_size = n / 4; plan->stages[plan->stage_count].groups = 4; plan->stage_count++; n /= 4; } else if (n % 2 == 0) { plan->stages[plan->stage_count].radix = 2; plan->stages[plan->stage_count].group_size = n / 2; plan->stages[plan->stage_count].groups = 2; plan->stage_count++; n /= 2; } } } }