我的任务是识别由乐器演奏的音符。从我在互联网上读到的内容来看,解决这个问题的一个好方法是 FFT 算法。它接受一个波输入并将其拆分为多个简单的波,当您将它们相加时,它们会为您提供原始波(分解)。这部分很清楚。
我下载了一个 .wav 文件,其中包含我想要识别的钢琴音符 G。我应用了 FFT 算法,显然我得到了一个输出,从这一步我迷路了。
接下来我需要做什么才能识别播放的声音?我知道我必须将此输出转换为以赫兹为单位的频率(因为所有音符都有一个频率,如果我没记错的话,它是唯一的)。我可以这样做:
[y,fs] = wavread('foo.wav');
ydft = fft(y);
% I'll assume y has even length
ydft = ydft(1:length(y)/2+1);
% create a frequency vector
freq = 0:fs/length(y):fs/2;
现在我有一个名为 freq 的向量,它在 fft 的帮助下识别出频率。我怎样才能从这个向量中得到一个音符的频率?