-1

キス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);

ここに私の質問があります:

  1. 出力ビンに重複はありますか? つまり、12Hz アウト ビンは 12Hz のみを表示し、部分的に 12.1Hz に丸められていません (音声がそれほど正確ではないことを認識しているため、干渉を引き起こす物理的影響が残っていることを認識しています)。

  2. Kiss_fftr_cfg の使い方がわかりません。8 ビット int (または 16 ビット) で使用する限り、すべてのオプションがどこにラベル付けされているかはわかりませんが、それはすべての入力サンプルが 16 ビットである必要があるという意味ではありませんか?以前のコードのすべてで、 cfg の宣言 彼が行った最初の 2 つの int 宣言以外は理解できません.なぜ彼が、kiss_fftr にスペースを割り当てる代わりに memset を使用したのかわかりません.どこで詳細情報を見つけることができますか?ファイルをkiss_fftで検索しており、何時間も費やしてコードを掘り下げても、あまり役立つ情報が見つからないようです。

4

1 に答える 1

1

FFT 出力ビンには、およそ 2*Fs/N (FFT 長に対するサンプル レート) の帯域幅がありますが、Sinc 整形関数として減衰または遷移します。したがって、すべての FFT 結果ビンは、ビンの中心を除いて他のすべてのビンと重なります。

Kiss FFT を使用するには、C データ型と、どの自動変換が機能するかどうかについて知る必要があります。

于 2015-05-03T10:36:04.393 に答える