Nochmal: was meinst du mit Bit-Umkehr?
Da es um FFT geht, vermute ich mal, du meinst damit bit-reverse addressing.
Um die Bits zu vertauschen (also bit_n <-> bit_{N-n} bei N Bits), kann man folgendes machen:
Das Bit-reverse Inkrement von t ist dannCode:/* Reverse bits of the N-bit value bits */ static inline unsigned int reverse_bits (unsigned int N, unsigned int bits) { unsigned int rev = 0; while (N--) { rev <<= 1; if (bits & 1) rev |= 1; bits >>= 1; } return rev; }
reverse_bits (N, 1+reverse_bits (N, t))
oder so?
Da es wahrscheinlich auch auf Effizienz (speed) ankommt, kann man das noch mit Assembler tunen. Das wiederum ist plattformabhänhig. Manche µC verfügen eigens dafür über einen bit-reverse addressing mode (etwa TriCore).
Hoppla, hab gerade gesehen, daß du N schon verwendest... in dem falls ist
N_SprinterSB = exact_log2 (N_Mary)
BTW pi gibt's schon als Makro M_PI
Lesezeichen