Оценка высоты звука по речевым сигналам с использованием алгоритма автокорреляции

Я хочу определить частоту основного тона речевых сигналов, используя алгоритм автокорреляции. У меня есть код MATLAB, но результаты неверны. Я был бы признателен, если бы вы могли исправить ошибку в моем коде.

[y,Fs]=audioread('Sample1.wav'); 
y=y(:,1);
auto_corr_y=xcorr(y); 
subplot(2,1,1);plot(y) 
subplot(2,1,2);plot(auto_corr_y)
[pks,locs] = findpeaks(auto_corr_y);
[mm,peak1_ind]=max(pks);
period=locs(peak1_ind+1)-locs(peak1_ind);
pitch_Hz=Fs/period

Спасибо за вашу помощь в этом вопросе.

1 ответ

Кажется, ваш код не работает, потому что Sample1.wav должен содержать только короткую квазипериодическую часть вокализованной записи. Также обратите внимание, что частота основного тона не постоянна во времени, поэтому ваша оценка должна учитывать это.

Если вы просто хотите оценить частоту, вы можете воспользоваться методом RAPT в Speech Filling System (см. Оболочку sfs_rapt.m для Windows).

Другие вопросы по тегам