【发布时间】:2018-01-05 06:42:39
【问题描述】:
我想使用自相关算法检测语音信号的音高频率。我有一个 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
感谢您在这件事上的帮助。
【问题讨论】:
-
为什么结果有误?你得到了什么?你期待什么?
-
我想检测说话者声音的音高。但它的结果超出了人类的频率限制。
-
findpeaks可能发现了太多的峰。你绘制了它找到的峰吗?它们看起来正确吗?hold on; plot(locs,pks,'o'). -
我曾经写过一篇关于这个主题的小论文。需要进行许多预处理和后处理才能使用自相关方法获得更高的准确性。当信号中有多个音调时,它也会失败。您可以在这里浏览源和论文:shafq.at/papers/pda_paper_ayan.pdf
标签: matlab audio signal-processing pitch pitch-detection