FFTのソースに関して少し補足させて頂きます。
>しいて言えば回転因子を生成している部分で負の周波数も
>生成しています。
実際にはこの回転因子はDCから始まってサンプリング
周波数の中央のサンプリング限界を超えてそれよりも高い
周波数までの回転因子を生成して乗算・積分を
行っています。
これはサンプリング周波数を超えた時点から鏡像つまり
エイリアスに対して計算を行っていることになります。
サンプリングされた信号は正方向はもちろん
後ろ方向にもエイリアスが延々と連なった成分を
持っていますので中央のサンプリング周波数を
超えた成分は実は負の周波数成分と等価です。
結果的に出来上がった積分値の配列はDCから始まり
サンプリング周波数の半分までは正の周波数成分で
それ以降は負の周波数成分となります。
なぜこのような処理を行うかといえば一貫した
回転因子の乗算を行えるのでプログラムの効率が
良いという事です。
もちろん正の周波数と負の周波数の双方の回転因子を
作成し教科書どおりフーリエ変換をまじめに行う事も
可能ですが一連の処理として全体に対してサンプリング
周波数までの回転因子を掛けて積分してもエイリアスに
より結果は分割して処理したものと同じものになります。