Комплексный кепстр — основная оценка частоты

В этом примере показано, как оценить основную частоту докладчика с помощью комплексного кепстра. Пример также оценивает основную частоту с помощью метода пересечения нулем и сравнивает результаты.

Загрузите речевой сигнал. Запись имеет высказывание женщины "MATLAB". Частота дискретизации составляет 7 418 Гц. Следующий код загружает речевую форму волны, mtlb, и частота дискретизации, Fs, в рабочую область MATLAB®.

load mtlb

Используйте спектрограмму, чтобы идентифицировать речевой сегмент для анализа.

segmentlen = 100;
noverlap = 90;
NFFT = 128;

spectrogram(mtlb,segmentlen,noverlap,NFFT,Fs,'yaxis')

Figure contains an axes. The axes contains an object of type image.

Извлеките сегмент от 0,1 до 0,25 секунд для анализа. Извлеченный сегмент соответствует примерно первому гласному,/æ/, в "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

Figure contains an axes. The axes contains 2 objects of type line.

Используйте детектор пересечения нулем на отфильтрованной lowpass и исправленной форме гласного, чтобы оценить основную частоту.

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

Смотрите также

| |

Для просмотра документации необходимо авторизоваться на сайте