读完一个没有。这里的帖子本身我已经在录制的音频(.wav)文件上应用了 FFT 算法,以将其从时域转换为频域。
结果,我得到了一个包含一些值的数组
magnitude[i] = sqrt(re*re+im*im);
现在正如标题所说,我必须使用这个幅度数组找到信号的频率和幅度(复杂的声音,即语音),但我不知道如何使用这个数组进行进一步处理。FFT 的大小是 1024 和采样率为 48000Hz。请帮我做进一步处理。
如果您只是在寻找单个最大(正弦)分量然后扫描幅度数组直到找到最大值,然后将该值的索引转换为其对应的频率,即
mag_max = magnitude[0];
i_max = 0;
for (i = 1; i < N; ++i)
{
if (magnitude[i] > mag_max)
{
mag_max = magnitude[i];
i_max = i;
}
}
您现在有峰值 in 的值mag_max
及其索引 in i_max
。你可以得到这样的频率:
f_max = i_max * Fs / N;
其中Fs
是采样率(N
当然是 FFT 大小)。
当然,如果您正在寻找诸如复杂声音(例如人声或乐器)的音高之类的东西,那么事情会变得更加复杂。您可能想了解一下 Harmonic Product Spectrum 算法和音高检测算法。