用自相关算法估计语音信号的音调

时间:2018-01-05 06:42:39

标签: matlab audio signal-processing pitch pitch-detection

我想使用自相关算法检测语音信号的音调频率。我有一个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 个答案:

答案 0 :(得分:1)

好像,你的代码不起作用,因为Sample1.wav必须只包含发声记录的短的quazi-periodic部分。另请注意,音高频率不是随时间变化的常数,因此您的估算必须考虑到这一点。

如果您只想估算频率,可以从语音填充系统中获取RAPT方法(请参阅Windows的sfs_rapt.m包装器)。