The cyclotomic fast Fourier transform is a type of fast Fourier transform algorithm over finite fields. This algorithm first decomposes a DFT into several circular convolutions, and then derives the DFT results from the circular convolution results. When applied to a DFT over                     G        F        (                  2                      m                          )                , this algorithm has a very low multiplicative complexity. In practice, since there usually exist efficient algorithms for circular convolutions with specific lengths, this algorithm is very efficient.
The discrete Fourier transform over finite fields finds widespread application in the decoding of error-correcting codes such as BCH codes and Reed–Solomon codes. Generalized from the complex field, a discrete Fourier transform of a sequence                     {                  f                      i                                    }                      0                                N            −            1                                   over a finite field GF(pm) is defined as
                              F                      j                          =                  ∑                      i            =            0                                N            −            1                                    f                      i                                    α                      i            j                          ,        0        ≤        j        ≤        N        −        1        ,                where                     α                 is the N-th primitive root of 1 in GF(pm). If we define the polynomial representation of                     {                  f                      i                                    }                      0                                N            −            1                                   as
                    f        (        x        )        =                  f                      0                          +                  f                      1                          x        +                  f                      2                                    x                      2                          +        ⋯        +                  f                      N            −            1                                    x                      N            −            1                          =                  ∑                      0                                N            −            1                                    f                      i                                    x                      i                          ,                it is easy to see that                               F                      j                                   is simply                     f        (                  α                      j                          )                . That is, the discrete Fourier transform of a sequence converts it to a polynomial evaluation problem.
Written in matrix format,
                              F                =                  [                                                                                          F                                          0                                                                                                                                        F                                          1                                                                                                                    ⋮                                                                                                  F                                          N                      −                      1                                                                                                    ]                =                  [                                                                                          α                                          0                                                                                                            α                                          0                                                                                        ⋯                                                                      α                                          0                                                                                                                                        α                                          0                                                                                                            α                                          1                                                                                        ⋯                                                                      α                                          N                      −                      1                                                                                                                    ⋮                                                  ⋮                                                  ⋱                                                  ⋮                                                                                                  α                                          0                                                                                                            α                                          N                      −                      1                                                                                        ⋯                                                                      α                                          (                      N                      −                      1                      )                      (                      N                      −                      1                      )                                                                                                    ]                          [                                                                                          f                                          0                                                                                                                                        f                                          1                                                                                                                    ⋮                                                                                                  f                                          N                      −                      1                                                                                                    ]                =                              F                                    f                .                Direct evaluation of DFT has an                     O        (                  N                      2                          )                 complexity. Fast Fourier transforms are just efficient algorithms evaluating the above matrix-vector product.
First, we define a linearized polynomial over GF(pm) as
                    L        (        x        )        =                  ∑                      i                                    l                      i                                    x                                    p                              i                                                    ,                  l                      i                          ∈                  G          F                (                  p                      m                          )        .                                    L        (        x        )                 is called linearized because                     L        (                  x                      1                          +                  x                      2                          )        =        L        (                  x                      1                          )        +        L        (                  x                      2                          )                , which comes from the fact that for elements                               x                      1                          ,                  x                      2                          ∈                  G          F                (                  p                      m                          )        ,                                    (                  x                      1                          +                  x                      2                                    )                      p                          =                  x                      1                                p                          +                  x                      2                                p                          .                
Notice that                     p                 is invertible modulo                     N                 because                     N                 must divide the order                               p                      m                          −        1                 of the multiplicative group of the field                               G          F                (                  p                      m                          )                . So, the elements                     {        0        ,        1        ,        2        ,        …        ,        N        −        1        }                 can be partitioned into                     l        +        1                 cyclotomic cosets modulo                     N                :
                    {        0        }        ,                                    {                  k                      1                          ,        p                  k                      1                          ,                  p                      2                                    k                      1                          ,        …        ,                  p                                    m                              1                                      −            1                                    k                      1                          }        ,                                    …        ,                                    {                  k                      l                          ,        p                  k                      l                          ,                  p                      2                                    k                      l                          ,        …        ,                  p                                    m                              l                                      −            1                                    k                      l                          }        ,                where                               k                      i                          =                  p                                    m                              i                                                              k                      i                                              (          mod                    N          )                        . Therefore, the input to the Fourier transform can be rewritten as
                    f        (        x        )        =                  ∑                      i            =            0                                l                                    L                      i                          (                  x                                    k                              i                                                    )        ,                          L                      i                          (        y        )        =                  ∑                      t            =            0                                              m                              i                                      −            1                                    y                                    p                              t                                                              f                                    p                              t                                                    k                              i                                                    mod                              N                                                    .                In this way, the polynomial representation is decomposed into a sum of linear polynomials, and hence                               F                      j                                   is given by
                              F                      j                          =        f        (                  α                      j                          )        =                  ∑                      i            =            0                                l                                    L                      i                          (                  α                      j                          k                              i                                                    )                .
Expanding                               α                      j                          k                              i                                                    ∈                  G          F                (                  p                                    m                              i                                                    )                 with the proper basis                     {                  β                      i            ,            0                          ,                  β                      i            ,            1                          ,        …        ,                  β                      i            ,                          m                              i                                      −            1                          }                , we have                               α                      j                          k                              i                                                    =                  ∑                      s            =            0                                              m                              i                                      −            1                                    a                      i            j            s                                    β                      i            ,            s                                   where                               a                      i            j            s                          ∈                  G          F                (        p        )                , and by the property of the linearized polynomial                               L                      i                          (        x        )                , we have
                              F                      j                          =                  ∑                      i            =            0                                l                                    ∑                      s            =            0                                              m                              i                                      −            1                                    a                      i            j            s                                    (                      ∑                          t              =              0                                                      m                                  i                                            −              1                                            β                          i              ,              s                                                      p                                  t                                                                          f                                          p                                  t                                                            k                                  i                                                            mod                                  N                                                              )                        This equation can be rewritten in matrix form as                               F                =                  A          L          Π          f                        , where                               A                         is an                     N        ×        N                 matrix over GF(p) that contains the elements                               a                      i            j            s                                  ,                               L                         is a block diagonal matrix, and                               Π                         is a permutation matrix regrouping the elements in                               f                         according to the cyclotomic coset index.
Note that if the normal basis                     {                  γ                      i                                              p                              0                                                    ,                  γ                      i                                              p                              1                                                    ,        ⋯        ,                  γ                      i                                              p                                                m                                      i                                                  −                1                                                    }                 is used to expand the field elements of                               G          F                (                  p                                    m                              i                                                    )                , the i-th block of                               L                         is given by:
                                          L                                i                          =                              [                                                                                γ                                          i                                                                                      p                                                  0                                                                                                                                                          γ                                          i                                                                                      p                                                  1                                                                                                                                      ⋯                                                                      γ                                          i                                                                                      p                                                                              m                                                          i                                                                                −                          1                                                                                                                                                                                      γ                                          i                                                                                      p                                                  1                                                                                                                                                          γ                                          i                                                                                      p                                                  2                                                                                                                                      ⋯                                                                      γ                                          i                                                                                      p                                                  0                                                                                                                                                                  ⋮                                                  ⋮                                                  ⋱                                                  ⋮                                                                                                  γ                                          i                                                                                      p                                                                              m                                                          i                                                                                −                          1                                                                                                                                                          γ                                          i                                                                                      p                                                  0                                                                                                                                      ⋯                                                                      γ                                          i                                                                                      p                                                                              m                                                          i                                                                                −                          2                                                                                                                                          ]                                  which is a circulant matrix. It is well known that a circulant matrix-vector product can be efficiently computed by convolutions. Hence we successfully reduce the discrete Fourier transform into short convolutions.
When applied to a characteristic-2 field GF(2m), the matrix                               A                         is just a binary matrix. Only addition is used when calculating the matrix-vector product of                               A                         and                               L          Π          f                        . It has been shown that the multiplicative complexity of the cyclotomic algorithm is given by                     O        (        n        (                  log                      2                                  n                  )                                    log                              2                                                                                3                2                                                    )                , and the additive complexity is given by                     O        (                  n                      2                                    /                (                  log                      2                                  n                  )                                    log                              2                                                                                8                3                                                    )                .