我的应用程序对原始音频信号执行 FFT(所有麦克风读数都是 16 位整数值values
,即 1024 个单元格)。它首先根据 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 之间。