首页 > 解决方案 > 使用 MATLAB 检测钢琴的音符

问题描述

我在理解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: 在此处输入图像描述

这是放大 FFT:

快速傅里叶变换

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

标签: matlabaudiosignal-processingfft

解决方案


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

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


推荐阅读