1
  1. Apple ドキュメントの FFT サンプル コードを使用している場合、N、log2n、n、および nOver2 は実際には何を意味するのでしょうか?
  2. N は fft のウィンドウ サイズを指すのか、それとも特定のオーディオのサンプル数全体を指すのか、および
  3. オーディオ ファイルから N を計算するにはどうすればよいですか?
  4. オーディオ サンプリング レート、つまり 44.1kHz とどのように関係していますか?
  5. このコードの FFT フレーム サイズは?

コード:

/* Set the size of FFT. */
log2n = N;
n = 1 << log2n;

stride = 1;
nOver2 = n / 2;

printf("1D real FFT of length log2 ( %d ) = %d\n\n", n, log2n);

/* Allocate memory for the input operands and check its availability,
 * use the vector version to get 16-byte alignment. */
A.realp = (float *) malloc(nOver2 * sizeof(float));
A.imagp = (float *) malloc(nOver2 * sizeof(float));
originalReal = (float *) malloc(n * sizeof(float));
obtainedReal = (float *) malloc(n * sizeof(float));
4

2 に答える 2

4
  1. N または n は通常、要素の数を表します。log2n は、n の 2 を底とする対数です。(32 の 2 を底とする対数は 5 です。) nOver2 は n/2、n を 2 で割ったものです。
  2. FFT のコンテキストでは、n は FFT に供給されるサンプルの数です。
  3. n は通常、さまざまな制約によって決まります。より良い品質の結果を提供するために、より多くのサンプルが必要ですが、処理に多くのコンピューター時間が費やされたり、ユーザーが遅延に気付くほど遅くなるまで結果が得られないほど多くのサンプルは必要ありません。通常、サイズを決定するのはオーディオ ファイルの長さではありません。むしろ、処理に使用する「ウィンドウ」を設計し、オーディオ ファイルからウィンドウを保持するのに十分な大きさのバッファーにサンプルを読み取り、バッファーを処理してから、ファイルからのサンプルをさらに使用して繰り返します。ファイル全体が処理されるまで、繰り返しが続きます。
  4. オーディオ サンプリング レートが高いほど、一定期間内により多くのサンプルが存在することになります。たとえば、ウィンドウを1/30秒未満に維持したい場合、44.1 kHz のサンプリング レートは 44.1•1000/30 = 1470 サンプル未満になります。サンプリング レートが高いということは、実行する作業が増えることを意味するため、処理を制限内に保つためにウィンドウ サイズを調整する必要がある場合があります。
  5. そのコードはNfor を使用していますがlog2n、これは残念なことに、人々を混乱させる可能性があるためです。それ以外の場合、コードは上で説明したとおりで、FFT フレーム サイズはnです。

実数データと複素数データが​​混在している場合、FFT のサイズまたは長さについて混乱が生じる可能性があります。通常、実数から複素数への FFT では、実数要素の数が長さと呼ばれます。複素数から複素数への FFT を実行する場合、複素数要素の数が長さになります。

于 2013-03-20T16:52:53.830 に答える
2

「N」はサンプル数、つまりベクトル サイズです。これに対応して、'log2N' は 2 を底とする 'N' の対数であり、'nOver2' は 'N' の半分です。

他の質問に答えるには、FFT で何をしたいのかを知る必要があります。このドキュメントは、特定のシステムを念頭に置いて書かれていますが、(D)FFT におけるパラメーターの関係と意味についての調査として役立ちます。

于 2013-03-20T07:48:08.187 に答える