查找基频.wav文件Matlab

时间:2018-12-01 21:23:52

标签: matlab frequency

我必须从1秒长的.wav文件中提取基本频率。

我已经查看了几种选择,例如找到峰值或进行复杂的倒频谱,但到目前为止还没有运气。在过去的几周中,我已经阅读了很多有关它的内容,但仍然找不到可行且最佳的方法。我是Matlab和Signal Processing的新手。

filedir = dir('*.wav');  

[y, Fs] = audioread(filedir.name);
x = y(y ~= 0) % removing the zeroes from the array
psdest = psd(spectrum.periodogram,x,'Fs',Fs,'NFFT',length(x));
[~,I] = max(psdest.Data);
fprintf('Maximum occurs at %d Hz.\n',psdest.Frequencies(I));

例如,输出为:最大值出现在5.758645e + 02 Hz

我可能实际上需要将该数字转换为Hz。

对于复杂倒频谱:

load mtlb

dt = 1/Fs;
I0 = round(0.1/dt);
Iend = round(1/dt);
x = mtlb(I0:Iend);

c = cceps(x);


t = 0:dt:length(x)*dt-dt;

trng = t(t>=2e-3 & t<=10e-3);
crng = c(t>=2e-3 & t<=10e-3);

[~,I] = max(crng);

fprintf('Complex cepstrum F0 estimate is %3.2f Hz.\n',1/trng(I))
clearvars

我加载的所有文件的输出值都相同,因此很明显出了问题。

我已经挣扎了一段时间,我真的需要弄清楚这一点。提取该基本频率。我使用Matlab 2016b。

非常感谢!

0 个答案:

没有答案