Matlab 基于自相关算法的语音基音估计

Matlab 基于自相关算法的语音基音估计,matlab,audio,signal-processing,pitch,pitch-detection,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); pe

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

感谢您在这方面的帮助。

您的代码似乎不起作用,因为Sample1.wav必须只包含发声记录的短quazi周期部分。还要注意,基音频率不是随时间变化的常数,因此您的估计必须考虑到这一点


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

为什么结果是错误的?你得到了什么?你期望什么?我想检测说话者的音调。但是它的结果超出了人类的频率限制。
findpeaks
可能会发现太多的峰值。你画出它找到的山峰了吗?它们看起来正确吗<代码>等待;plot(locs,pks,'o')。我曾经写过一篇关于这个主题的小论文。为了使自相关方法获得更高的精度,需要进行许多前处理和后处理。当信号中有多个音调时,它也会失败。您可以在此处浏览来源和论文: