使用带有单个音符的wav文件上的FFT输出,找出音符的频率(以确定它)

时间:2016-11-13 10:25:06

标签: matlab audio fft wav piano

我的任务是识别乐器演奏的音符。从我在互联网上看到的这个问题的一个很好的方法是FFT算法。它需要一个波输入并将其分成多个简单的波,当你总结它们时,它们会给你原始波(分解)。这一部分很清楚 我下载了一个包含我想识别的钢琴音符G的.wav文件。我应用FFT算法,显然我得到一个输出,从这一步我失去了。
识别播放的声音我接下来需要做什么?我知道我必须以Hz的频率转换此输出(因为所有音符都有一个频率,如果我没有记错,则是唯一的)。我可以这样做:

[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的帮助下被识别出来。如何从该向量中获取音符的频率?

0 个答案:

没有答案