matlab - 使用 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])
这是放大 FFT:
有谁知道为什么会这样?谢谢你。
解决方案
您只是发现一些钢琴会产生一组强烈的谐波泛音,偶尔会出现较弱的基本频谱(可能由琴弦直径和刚度、音板共振能量交换或麦克风响应和放置引起的影响)。
一些关于乐器物理学和人类听觉心理声学的阅读可能会有所帮助。
推荐阅读
- java - Checkstyle 禁止对路径中包含特定包的文件进行所有检查
- iphone - 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'Receiver()没有标识符'pizzaSegue'的segue
- python - Azure 管道环境变量失败
- reactjs - 如何从 redux 形式的字段中获取价值?
- reactjs - react-google-maps 地图在传递道具时未更新,并且标记在更新时落后一个位置
- python - 试图找到一种方法将相同的密钥用于不同的值
- php - apache 配置和 ERR_EMPTY_RESPONSE 出错
- php - 在每个目录的 php.ini 上使用 `disable_functions`
- java - 如何使用硒单击元素,其中仅存在“::Before”标签
- javascript - 是否可以检查内联 SVG 中各种形状之间的共享边界?