看完了没有。这里的帖子我已经在录制的音频(.wav)文件上应用了FFT算法,将其从时域转换到频域。
结果我有一个包含一些值的数组
magnitude[i] = sqrt(re*re+im*im);
现在标题说我必须使用这个幅度数组找到信号的频率和幅度(复杂的声音,即声音),但我不知道如何使用这个数组进行进一步处理.FFT的大小是1024采样率为48000Hz。 请帮我进一步处理。
答案 0 :(得分:0)
如果您只是寻找单个最大(正弦)分量,则扫描幅度数组,直到找到最大值,然后将该值的索引转换为相应的频率,即
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;
}
}
您现在拥有mag_max
中的峰值及其i_max
中的索引值。你可以得到这样的频率:
f_max = i_max * Fs / N;
其中Fs
是采样率(当然N
是FFT大小。)
当然,如果您正在寻找类似复杂声音(例如声音或乐器)的音高之类的东西,那么事情会变得更复杂。 lot 。您可能希望查看谐波产品频谱算法和pitch detection algorithms。