values
私のアプリケーションは、生のオーディオ信号に対して FFT を実行します (すべてのマイクの読み取り値は、1024 セルの16 ビット整数値です)。最初に、16 ビットに従って読み取り値を正規化します。次に、周波数 400Hz の大きさを抽出します。
int sample_rate = 22050;
int values[1024];
// omitted: code to read 16bit audio samples into values array
double doublevalues[1024];
for (int i = 0; i < 1024; i++) {
doublevalues[i] = (double)values[i] / 32768.0; // 16bit
}
fft(doublevalues); // inplace FFT, returns only real coefficients
double magnitude = 400.0 / sample_rate * 2048;
printf("magnitude of 400Hz: %f", magnitude);
これを試して 400Hz 信号を生成して の値を確認すると、magnitude
400Hz 信号がない場合は 0 付近で、ある場合は 30 または 40 になります。
magnitude
フィールドの単位または意味は何ですか? 生の信号を -1..+1 の間に正規化したにもかかわらず、1 より大きいことに驚きました。