Нахождение основной частоты .wav файла Matlab - PullRequest
0 голосов
/ 02 декабря 2018

Мне нужно извлечь основную частоту из WAV-файла длиной 1 секунда.

Я просмотрел несколько вариантов, таких как поиск пиков или создание сложного кепстра, но пока не повезло.За последние пару недель я много читал об этом, но все же не могу найти жизнеспособный и оптимальный способ сделать это.Я новичок в Matlab и обработке сигналов.

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 Гц

Возможно, мне понадобится преобразовать это число в Гц.

Для сложного кепстра:

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.

Большое спасибо!

...