【发布时间】:2013-07-26 13:09:33
【问题描述】:
我的应用程序对原始音频信号执行 FFT(所有麦克风读数都是 values 中的 16 位整数值,即 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 左右,当有 400Hz 信号时它会上升到 30 或 40。
magnitude 字段的单位或含义是什么?令我惊讶的是它大于 1,即使我将原始信号标准化为介于 -1..+1 之间。
【问题讨论】:
-
幅度在这里只是一个double,与信号无关
-
好的,那我怎么知道这能涨多远呢?那么可能值的范围是多少?