В этом примере показано, как оценить основную частоту говорящего с помощью сложного кепстра. Пример также оценивает основную частоту с использованием метода пересечения нуля и сравнивает результаты.
Загрузите речевой сигнал. Запись о женщине говорит «MATLAB.» Частота дискретизации 7418 Гц. Следующий код загружает речевой сигнал, mtlbи частота дискретизации, Fs, в рабочую область MATLAB ®.
load mtlbИспользуйте спектрограмму для определения озвученного сегмента для анализа.
segmentlen = 100;
noverlap = 90;
NFFT = 128;
spectrogram(mtlb,segmentlen,noverlap,NFFT,Fs,'yaxis')
Извлекают сегмент от 0,1 до 0,25 секунд для анализа. Извлеченный сегмент примерно соответствует первому гласному ,/start/, в «MATLAB».
dt = 1/Fs; I0 = round(0.1/dt); Iend = round(0.25/dt); x = mtlb(I0:Iend);
Получить сложный кепстр.
c = cceps(x);
Выберите временной диапазон от 2 до 10 мс, соответствующий частотному диапазону приблизительно от 100 до 500 Гц. Определите самый высокий пик кепстра в выбранном диапазоне. Найдите частоту, соответствующую пику. Используйте пик в качестве оценки фундаментальной частоты.
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))Complex cepstrum F0 estimate is 239.29 Hz.
Постройте график кепстра в выбранном диапазоне времени и наложите пик.
plot(trng*1e3,crng) xlabel('ms') hold on plot(trng(I)*1e3,crng(I),'o') hold off

Для оценки фундаментальной частоты используйте детектор пересечения нулей на низкочастотной и выпрямленной форме гласного.
[b0,a0] = butter(2,325/(Fs/2));
xin = abs(x);
xin = filter(b0,a0,xin);
xin = xin-mean(xin);
x2 = zeros(length(xin),1);
x2(1:length(x)-1) = xin(2:length(x));
zc = length(find((xin>0 & x2<0) | (xin<0 & x2>0)));
F0 = 0.5*Fs*zc/length(x);
fprintf('Zero-crossing F0 estimate is %3.2f Hz.\n',F0)Zero-crossing F0 estimate is 233.27 Hz.
Оценка основной частоты, полученной с помощью комплексного кепстра, составляет 239,29 Гц, а оценка с помощью детектора пересечения нуля - 233,27 Гц.