0

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

感谢您在这件事上的帮助。

4

1 回答 1

1

似乎,您的代码不起作用,因为 Sample1.wav 必须只包含发声记录的短准周期部分。另请注意,音调频率不是随时间恒定的,因此您的估计必须考虑到这一点。

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

于 2018-01-05T13:49:00.083 回答