FFT実施時にサンプリング個数が2のべき乗に足りない場合は元データを0詰めして2のべき乗にする、というテクニックがありますのでデータ数65536の50001以降のデータを強制的に0にして再度FFT実施しました。
自作、MathNet.Nemricsともにピーク位置は16次に変化ありません。
続いて強制0ではなく、すべてデータで埋めた50000のサンプリング数でFFTします。2のべき乗ではないので自作プログラムではFFTできませんが、MathNet.NemricsではFFT可能です。
以下がFFT結果です。ピークの位置が12次に移動しました。
どうやらMathNet.Nemrics内部でFFTの手法を切り替えてますね。
調べたところChirp z-変換アルゴリズム(Bluestein FFT)という手法を用いれば2のべき乗でなくともFFTできるようなので、それを使っているのかもしれません。
今回の結果から以下のように理解しました(個人の感想です!)。
情報が不明な信号を解析する場合は0埋めFFTで良いと思いますが、基準の信号波長が既知でその強度を調査したい、等の用途には0埋めは不向きな場合があるようです。といいますか、65536のデータのうち1/4近くの15536個も0詰めしているのが駄目なんでしょうね。既知の信号を解析する場合は、できるだけ2のべき乗に近しいサンプリング数になるようサンプリングレートを決める必要がある、という当たり前の結論なのか。
いちおう納得したので2のべき乗でないFFTの実装チャレンジしてみます。