Обнаружение нот пианино с помощью MATLAB - PullRequest
0 голосов
/ 04 мая 2018

У меня возникли проблемы с пониманием вывода 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 "игнорирует" низкие частоты. Там БПФ: enter image description here

Это увеличение БПФ:

FFT

Кто-нибудь знает, почему это происходит? Спасибо.

1 Ответ

0 голосов
/ 05 мая 2018

Вы только что обнаружили, что некоторые пианино создают наборы сильных гармонических обертонов с иногда слабым спектром основных частот (эффекты, которые могут быть вызваны диаметром и жесткостью струны, перестановками энергии резонанса деки или откликом и размещением микрофона).

Некоторое чтение по физике музыкальных инструментов и психоакустике человеческого слуха может помочь.

...