使用MATLAB检测钢琴音符

时间:2018-05-04 15:12:56

标签: matlab audio signal-processing fft

我很难理解钢琴音符FFT的输出(A1, f=55 Hz)。

我期待得到一个强大的"频率为55 Hz,但我得到了一个强大的" 220 Hz的频率,对应于A3,两个八度音阶。

这是我使用的代码:

[audio,fs] = audioread('a1.wav');
audio      = audio(:,1)./max(audio(:,1));
dt         = 1/fs;
t          = linspace(0, length(audio)/fs, length(audio));
T          = max(t);
fftAudio   = fftshift(fft(audio));
mfft       = abs(fftAudio);
pfft       = angle(fftAudio)*(180/pi);
f          = linspace(-fs/2,fs/2,length(fftAudio));
%%
figure,plot(f,mfft,'m.-'),grid on
xlim([0 fs/2])

要么我做错了某事MATLAB"忽略"低频率。 还有FFT: enter image description here

这是放大FFT:

FFT

有谁知道为什么会这样? 谢谢。

1 个答案:

答案 0 :(得分:0)

你刚刚发现一些钢琴会产生一组强烈的谐波泛音,偶尔会出现弱基频谱(可能由琴弦直径和刚度,音板共振能量交换或麦克风响应和放置引起的效果)。

关于乐器物理学和人类听觉的心理声学的一些阅读可能有所帮助。