▼Hiroyuki Naitoさん:
>SDRのスペアナは正負の周波数範囲を表示して、fft.csでは1024ポイントで
>計算しているようですが、負の周波数の処理はソースのどこでおこなわれて
>いるのでしょうか。
しいて言えば回転因子を生成している部分で負の周波数も
生成しています。負の回転因子を乗算すると正の周波数成分が
直流となり積分するとその周波数成分が大きな値となります。
また正の周波数の回転因子を乗算すると負の周波数側の
成分が上にずれて直流になります。
FFTのポイントは0を中心にした正負の回転因子を入力信号に
掛けては積分するという事を繰り返すという事です。
1024サンプルのFFTの場合にはサンプリング定理により
その半分の周波数しか扱えませんので正負の両側を
対象に信号をひねります。
しかしFFTをそのまま演算すると1024回も信号全体への
掛け算が必要になるのでFFTでは回転因子として
1Hz、2Hz、4Hz、8Hzというように倍々で作成しておいて
バイナリーのビットに対応するように全体の半分に掛ける
という演算を行います。
例えば1Hz、2Hzの回転因子があったとして4つのメンバに
対して2Hzは3番目と4番目に、1Hzは2番目と4番目に掛けると
それぞれ1Hz、2Hz、3Hz、4Hzを掛けた状態になるという事です。
C#で書いていますので途中の変数をプリントしながら
結果を格納する配列をダンプして1ステップずつ全体の
挙動を観察するとFFTの動作がよく理解できると思います。