キスFFTの実際の計算を実装しようとしています。
誰もが知っていると思いますが、ここでkiss FFTについて質問したのは私が初めてではなく、特にkiss_fftrについて質問した人でもありません。私は FFT にかなり慣れていませんが、ほとんどの基本を理解し、ATxmega192A3 のオーディオ周波数アナライザーに実装しようとしています。
これは、256 の出力周波数ビンを取得するために、512 の 8 ビット ADC サンプルを FFT に入力するためにコピーして修正した基本的なコードです。
int size = 512;
int isinverse = 1;
kiss_fft_scalar zero;
memset(&zero,0,sizeof(zero));
kiss_fft_cpx fft_in[size];
kiss_fft_cpx fft_out[size];
kiss_fftr_cfg fft = kiss_fftr_alloc(size*2,0,0,0);
//load 512 samples from ADC into fft_in[].r and zero out fft_in[].i, fft_out[].i, and fft_out[].r
kiss_fftr(fft, (kiss_fft_scalar*) fft_in, fft_out);
ここに私の質問があります:
出力ビンに重複はありますか? つまり、12Hz アウト ビンは 12Hz のみを表示し、部分的に 12.1Hz に丸められていません (音声がそれほど正確ではないことを認識しているため、干渉を引き起こす物理的影響が残っていることを認識しています)。
Kiss_fftr_cfg の使い方がわかりません。8 ビット int (または 16 ビット) で使用する限り、すべてのオプションがどこにラベル付けされているかはわかりませんが、それはすべての入力サンプルが 16 ビットである必要があるという意味ではありませんか?以前のコードのすべてで、 cfg の宣言 彼が行った最初の 2 つの int 宣言以外は理解できません.なぜ彼が、kiss_fftr にスペースを割り当てる代わりに memset を使用したのかわかりません.どこで詳細情報を見つけることができますか?ファイルをkiss_fftで検索しており、何時間も費やしてコードを掘り下げても、あまり役立つ情報が見つからないようです。