std1.0.0-beta-7 SafeC docs

std :: dsp::fft_core

Macro FFT_SQRT1_2

#include <std/dsp/fft_core.h> source

#define FFT_SQRT1_2 0.70710678118654752440

Radix-8: the radix-2 stages of length 2m, 4m and 8m fused (m >= 4), so each group of eight values is loaded and stored once instead of three times (radix-8 passes as in SPIRAL/FFTE's 8^q 16^r factorizations). For q in [q0, q1) (n/8 groups per pass), block q / m, k = q % m:

a_r = d[base + k + r m], r = 0..7
stage 2m: (a0,a1) (a2,a3) (a4,a5) (a6,a7)        twiddle W2m^k
stage 4m: (b0,b2) (b1,b3) (b4,b6) (b5,b7)        W4m^k, W4m^k * (-i)
stage 8m: (c0,c4) (c1,c5) (c2,c6) (c3,c7)        W8m^k * W8^r

with W8^1 = (1 - i)/sqrt2, W8^2 = -i, W8^3 = -(1 + i)/sqrt2 (conjugated for the inverse). 'wide' (a constant per ISA build) picks four complex values per vector (FFT_V8) or two (FFT_V4): two keep the 8 inputs of a double AVX2 build in 16 registers.