Оценка форманты с коэффициентами LPC

В этом примере показано, как оценить частоты форманты гласного с помощью линейного предсказательного кодирования (LPC). Частоты форманты получены путем нахождения корней полинома прогноза.

Этот пример использует речевую выборку mtlb.mat, который является частью Signal Processing Toolbox™. Речь отфильтрована lowpass. Из-за низкой частоты дискретизации эта речевая выборка не оптимальна для этого примера. Низкая частота дискретизации ограничивает порядок авторегрессивной модели, которую можно подбирать к данным. Несмотря на это ограничение, пример иллюстрирует метод для использования коэффициентов LPC, чтобы определить форманты гласного.

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

load mtlb

MAT-файл содержит речевую форму волны, mtlb, и частота дискретизации, Fs.

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

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

spectrogram(mtlb,segmentlen,noverlap,NFFT,Fs,'yaxis')
title('Signal Spectrogram')

Извлеките сегмент от 0,1 до 0,25 секунд для анализа. Извлеченный сегмент соответствует примерно первому гласному, / один/, в "MATLAB".

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

Два общих шага предварительной обработки применились к речевым формам волны, прежде чем линейное предсказательное кодирование будет работой с окнами и предварительным акцентом (highpass) фильтрация.

Окно речевой сегмент с помощью Окна Хэмминга.

x1 = x.*hamming(length(x));

Примените фильтр перед акцентом. Фильтр перед акцентом является все-полюсом highpass (AR (1)) фильтр.

preemph = [1 0.63];
x1 = filter(1,preemph,x1);

Получите коэффициенты линейного предсказания. Чтобы задать порядок модели, используйте общее правило, что порядок является два раза ожидаемым количеством формант плюс 2. В частотном диапазоне, [0, |Fs |/2], вы ожидаете три форманты. Поэтому установите порядок модели, равный 8. Найдите корни полинома прогноза возвращенными lpc.

A = lpc(x1,8);
rts = roots(A);

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

rts = rts(imag(rts)>=0);
angz = atan2(imag(rts),real(rts));

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

Пропускная способность формант представлена расстоянием нулей полинома прогноза от модульного круга.

[frqs,indices] = sort(angz.*(Fs/(2*pi)));
bw = -1/2*(Fs/(2*pi))*log(abs(rts(indices)));

Используйте критерий, что частоты форманты должны быть больше 90 Гц с пропускной способностью меньше чем 400 Гц, чтобы определить форманты.

nn = 1;
for kk = 1:length(frqs)
    if (frqs(kk) > 90 && bw(kk) <400)
        formants(nn) = frqs(kk);
        nn = nn+1;
    end
end
formants
formants = 1×3
103 ×

    0.8697    2.0265    2.7380

Первые три форманты 869.70, 2026.49, и 2 737,95 Гц.

Ссылки

[1] Закрепите крючок на поводке, Рой К. и Фаусто Милинассо. "Местоположение форманты из аналитических данных о LPC". IEEE® Transactions о Речи и Обработке аудиоданных. Издание 1, Номер 2, 1993, стр 129-134.

[2] Loizou, Филипос К. "COLEA: программный инструмент MATLAB для речевого анализа".