我想使用自相关算法检测语音信号的音调频率。我有一个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
感谢您对此事的帮助。
答案 0 :(得分:1)
好像,你的代码不起作用,因为Sample1.wav必须只包含发声记录的短的quazi-periodic部分。另请注意,音高频率不是随时间变化的常数,因此您的估算必须考虑到这一点。
如果您只想估算频率,可以从语音填充系统中获取RAPT方法(请参阅Windows的sfs_rapt.m包装器)。