matlab - 使用MATLAB检测钢琴音符

标签 matlab audio signal-processing fft

我在理解钢琴音符FFT(A1, f=55 Hz)的输出时遇到了一些麻烦。

我原本希望在55 Hz处获得“强”频率,但是相反,我在220 Hz处获得“强”频率,这与A3相对应,向上增加了两个 Octave 。

这是我正在使用的代码:

[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

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

最佳答案

您仅发现有些钢琴会产生几组强谐波泛音,而基频频谱有时会很弱(效果可能是由弦的直径和刚度,音板共振能量交换或麦克风响应和放置引起的)。

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

关于matlab - 使用MATLAB检测钢琴音符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50178115/

相关文章:

algorithm - 创建一个沿行和列具有常量和的二维二进制矩阵

matlab - 在Matlab中用透明像素填充阵列

javascript - 在Javascript中,在本地工作时,如何从项目文件夹中读取文件并将其用作ArrayBuffer?

matlab - 如何在 MATLAB 中使用 FastICA 将数据投影到独立组件上

iPhone:CPU 处理 DSP/傅里叶变换/频域的能力?

matlab - 图形背景的颜色特定区域取决于条件

matlab - 使用 cell2mat 将数字矩阵与字符串向量(列标签)连接起来的问题

安卓停止录音失败

android - 从声源移动时,产生的声音强度较小

python - ValueError : could not broadcast input array from shape (20, 590) 变成形状 (20)